6.0 codebase i zvanično otišao u /dev/null

Spominjao sam već nekoliko puta ali evo sada i zvanično, 6.0 codebase je otišao u smeće. 90 procenata novina koje nisu vezane za falcon ili maria engine su backportovane nazad u 5.x drvo (većinom u 5.6) tako da će bolja podrška za windoze, bolji optimizer, ubrzanja u innodb-u, online backup i još mnogo drugih poboljšanja biti dostupni u 5.x codebase-u i polako, kako koji feature dobije GA status tako će biti prebacivan u AZALEA code. Falcon i Maria su ostavljeni da umru.

Monti razvija Maria storage engine nezavisno od Orakla mada i dalje, posle skoro 5 godina, Maria engine nije ni blizu produkcione upotrebe :(. Izbacili su podršku za transakcije (pošto nisu mogli godinama da naprave da to radi) i krenuli putem da naprave da Maria bude samo drop in zamena za MyISAM ali da bude crash safe ali ni to na žalost još uvek ne radi… MyISAM je odličan storage engine za mnoge prilike ali bi mnogo bilo iskusno kada bi postojala zamena koja je isto toliko brza a koja je crash safe, na moju veliku žalost (i na radovanje nekih zlobnika) Monti to još uvek nije uspeo da napravi. Ja se iskreno nadam da nisu daleko od cilja.

Što se Falcon-a tiče, današnji kompajleri prosto nisu dovoljno dobri za ono kako je Falcon storage engine zamišljen tako da ogromna zavisnost od pravilne implementacije exception-a od strane c++-a je učinilo da Falcon danas i dalje ne radi iako bi bio ozbiljan takmac InnoDB-u. Za sada je ostavljen u stranu za neka bolja vremena, pa možda, ako nekad neki c++ kompajler bude imao thread safe exception-e možda se i Falcon vrati iz pepela. Druga mogućnost je da će neke dobre ideje/tehnologija iz Falcon-a da se implementiraju u InnoDB i tako poboljša već odličan InnoDB storage engine.

VN:F [1.9.17_1161]
Rating: +1 (from 3 votes)

May 28, 2010 • Tags: , , • Posted in: Desavanja u DB svetu, Razno • No Comments

Novosti sa UC-a 2010

MySQL User Conference & ExpoKao i za vreme ranijih MySQL User Conference-a i sada je tokom istog gomila novih verzija sa značajnim poboljšanjima izašla u javnost:

Od prezentacija, meni je najznačajnija za mene je Bernhardova prezentacija novosti u MySQL Cluster-u 7.x sa posebnim osvrtom na 7.1.

Neki od bitnih detalja za 7.0:

I neki od bitnih detalja za 7.1:

Toliko za sada

VN:F [1.9.17_1161]
Rating: +2 (from 2 votes)

April 13, 2010 • Tags: , , • Posted in: Razno • 2 Comments

MySQL AUDIT data

Jedan od velikih nedostataka MySQL-a za ozbiljno enterprise okruzenje je auditing. Nekakav minimalan auditing koji enterprise uglavnom zahteva je log
– ko se ulogovao
– kada se ulogovao
– odakle se ulogovao
– da li je logovanje bilo uspesno ili ne
– kada se odlogovao sa servera

Za web je ovo nepotrebno (bez potrebe bi u logu imali informaciju kada se web server zakacio/otkacio) ali za enterprise moze da bude vrlo korisno a vrlo cesto i neophodno, pogotovo kada enterprise aplikacije projektuju polupismeni developeri kojima baza radi autentifikaciju i user permissioning a ne aplikacija “posto im je tako lakse”.

Kao sto rekoh, MySQL ima jako slabu / nikakvu podrsku za auditing. Sve sto MySQL moze je da upali “general query log” i da u log fajl pise SVE (ko se okacio, kad, i stra je sve radio), ali to ima 2 mane
1. general query log trosi resurse (i do 20% usporenja ne high load aplikacijama)
2. general query log ne pamti neuspele konekcije

Kako je mysql-proxy postao vrlo popularan i koristi se vrlo cesto (sto za load balancing sto u neke druge svrhe) a i sastavni je deo MySQL Enterprise Monitor-a gde sve konekcije idu kroz MEM agent kako bi MEM mogao da pravi analizu upita, koristenje proxy-a za auditing uopste nije tako lose resenje.

Kako bi auditing radio, potrebno je instalirati mysql-proxy (ili agent), namestiti mysql da prima konekcije samo sa proxy-a (staviti ga na neki zaseban port i setovati firewall) a proxy podici na standardnom 3306 portu te ce vase aplikacije bez znanja sav traffic usmeriti kroz proxy.

Skript koji radi neki basic auditing bi izgledao:

function read_auth_result( auth )
  local state = auth.packet:byte()
  if state == proxy.MYSQLD_PACKET_OK then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH OK:"
     .. proxy.connection.server.thread_id .. ":"
     .. proxy.connection.client.username .. ":"
     .. proxy.connection.client.src.name .. "->"
     .. proxy.connection.server.dst.name )
  elseif state == proxy.MYSQLD_PACKET_ERR then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH FAILED: "
      .. proxy.connection.server.thread_id .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  else
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH UNKNOWN "
      .. string.format("%q", auth.packet)  .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  end
