Upgrade Leitfaden zu MySQL 4.* oder 5.0.*
1.
Direktes Upgrade, empfohlen für den Wechsel von 4.1 => auf 5.0
Die "Myisam storage engine" in Version 4.1 war bereits ausgereift genug, um ein
direktes Upgrade auf die nächste Major-Version von MySQL zu erlauben.
Notiz:
Das gilt nicht für MERGE-Tables. Sie werden wahrscheinlich in Probleme geraten,
wenn Sie ein direktes Upgrade für diesen selten genutzen Tabellen-Typen
versuchen. Sie sollten diese Tabellen sichern und neu erstellen und ihren Inhalt
im Upgradeprozess wiederherstellen. Wenn Sie unsicher sind, sollten sie mit
Von einer alten MySQL-Version upgraden beginnen.
|
Für diesen Schritt werden 2 Shells benötigt, da eine während des
Upgrade-Prozesses gesperrt wird.
Befehlsauflistung 1.1: Direktes Upgrade von 4.1 auf 5.0.* |
# quickpkg dev-db/mysql
# alias MYSQL="mysql --user=root --password="
# DATADIR=$(MYSQL --batch --raw --silent --skip-column-names \
--execute='SHOW variables LIKE "datadir";' \
| sed -e 's|datadir[ \t]||')
# mysql --user=root --password=
mysql> FLUSH TABLES WITH READ LOCK;
# tar -cjpvf ~/mysql.$(date +%F"T"%H-%M).tar.bz2 \
/etc/conf.d/mysql /etc/mysql/my.cnf "${DATADIR}"
mysql> UNLOCK TABLES;
mysql> quit
# tar -tjvf ~/mysql.*.tar.bz2i
# emerge -av ">dev-db/mysql-5.0"
# dispatch-conf
# revdep-rebuild
# /etc/init.d/mysql restart
# mysql_upgrade_shell --user=root --password= \
--protocol=tcp --datadir="${DATADIR}"
# /etc/init.d/mysql restart
# unset DATADIR
# unalias MYSQL
|
2.
Von einer alten MySQL-Version upgraden
Benutzer die von einer alten Version (<4.0.24) von MySQL aus upgraden, müssen
zuerst MySQL 4.0.25 installieren. Wenn Sie bereits eine aktuellere Version
einsetzen, können Sie diesen Abschnitt überspringen und mit dem
nächsten fortfahren.
Befehlsauflistung 2.1: Einfaches Upgrade |
# emerge -av --buildpkg "<mysql-4.1"
|
3.
Ein Backup Ihrer aktuellen Daten anlegen
Wichtig:
Werte in Primärschlüsseln werden unterschiedlich von den verschiedenen
MySQL-Versionen gehandhabt. Mehrere Informationen finden Sie unter
Bug #108502.
Es wird strengstens empfohlen, dass Sie ihre Tabellen nach Werten von "0" (Null)
oder weniger durchsuchen und Sie auf einen Wert größer oder gleich "1" setzen.
|
Eine der wichtigsten Aufgaben die jeder Datenbank-Administrator durchführen muss
ist die Sicherung von Daten. Fangen wir an:
Befehlsauflistung 3.1: Dump aller Datenbanken |
# mysqldump \
-uroot \
--password= \
-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
|
Es sollte nun eine Datei mit dem Namen BACKUP_MYSQL_4.0.SQL
existieren, die später genutzt werden kann, um Ihre Daten wiederherzustellen.
Die Daten sind im MySQL-Dialekt der SQL (Structured Query Language) beschrieben.
Jetzt ist auch ein guter Zeitpunkt zu überprüfen, ob das Backup, das Sie gerade
erstellt haben, funktioniert.
4.
Von einer aktuelleren MySQL-Version upgraden
Wenn Sie Schritt #1 übersprungen haben, sollten Sie jetzt ein Backup-Paket (des
Servers, nicht der Daten) der installierten Version erstellen:
Befehlsauflistung 4.1: Backup des Binär-Pakets |
# quickpkg dev-db/mysql
|
Jetzt ist es an der Zeit die aktuelle Installation mit allen seinen Daten zu
löschen:
Befehlsauflistung 4.2: Deinstallieren von MySQL |
# /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
|
Notiz:
Nun sollte es zwei Backups geben: Das SQL-Backup, welches zwischen den
verschiedenen MySQL-Versionen portabel ist, und das andere, welches Ihnen
erlaubt, Ihre Datenbank schnell wiederherzustellen. Dies wird später noch
genauer erklärt.
|
Nachdem Sie Ihre alte MySQL-Installation losgeworden sind, können Sie die neue
Version installieren. Beachten Sie, dass es notwendig ist revdep-rebuild
zu verwenden, um Pakete erneut zu kompilieren, die gegen MySQL gelinkt sind.
Befehlsauflistung 4.3: Aktualisieren der Programmdateien |
# emerge -av ">mysql-4.1"
# etc-update
# revdep-rebuild
|
Konfigurieren Sie nun die neu installierte MySQL-Version und starten Sie den
Daemon neu:
Befehlsauflistung 4.4: Basiskonfiguration von MySQL 4.1 |
# emerge --config =mysql-4.1.
# /etc/init.d/mysql start
|
Abschließend können Sie die Daten aus dem Backup, das Sie in Schritt #2
erstellt haben, importieren.
Wichtig:
Die Standarddatei /etc/mysql/my.cnf setzt standardmäßig das binäre
Protokollieren (log-bin). Dies wird jede einzelne Transaktion, welche
Daten verändert, aufzeichnen. Wenn Sie eine sehr große Datenbank (1GB oder mehr)
betreiben, könnte dies extrem große Dateien schaffen, welche ziemlich schnell
Festplattenspeicher belegen. Wenn Ihnen wenig Speicher zur Verfügung steht,
kann es hilfreich sein, binäres Protokollieren zu deaktivieren.
|
Wichtig:
Der Standardzeichensatz in MySQL 4.1 und höher ist utf8. Wenn Ihre Daten
nicht-ASCII-Zeichen enthalten, möchten Sie vielleicht den
Standardzeichensatz Ihrer Datenbank beibehalten und sollten deshalb alle
Vorkommen von utf8 mit latin1 in der Datei
/etc/mysql/my.cnf ersetzen. Weitere Informationen zu diesem Thema
finden Sie im Kapitel
Charakterset-Konvertierung.
|
Wichtig:
Die administrative mysql Datenbank, welche u.a. Benutzernamen und
Passwörter enthält, ist und muss in utf8 kodiert sein.
|
Ältere mysqldump-Werkzeuge werden ihre Tabellen eventuell in der falschen
Reihenfolge exportieren, wenn "foreign keys" einbezogen werden.
Um dieses Problem zu umgehen, schreiben Sie folgende Befehle in ihr SQL:
Befehlsauflistung 4.5: Überprüfungen der foreign keys umgehen |
SET FOREIGN_KEY_CHECKS=0
SET FOREIGN_KEY_CHECKS=1
|
Als nächstes importieren Sie das Backup.
Befehlsauflistung 4.6: Importieren des SQL-Backups |
# cat BACKUP_MYSQL_4.0.SQL \
| mysql \
-uroot \
--password= \
-hlocalhost \
--max_allowed_packet=16M
# mysql_fix_privilege_tables \
--defaults-file=/etc/mysql/my.cnf \
--user=root \
--password=
|
Wenn Sie Ihren MySQL-Daemon nun neustarten und alles wie erwartet verläuft,
haben Sie eine voll funktionsfähige Version 4.1.x.
Befehlsauflistung 4.7: Den MySQL-Daemon neustarten |
# /etc/init.d/mysql restart
|
Wenn Sie irgendwelche Probleme während des Upgrade-Vorgangs hatten, schreiben
Sie bitte einen Bugreport in unserem
Bugzilla.
5.
Ihre alte MySQL 4.0 Installation wiederherstellen
Wenn Sie mit MySQL 4.1 nicht glücklich sind, ist es möglich Ihre MySQL 4.0
Installation wiederherzustellen.
Befehlsauflistung 5.1: Zu einer älteren Version zurückkehren |
# /etc/init.d/mysql stop
# emerge -C mysql
# rm -rf /var/lib/mysql/ /var/log/mysql
# emerge --usepkgonly "<mysql-4.1"
# tar -xjpvf mysql.<timestamp>.tar.bz2 -C /
# /etc/init.d/mysql start
|
Wichtig:
Wenn Pakete ungleich dev-db/mysql installiert wurden, müssen Sie
revdep-rebuild ausführen, um zu gewährleisten, dass jeder Client das
richtige mysqlclient Shared-Object benutzt.
|
6.
Zeichensatz Konvertierung
Einleitung
Dieses Kapitel ist nicht als ein ausgiebiger Leitfaden zum Konvertieren von
Zeichensätzen bestimmt, sondern eher als eine kurze Liste von Tipps, die der
Leser ausarbeiten kann.
Eine Datenbank zu konvertieren kann eine komplizierte Aufgabe sein, deren
Schwierigkeit sich mit zunehmenden Datenvarianten erhöht. Dinge wie Serialized
Objects und Blobs sind ein Beispiel für die Schwierigkeit, Teile beisammen zu
halten.
Indexe
Jedes UTF-8 Zeichen ist genauer betrachtet 3 Bytes lang. Indexe in MySQL können
bis zu 1000 Byte lang sein (767 Byte bei InnoDB-Tabellen). Beachten Sie, dass
die Grenzen in Byte gemessen werden, im Gegensatz zu der Länge einer Spalte, die
in Anzahl von Zeichen interpretiert wird.
MySQL kann außerdem Indexe auf Teile von Spalten erstellen. Dies kann eventuell
eine Hilfe darstellen. Folgend ein paar Beispiele:
Befehlsauflistung 6.1: Benutzung von Indexen |
$ mysql -uroot -p'' test
mysql> SHOW variables LIKE "version \G
******************** 1. row ********************
Variable_name: version
Value:
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 );
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
|
Umgebung
Das System muss so konfiguriert werden, dass es die UTF-8 Locale unterstützt.
Weitere Informationen hierzu finden Sie in unseren Dokumenten UTF-8 unter Gentoo und Anleitung zur Lokalisierung.
In diesem Beispiel verändern und setzen wir einige Umgebungsvariablen in
/etc/env.d/02locale, um die englische UTF-8 Locale zu benutzen.
Befehlsauflistung 6.2: /etc/env.d/02locale |
LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
|
Stellen Sie sicher, dass Sie env-update && source /etc/profile
nach dem obrigen Schritt ausführen!
iconv
iconv, enthalten in sys-libs/glibc, wird benutzt um Textdateien
von einem Zeichensatz in ein anderes zu konvertieren. Das Paket
app-text/recode kann dazu ebenfalls benutzt werden.
Befehlsauflistung 6.3: Using iconv |
$ iconv -f ISO-8859-15 -t UTF-8 file1.sql > file2.sql
$ iconv -f ISO2022JP -t UTF-8 file1.sql > file2.sql
|
iconv kann auch benutzt werden, um ein SQL-Dump neu zu schreiben, sogar
wenn die Umgebung nicht auf utf8 eingestellt ist.
SQL Methode
Es ist möglich, die MySQL-Funktionen CONVERT() und CAST() zu
benutzen, um Daten innerhalb ihrer SQL-Skripte zu konvertieren.
Apache (Webserver)
Wenn Sie utf-8 mit Apache benutzen möchten, müssen Sie die folgenden Variablen
in Ihrer httpd.conf anpassen: AddDefaultCharset, CharsetDefault,
CharsetSourceEnc. Wenn Ihre HTML-Quelldateien nicht in utf8 kodiert sind,
müssen Sie mit iconv oder recode konvertiert werden.
Die Inhalte dieses Dokuments sind unter der Creative Commons -
Namensnennung / Weitergabe Lizenz lizenziert.
|