====== MySQL/MariaDB ====== MySQL je databázový systém. [[mariadb|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...''((Zdroj: http://dba.stackexchange.com/questions/72770/disable-mysql-binary-logging-with-log-bin-variable)), restartovat mysql a potom log soubory smazat. ===== Nástroje ===== ==== MySQL Tuner ==== apt-get install mysqltuner mysqltuner