end
function disconnect_client()
  if proxy.connection.server.thread_id then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":DISCONNECT:"
      .. proxy.connection.server.thread_id .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  end
end

Ako pogledamo, skript nam loguje vreme, username, thread na mysql-u i sors/destination adrese konekcije. Vidimo kada je neko pokusao da se uloguje na mysql, da li je uspeo ili ne i kada se otkacio.

Log izgleda otprilike ovako:

2010-02-08 17:21:22:AUTH OK:31:arhimed:127.0.0.1:44440->127.0.0.1:3306
2010-02-08 17:21:33:DISCONNECT:31:arhimed:127.0.0.1:44440->127.0.0.1:3306
2010-02-08 17:21:38:AUTH FAILED: 32:arhime:127.0.0.1:44587->127.0.0.1:3306
2010-02-08 17:21:38:DISCONNECT:32:arhime:127.0.0.1:44587->127.0.0.1:3306
2010-02-08 17:21:43:AUTH FAILED: 33:arhie:127.0.0.1:44622->127.0.0.1:3306
2010-02-08 17:21:43:DISCONNECT:33:arhie:127.0.0.1:44622->127.0.0.1:3306

Ako hocemo da logujemo i osnovne podatke o upitima koje korisnik izvrsava onda mozemo prosiriti lua skript:

function read_auth_result( auth )
  local state = auth.packet:byte()
  if state == proxy.MYSQLD_PACKET_OK then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH OK:"
     .. proxy.connection.server.thread_id .. ":"
     .. proxy.connection.client.username .. ":"
     .. proxy.connection.client.src.name .. "->"
     .. proxy.connection.server.dst.name )
  elseif state == proxy.MYSQLD_PACKET_ERR then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH FAILED: "
      .. proxy.connection.server.thread_id .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  else
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":AUTH UNKNOWN "
      .. string.format("%q", auth.packet)  .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  end
end
function disconnect_client()
  if proxy.connection.server.thread_id then
      print( os.date('%Y-%m-%d %H:%M:%S') .. ":DISCONNECT:"
      .. proxy.connection.server.thread_id .. ":"
      .. proxy.connection.client.username .. ":"
      .. proxy.connection.client.src.name .. "->"
      .. proxy.connection.server.dst.name )
  end
end
function read_query( packet )
  if string.byte(packet) == proxy.COM_QUERY then
    proxy.queries:append(1, packet, {resultset_is_needed = true} )
    return proxy.PROXY_SEND_QUERY
  end
