Myisam paměťový engine ve verzi 4.1 byl již dostatečně vyspělý, aby umožnil přímou aktualizaci na další majoritní verzi MySQL.
# quickpkg dev-db/mysql # alias MYSQL="mysql --user=root --password='vaše_heslo' " # DATADIR=$(MYSQL --batch --raw --silent --skip-column-names \ --execute='SHOW variables LIKE "datadir";' \ | sed -e 's|datadir[ \t]||') # MYSQL --execute="FLUSH TABLES WITH READ LOCK;" # tar -cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 \ /etc/mysql/conf.d/mysql /etc/mysql/my.cnf "${DATADIR}" # MYSQL --execute="UNLOCK TABLES;" # tar -tjvf ~/mysql.*.tar.bz2 # emerge -av ">mysql-5.0" # dispatch-conf # revdep-rebuild # /etc/init.d/mysql restart # mysql_upgrade_shell --user=root --password='vaše_heslo' \ --protocol=tcp --datadir="${DATADIR}" # /etc/init.d/mysql restart # unset DATADIR # unalias 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 novější verzi, můžete tuto sekci
přeskočit a pokračovat
# emerge -av --buildpkg "<mysql-4.1"
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ý
Nyní by byl také dobrý čas na zjištění, jestli záloha, kterou jste vytvořili, je funkční.
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"T"%H-%M).tar.bz2 /etc/mysql/my.cnf /var/lib/mysql/ # ls -l ~/mysql.* # rm -rf /var/lib/mysql/ /var/log/mysql
Poté, co jste se zbavili vaší staré MySQL instalace, můžete nyní nainstalovat
novou verzi. Všimněte si, že
# emerge -av ">mysql-4.1"(K aktualizaci konfiguračních souborů, můžete také použít dispatch-conf) # etc-update # 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.
# 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ší
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"(Změňte <časovou_značku> na tu, kterou jste použili při tvorbě zálohy.) # tar -xjpvf mysql.<časová_značka>.tar.bz2 -C / # /etc/init.d/mysql start
Tato kapitola není zamýšlena jako vyčerpávající průvodce pro konverzi znakových sad, ale spíše jako krátký seznam rad, podle kterých může čtenář postupovat.
Konverze databáze může být komplexní úkol s problémy vzrůstajícími s růzností dat. Věci jako serializovaný objekt a BLOB-y jsou jedním příkladem, kde je složité udržet kousky pohromadě.
Každý znak v utf-8 je 3 bajty dlouhý s&nbps;indexem. Indexy v&nbps;MySQL mohou být až 1000 bajtů dlouhé (767 bajtů pro InnoDB tabulky). Všimněte si, že limity jsou měřeny v bajtech, kdežto velikost sloupce je interpretována jako počet znaků.
MySQL může také vytvořit indexy na částech sloupce, to může být nápomocné. Dále jsou nějaké příklady:
$ mysql -uroot -p'vaše_heslo ' test mysql> SHOW variables LIKE "version" \G *************************** 1. row *************************** Variable_name: version Value:5.0.24-log 1 row in set (0.00 sec) mysql> CREATE TABLE t1 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8; Query OK, 0 rows affected (0.01 sec) mysql> ALTER TABLE t1 -> ADD INDEX idx1 ( c1 , c2 );ERROR 1071 (42000): Specified key was too long; max key length is 1000 bytes mysql> ALTER TABLE t1 -> ADD INDEX idx1 ( c1(165) , c2(165) ); Query OK, 0 rows affected (0.01 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> CREATE TABLE t2 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=sjis; Query OK, 0 rows affected (0.00 sec) mysql> ALTER TABLE t2 -> ADD INDEX idx1 ( c1(250) , c2(250) ); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> CREATE TABLE t3 ( -> c1 varchar(255) NOT NULL default '', -> c2 varchar(255) NOT NULL default '' -> ) ENGINE=MyISAM DEFAULT CHARSET=latin1; Query OK, 0 rows affected (0.00 sec) mysql> ALTER TABLE t3 -> ADD INDEX idx1 ( c1 , c2 ); Query OK, 0 rows affected (0.03 sec) Records: 0 Duplicates: 0 Warnings: 0
Systém musí být nakonfigurován s podpodou zvolené UTF-8 lokalizace. Více
informací najdete v naší dokumentaci:
V tomto případě nastavíme některé proměnné shellového prostředí, abychom
používali anglickou lokalizaci s UTF-8
v
LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
Poté určitě spusťtě
Program
(Z latin1 do utf8) $ iconv -f ISO-8859-15 -t UTF-8 file1.sql > file2.sql(Z japonštiny do utf8) $ iconv -f ISO2022JP -t UTF-8 file1.sql > file2.sql
Je možné použít MySQL funkce
Pokud používáte utf-8 v Apachi, potřebujete přizpůsobit následující
proměnné v