Průvodce aktualizací na MySQL 4.1.x Michael Kohl Francesco Riosa Jan Oppolzer MySQL tým hrdě oznamuje, že MySQL 4.1 je nyní k nalezení v nestabilním stromu Gentoo (~arch). Jak tým doufá, bude brzy schopen tento ebuild stabilizovat a zde je způsob aktualizace pro všechny ochotné testery. 1.8 2006-09-04 Aktualizace ze starších verzí MySQL

Uživatelé aktualizující ze staré verze (<4.0.24) MySQL budou muset nejdříve nainstalovat MySQL 4.0.25. Pokud již máte současnou verzi, můžete tuto sekci přeskočit a pokračovat v další.

# emerge -av --buildpkg "<mysql-4.1"
Vytváření zálohy vašich současných dat

Jeden z nejdůležitějších úkolů, který musí každý administrátor databáze provádět, je zálohování dat. Vzhůru do toho:

# mysqldump \
  -uroot \
  --password='vaše_heslo' \
  -hlocalhost \
  --all-databases \
  --opt \
  --allow-keywords \
  --flush-logs \
  --hex-blob \
  --master-data \
  --max_allowed_packet=16M \
  --quote-names \
  --result-file=BACKUP_MYSQL_4.0.SQL

Nyní by měl existovat soubor pojmenovaný BACKUP_MYSQL_4.0.SQL, který může být později použit pro obnovení vašich dat. Data jsou popsána v MySQL verzi jazyka SQL, the Structured Query Language (= Strukturovaný dotazovací jazyk).

Nyní by byl také dobrý čas na zjištění, jestli záloha, kterou jste vytvořili, je funkční.

Aktualizace ze současných verzí MySQL

Pokud jste přeskočili krok #1, musíte nyní vytvořit záložní balíček (databázového serveru a nikoli dat) současné nainstalované verze:

# quickpkg dev-db/mysql

Nyní nastal čas na vyčištění současné verze a všech jejich dat:

# /etc/init.d/mysql stop
# emerge -C mysql
# tar cjpvf ~/mysql.$(date +%F_%H-%M).tar.bz2 /etc/mysql/my.cnf /var/lib/mysql/
# ls -l ~/mysql.*
# rm -rf /var/lib/mysql/ /var/log/mysql
Nyní by měly existovat dvě různé zálohy: První SQL, která je přenosná mezi různými verzemi MySQL, a druhá, která vám dovolí rychle obnovit vaši databázi. To bude detailněji popsáno dále v tomto dokumentu.

Poté, co jste se zbavili vaší staré MySQL instalace, můžete nyní nainstalovat novou verzi. Všimněte si, že revdep-rebuild je nezbytný pro obnovu balíčků linkovaných proti MySQL.

# emerge -av ">mysql-4.1"
# dispatch-conf
# revdep-rebuild

Nyní nakonfigurujte nově nainstalovanou verzi MySQL a restartujte démona:

# emerge --config =mysql-4.1.<mikro_verze>
# /etc/init.d/mysql start

Nakonec můžete importovat zálohu, kterou jste vytvořili během kroku #2.

Standardní /etc/mysql/my.cnf soubor nastavuje binární zapisování (log-bin) standardně. To bude zapisovat každou transakci, která upraví data. Bude-li to puštěno na velkou databázi (např. 1GB), může to vytvořit extrémně velké soubory, které zaberou dost rychle kapacitu disku. Pokud máte málo místa, vypnutí binárního zapisování může být dobrý nápad.
# cat BACKUP_MYSQL_4.0.SQL \
     | mysql \
     -uroot \
     --password='vaše_heslo' \
     -hlocalhost \
     --max_allowed_packet=16M

# mysql_fix_privilege_tables \
     --defaults-file=/etc/mysql/my.cnf \
     --user=root \
     --password='vaše_heslo'

Pokud nyní restartujete vašeho MySQL démona a vše proběhne jak předpokládáno, budete mít plně funkční 4.1.x verzi! :-)

# /etc/init.d/mysql restart

Pokud se setkáte s nějakými problémy během aktualizačního procesu, prosím, oznamte je na naší Bugzille.

Obnovení staré instalace MySQL 4.0

Pokud nejste šťastní s MySQL 4.1, je možné se vrátit zpět k MySQL 4.0.

# /etc/init.d/mysql stop
# emerge -C mysql
# rm -rf /var/lib/mysql/ /var/log/mysql
# emerge --usepkgonly "<mysql-4.1"
# tar -xjpvf mysql.[tag] -C /
# /etc/init.d/mysql start
Po downgradu, budete asi potřebovat spustit revdep-rebuild.
Přímá aktualizace, nepodporováno, nebezpečné

Za určitých podmínek je možné aktualizovat přímo na další majoritní verzi MySQL. Pokud víte, co děláte a myslíte, že to platí pro váš případ, zde je malý trik, který umožňí aktualizovat přímo na MySQL 4.1.

# quickpkg dev-db/mysql
# /etc/init.d/mysql stop
# tar -cjpvf ~/mysql.$(date +%F_%H-%M).tar.bz2 /etc/mysql/my.cnf /var/lib/mysql/
# ls -l ~/mysql.*
# export MYSQL_STRAIGHT_UPGRADE=1
# emerge -av ">mysql-4.1"
# unset MYSQL_STRAIGHT_UPGRADE
# dispatch-conf
# revdep-rebuild
# /etc/init.d/mysql start
# mysql_fix_privilege_tables --defaults-file=/etc/mysql/my.cnf \
     -uroot --password='vaše_heslo'
# mysql --database=mysql -uroot --password='vaše_heslo' < /tmp/new_pieces.sql
# /etc/init.d/mysql restart # jen pro jistotu

Hodně štěstí a když něco selže, neříkejte, že jsme vás nevarovali! ;-)