La'hev

Heverovy poznatky a poznámky

Uživatelské nástroje

Nástroje pro tento web


MySQL/MariaDB

MySQL je databázový systém. MariaDB je fork MySQL, v časech MySQL 5.1 až 5.5 byla jeho binární kopií (tzn. vnitřnosti byly jiné, ale jinak se zdálo, že je to MySQL ve všech ohledech).

Verze

MySQL 5.5

MySQL 5.6

Nové vlastnosti

  • Geometrické / Spatial funkce - Do MySQL 5.5 to fungovalo pitomě, funkce Contains udělala polygonu udělalo obdelník - nepřesné a defacto nepoužitelné. MySQL 5.6 to implementuje už správně. V MariaDB to fungovalo správě už od verze 5.3.3
  • Mikrosekundy - umí pracovat i s jemnějším rozlišením času než na sekundy, pokud se to takto v typu specifikuje.

Problémy při aktualizaci

Nevytvávření funkcí z dumpů

je to problém lešího zabezpečení v novější verzi MySQL. Funkce musí být uvedené, že jsou DETERMINISTIC (nebo nějakou obdobnou deklaraci) jinak MySQL vyhodí chybu a funkci nevytvoří. Vyřešit se to dá následujícím příkazem nebo předefinováním funkcí.

SET GLOBAL log_bin_trust_function_creators = 1; # POZOR! neideální řešení.

Lepší bude možná zvážit, vypnout binární logování úplně (viz další kapitola).

Binární log

Po aktualizaci db je v základní konfiguraci změna v tom, že zapne binární log. Jak název napovídá, mysql vytváří soubory obsahující (v binární podobě) všechny prováděné změny. Soubory jsou předvídatelně umístěné /var/log/mysql/mariadb-bin.*. Jejich obsah lze prohlédnout příkazem mysqlbinlog. Binární log má nastavenou expirační dobu a umí se rychle rozrůst.

Binární log se užívá k zálohování (občas si provedu mysqldump a když vím v jakém stavu se dump provedl, můžu nejnovější stav „dopočítat“ z binárního logu) a/nebo k replikaci, kdy slave si z masteru tahá právě informace z binárního logu a u sebe je aplikuje (takže klidně může na nějakou dobu vypadnout spojení a pak se vše umí dát do pořádku).

Z výše uvedených je pak namístě, aby MySQL se funkce (jejichž volání je v binárním logu) nechovaly nedeterministicky. Proto při zapnutém binárním logu si databáze umí stěžovat, že procedury/funkce nejsou deterministické.

Binární logování se zapíná v my.cnf. Bohužel ji nelze vypnout v debianím duchu, je nutné editovat my.cnf a zakomentovat řádky log_bin… a expire_logs_days…1), restartovat mysql a potom log soubory smazat.

Nástroje

MySQL Tuner

apt-get install mysqltuner
mysqltuner
mysql_mariadb.txt · Poslední úprava: 2015/05/25 13:05 autor: Hever