別のスレーブDBをコピーして、新しいスレーブDBをセットアップしようとしています。通常、私は単にMySQLDump
を使用してスレーブをダンプし、.sql
ファイルを作成してから、それを新しいデータベースにインポートします。
しかし、私たちの新しいサーバーはLinux(Debian 7)サーバー(コピーしているスレーブはWindowsサーバー上にある)なので、新しいデータベースに直接ダンプをパイプしようとするだろうと考えました。私のPuTTYセッションが期限切れになり、すべてが停止するまで、これはうまくいったようです。
今回はNohup .... &
を使用してもう一度試しました。しかし、セッションが期限切れになるとすぐにダンプは停止しました。
これを機能させる方法はありますか?私の完全なダンプコマンドは:
Nohup mysqldump -hxxx -P3306 -uxxx -pxxx --dump-slave --databases a b c d --ignore-table=a.xxx -F | mysql -h127.0.0.1 -P3306 -uxxx -pxxx &
すべてのDBはMySQL 5.5です。
問題を見つけたと思います。どうやらNohup
コマンドは|
シンボルで終了したため、セッションが期限切れになると、コマンドの2番目の部分がセッションで停止しました。
これを回避するために私は走った:
Nohup sh -c 'mysqldump -hxxx -P3306 -uxxx -pxxx --dump-slave --databases a b c d --ignore-table=a.xxx -F | mysql -h127.0.0.1 -P3306 -uxxx -pxxx' &
動作していることを確認し、シェルをEXIT
edしたところ、今のところまだ動作しています。
これに対するもう1つのジャジーなアプローチは、アンパサンドなしでそのコマンドをシェルスクリプトに配置することです。次に、スクリプトを名前でバックグラウンドで実行します。たとえば、transfer_mysql_data.sh
フォルダ内のシェルスクリプト/path/to/script
を呼び出します。
これがこの提案されたスクリプトの内容です
SCRIPT_TO_RUN=/path/to/script/transfer_mysql_data.sh
RUNLOG=/path/to/script/transfer_mysql_data.log
date > ${RUNLOG}
mysqldump -hxxx -P3306 -uxxx -pxxx --dump-slave --databases a b c d --ignore-table=a.xxx -F | mysql -h127.0.0.1 -P3306 -uxxx -pxxx
date >> ${RUNLOG}
chmod -x ${SCRIPT_TO_RUN}
以下を実行します
cd /path/to/script
chmod +x transfer_mysql_data.sh
Nohup ./transfer_mysql_data.sh &
すぐにログアウトして後で戻ることができます。
次に、実行ログファイル/path/to/script/transfer_mysql_data.log
をポーリングして、mysqldump転送がいつ終了したかを確認できます。開始日時と終了日時の2行があると終了します。