第24章 MySQL 5.0 から MySQL 5.5 への移行
MySQL 5.0 から MySQL 5.5 に移行する前に、MySQL データベースを含むすべてのデータのバックアップを作成します。MySQL 5.1 および MySQL 5.5 の詳細は、および http://dev.mysql.com/doc/relnotes/mysql/5.5/en/ から入手 http://dev.mysql.com/doc/relnotes/mysql/5.1/en/ できるリリースノートを参照してください。
注記
Red Hat は、MySQL 5.0 パッケージ(mysql-5.0.* および関連パッケージ)のセキュリティーアドバイザリーを発行しません。セキュリティーアドバイザリーは MySQL 5.5 でのみ提供されます。
24.1. MySQL 5.0 から MySQL 5.5 へのアップグレード リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
MySQL 5.0 から MySQL 5.5 へのアップグレードで唯一サポートされている方法は、MySQL 5.1 を中間ステップとして使用することです。このため、mysql51* Software Collection パッケージが提供されます。MySQL 5.1 パッケージはサポートされておらず、MySQL 5.5 への移行の目的でのみ提供されることに注意してください。実稼働システムでは mysql51* パッケージを使用しないでください。
mysql51 および mysql 55 Software Collections は相互または mysql パッケージと競合しないため、ユーザーは mysql パッケージとともに mysql51 および mysql55 Software Collections をインストールできます。すべてのバージョンの MySQL を同時に実行することもできます。ただし、特定のリソースが競合しないようにするには、
my.cnf 設定ファイルでポートとソケット番号を変更する必要があります。
MySQL 5.0 から MySQL 5.5 にアップグレードする方法は 2 つあります。
- mysqldump ユーティリティーおよび mysql ユーティリティーを使用すると、ダンプおよび復元のアップグレードにより、1 つのデータベースからすべてのデータベースの完全に新しいダンプが生成されます。次に、MySQL コマンドラインインターフェイスは、他のデータベース内で入力としてダンプファイルで実行されます(実際には、mysqlimport ユーティリティーまたは LOAD DATA INFILE SQL コマンドを使用します)。ダンプと復元の両方で、適切なデーモンを実行する必要があります。mysqldump コマンドの実行時に
--all-databasesオプションを使用して、生成されるダンプにすべてのデータベースを追加します。必要に応じて、--routines、--triggers、および--events(MySQL 5.1 以降にのみ有効)オプションを使用できます。例24.1「ダンプおよびリストアのアップグレード」 は、dump メソッドおよび restore メソッドを使用してアップグレードするために使用される特定のコマンドを示しています。 - インプレースアップグレード:データファイルをあるデータベースディレクトリーから別のデータベースディレクトリーにコピーし、両方の MySQL デーモンが停止します。コピーされたファイルに適切な権限と SELinux コンテキストを設定する必要があります。インプレースアップグレードは通常、大規模なデータベースでは高速で簡単ですが、リスクと既知の問題があります。詳細は、本章の最初にリンクされている MySQL 5.1 および MySQL 5.5 のリリースノートを参照してください。例24.2「インプレースアップグレード」 は、インプレースアップグレードの実行に使用される特定のコマンドを示しています。
アップグレード後、dump および restore を使用するか、インプレースアップグレードを実行して MySQL サーバーを起動し、mysql_upgrade コマンドを実行します。内部テーブルをチェックし、修復するには、mysql_upgrade を実行する必要があります。Software Collection (特に mysql_upgrade スクリプト)から MySQL サーバーと対話するすべてのスクリプトは、
scl enable 環境内で実行する必要があります。
注記
mysql_upgrade コマンドの実行中に、以下のエラーが発生する可能性があります。
You can't use locks with log tables.
これは既知の問題で( http://bugs.mysql.com/bug.php?id=30487で報告)、アップグレードプロセスには影響を与えません。
データのアップグレード時に以外は、新しい環境を反映するように
my.cnf 設定ファイルの適切な設定を変更することを検討してください。
例24.1 ダンプおよびリストアのアップグレード
MySQL 5.0 から MySQL 5.5 Software Collection へのアップグレードのダンプおよび復元の例:
~]# service mysqld start
Starting mysqld: [ OK ]
~]# mysqldump --all-databases --routines > dump.sql
~]# service mysqld stop
Stopping mysqld: [ OK ]
~]# service mysql51-mysqld start
Starting mysql51-mysqld: [ OK ]
~]# scl enable mysql51 'mysql' < dump.sql
~]# scl enable mysql51 'mysql_upgrade'
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
a.t1 OK
mysql.columns_priv OK
⋮
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
~]# scl enable mysql51 'mysqldump --all-databases --routines --events' > dump2.sql
~]# service mysql51-mysqld stop
Stopping mysqld: [ OK ]
~]# service mysql55-mysqld start
Starting mysql55-mysqld: [ OK ]
~]# scl enable mysql55 'mysql' < dump2.sql
~]# scl enable mysql55 'mysql_upgrade'
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
a.t1 OK
mysql.columns_priv OK
⋮
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
例24.2 インプレースアップグレード
MySQL 5.0 から MySQL 5.5 Software Collection へのインプレースアップグレードの例:
~]# service mysqld stop
Stopping mysqld: [ OK ]
~]# service mysql51-mysqld stop
Stopping mysql51-mysqld: [ OK ]
~]# rm -rf /opt/rh/mysql51/root/var/lib/mysql/
~]# cp -r /var/lib/mysql/ /opt/rh/mysql51/root/var/lib/mysql/
~]# chown -R mysql:mysql /opt/rh/mysql51/root/var/lib/mysql/
~]# restorecon -R /opt/rh/mysql51/root/var/lib/mysql/
~]# service mysql51-mysqld start
Starting mysql51-mysqld: [ OK ]
~]# scl enable mysql51 'mysql_upgrade'
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
a.t1 OK
mysql.columns_priv OK
⋮
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK
~]# service mysql51-mysqld stop
Stopping mysql51-mysqld: [ OK ]
~]# service mysql55-mysqld stop
Stopping mysql55-mysqld: [ OK ]
~]# rm -rf /opt/rh/mysql55/root/var/lib/mysql/
~]# cp -r /opt/rh/mysql51/root/var/lib/mysql/ /opt/rh/mysql55/root/var/lib/mysql/
~]# chown -R mysql:mysql /opt/rh/mysql55/root/var/lib/mysql/
~]# restorecon -R /opt/rh/mysql55/root/var/lib/mysql/
~]# service mysql55-mysqld start
Starting mysql55-mysqld: [ OK ]
~]# scl enable mysql55 'mysql_upgrade'
Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck with default connection arguments
Running 'mysqlcheck with default connection arguments
a.t1 OK
mysql.columns_priv OK
⋮
mysql.user OK
Running 'mysql_fix_privilege_tables'...
OK