同じネットワーク上の1つのサーバーから別のサーバーに単一のMySQLデータベース(非圧縮で約10 GB)を移動しています。現在のMySQLバージョンは5.1.41
および新しいバージョンは5.5.24
。データベースにはMyISAMテーブルとInnoDBテーブルの両方が含まれています。この方法を使用することは可能ですか?
/data
古いサーバーから新しいサーバーへのディレクトリ私はこの基本的な質問がおそらく1000回前に行われたことを理解していますが、私が見た質問のほとんどはバージョンの変更とMyISAMとInnoDBの両方のサポートについて言及していません。
バージョンを変更する場合は、mysqlスキーマを移動しないでください。
Mysqlフォルダーを移動すべきではないのはなぜですか?これは認証特権と関係があります。
Mysql.userの列数はバージョンごとに異なります
desc mysql.user
を実行した場合
私は前にこれについて書いた
他のすべてを移動しても問題ありません。 MySQL 5.5.24がインストールされた新しいマシンで、次のようにします。
mv /var/lib/mysql /var/lib/mysql/mysql55
mkdir /var/lib/mysql
<scp or rsync /var/lib/mysql of MySQL 5.1.41 over to /var/lib.mysql of MySQL 5.5.24>
rm -f /var/lib/mysql/mysql/*
cp /var/lib/mysql/mysql55/* /var/lib/mysql/mysql/*
chown -R mysql:mysql /var/lib/mysql
service mysql start
したがって、問題は残ります:
古いMySQL 5.1.41のユーザー権限をどのようにMySQL 5.5.24に移動しますか???
これをMySQL 5.1.41マシンで開始するには、2つの方法があります。
このPerconaツールキットプログラムは、Pure SQLのユーザー権限を印刷出力します。結果出力をテキストファイルに実行できます。次に、MySQL 5.5.24でテキストファイルを実行します。物語の終わり。
pt-show-grants ... > MySQLUserGrants.sql
私はpt-show-grantsのために自分のテクニックを作りました
mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',Host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql
どちらの方法でも、MySQLUserGrants.sqlをMySQL 5.5.24マシンに移動してスクリプトを実行します
私はこれについて前に書いた: myisam 5.0データベースを5.5 innodbサーバーにインポートする
5.1-> 5.5へのアップグレードを数回行った後、2番目のサーバーで5.1から5.5にアップグレードする方法を次に示します。
/var/lib/mysql
)5.1サーバーから5.5サーバーへ(rsync、scp、CDROM、bittorrent、タイプライターなど)mysql
ユーザーによって所有されていることを確認してくださいmysql
データベースのさまざまなテーブルに欠落しているフィールドがいくつかあります。mysql_upgrade
ログに未解決のエラーがない限り、さらに複雑にする必要はありません。
メジャーバージョンの移動は 推奨 mysqldumpを実行してリロードします。マイナーバージョンは問題ないと見なされますが、提供されている mysql_upgrade binary を実行する必要があります。
これを実現する最も速い方法は、サーバーがVPNを介して接続されているため、そのレベルで暗号化を処理できることを前提としています。 VPN全体でrsyncを行うと、再暗号化のCPUオーバーヘッドが増加します。新しいサーバーで準備するには、mysql_install_dbを使用して新しいセットアップを行います
新しいサーバーで最初に実行
nc -l 12345 | mysql -u root -p
これは、古いサーバーで次の手順を実行するまで、ハングしてポート12345で待機します。
mysqldump -u root -p --databases db1 db2 db3 | nc new-server-hostname 12345
このようにリロードを行うと、テーブルをデフラグする利点が追加されます。この例は、ダンプの実行中に5.1 DBがロックされてもかまわないことを意味します。