あなたは、MySQLの正確な同じバージョンで別のDBサーバーへの移行を検討している場合、あなたはしたいことがあり、古いサーバから新しいサーバへ。rsync
datadir
これは、InnoDBファイルのレイアウトやMyISAMテーブルの存在に関係なく機能します。
- ServerAと同じバージョンのmysqlをServerBにインストールします。
- ServerAで実行
RESET MASTER;
して、rsycnプロセスの前にすべてのバイナリログを消去します。バイナリログが有効になっていない場合は、この手順をスキップできます。
- ServerAで
SET GLOBAL innodb_max_dirty_pages_pct = 0;
mysqlから実行し、約10分(これにより、ダーティページがInnoDBバッファープールからパージされます。これにより、mysqlのシャットダウンがより高速に実行されます)データベースがすべてMyISAMである場合は、この手順をスキップできます。
- ServerAのrsync / var / lib / mysqlをServerBの/ var / lib / mysqlに
- rsyncが1分未満になるまでステップ3を繰り返します
service mysql stop
ServerA
- もう一度rsyncを実行します
- scp ServerA:/etc/my.cnf to ServerB:/ etc /。
service mysql start
ServerB上
service mysql start
ServerA(オプション)
基本的に、そのようなスクリプトは次のようになります。
mysql -u... -p... -e"RESET MASTER;"
mysql -u... -p... -e"SET GLOBAL innodb_max_dirty_pages_pct = 0;"
RSYNCSTOTRY=10
cd /var/lib/mysql
X=0
while [ ${X} -lt ${RSYNCSTOTRY} ]
do
X=`echo ${X}+1|bc`
rsync -r * targetserver:/var/lib/mysql/.
sleep 60
done
service mysql stop
rsync -r * targetserver:/var/lib/mysql/.
service mysql start
DBA StackExchangeの仲間のメンバーは、mysqlperformanceblog.com FLUSH TABLES WITH READ LOCK;
にあるものに基づいては離れるべきだと言っています
私は全体を読み、aの途中でInnoDBテーブルに対するSELECTをFLUSH TABLES WITH READ LOCK;
実行しても、何らかの方法で書き込みが発生する可能性があることを学びました。Arlukinのコメントで指摘されているように、LVMはFLUSH TABLES WITH READ LOCK
InnoDBで問題なく動作します(彼のコメントに+1)。
LVM以外のすべてのユーザーにとって、で使用するすべてのMyISAMデータベースで問題ありませんFLUSH TABLES WITH READ LOCK;
。InnoDBの場合--single-tranaction
、mysqldumpsでの使用に固執してください。