end
function read_query_result( inj )
  local res         = assert(inj.resultset)
  local raw_len     = assert(res.raw):len()
  local packet      = assert(inj.query)
  local flags       = res.flags
  if res.affected_rows then
    ar = res.affected_rows
  else
    ar = "0"
  end
  print( os.date('%Y-%m-%d %H:%M:%S')
  .. ":QUERY:" .. proxy.connection.server.thread_id .. ":"
  .. inj.query .. ":"
  .. (inj.query_time / 1000) .. "ms" .. ":"
  .. (inj.response_time / 1000) .. "ms" .. ":"
  .. raw_len .. ":"
  .. tostring(res.flags.no_good_index_used) .. ":"
  .. tostring(res.flags.no_index_used) .. ":"
  .. res.warning_count .. ":"
  .. res.query_status .. ":"
  .. ar
  )
end

pa nam sada log izgleda malo drugacije:
2010-02-08 17:21:22:AUTH OK:31:arhimed:127.0.0.1:44440->127.0.0.1:3306
2010-02-08 17:21:22:QUERY:31:select @@version_comment limit 1:0.092ms:0.095ms:1:false:false:0:0:0
2010-02-08 17:21:23:QUERY:31:select * from mysql.user:0.281ms:0.305ms:1:false:true:0:0:0
2010-02-08 17:21:24:QUERY:31:select * from mysql.user:0.278ms:0.299ms:1:false:true:0:0:0
2010-02-08 17:21:25:QUERY:31:select * from mysql.user:0.272ms:0.293ms:1:false:true:0:0:0
2010-02-08 17:21:28:QUERY:31:select * from mysql.db:0.229ms:0.243ms:1:false:true:0:0:0
2010-02-08 17:21:33:DISCONNECT:31:arhimed:127.0.0.1:44440->127.0.0.1:3306
2010-02-08 17:21:38:AUTH FAILED: 32:arhime:127.0.0.1:44587->127.0.0.1:3306
2010-02-08 17:21:38:DISCONNECT:32:arhime:127.0.0.1:44587->127.0.0.1:3306
2010-02-08 17:21:43:AUTH FAILED: 33:arhie:127.0.0.1:44622->127.0.0.1:3306
2010-02-08 17:21:43:DISCONNECT:33:arhie:127.0.0.1:44622->127.0.0.1:3306

VN:F [1.9.17_1161]
Rating: +6 (from 6 votes)

February 8, 2010 • Tags: , , • Posted in: Razno, Support • No Comments

MySQL Sajt ne radi kako treba

Ako ste primetili da www.mysql.com ne radi / fale mu neki detalji (na primer download sekcija ili dokumentacija), to je zato sto se sajt trenutno reorganizuje.

Trazite dokumentaciju, nema je? pogledajte http://dev.mysql.com

VN:F [1.9.17_1161]
Rating: +1 (from 3 votes)

January 28, 2010 • Posted in: Razno • No Comments

Politika je gotova a sad malo da radimo

Oficijalni EC press release vezano za odobrenje ORACLE&SUN deal-a

Najzad, posle vise od pola godina prepucavanja, ORACLE & SUN dil ce da krene u implementaciju. Sta ce isti tacno doneti pokazace vreme. Ja sam za sada optimistican i mislim da je ovo veliki dan za open source zajednicu posto ORACLE ima mogucnost da od MySQL-a napravi “bezobrazno dobar RDBMS”. Oracle, koji je vec vlasnik najbitnijeg dela MySQL-a (InnoDB storage engine-a), je obecao da ce da ulozi znacajna sredstva u dalji razvoj MySQL-a.

Sta i kako dalje – videcemo.

Za sada i dalje vazi zabrana bilo kakvog komentarisanja od strane zaposlenih u SUN-u tako da cu sada da prekinem, vise kada nam skinu zabranu.

VN:F [1.9.17_1161]
Rating: +3 (from 5 votes)

January 21, 2010 • Posted in: Razno • 7 Comments