コピーされるファイルの完全性を保証するには、MySQL レプリケーションスレーブ上のローデータファイルのバックアップが、スレーブサーバーがシャットダウンしている間に実行されるべきです。MySQL サーバーがまだ実行中の場合は、バックグラウンドタスクがデータベースファイルをまだ更新中の可能性があります (特に、InnoDB
などのストレージエンジンをバックグラウンドプロセスで使用するもの)。InnoDB
の場合、これらの問題はクラッシュリカバリ中に解決されるはずですが、バックアッププロセス中にマスターの実行に影響を与えずにスレーブサーバーをシャットダウンできるため、この機能を利用することは意味があります。
サーバーをシャットダウンしてファイルをバックアップするには:
-
スレーブ MySQL サーバーをシャットダウンします。
shell> mysqladmin shutdown
-
データファイルをコピーします。cp、tar、WinZip など、コピーまたはアーカイブに適したユーティリティーを使用できます。たとえば、データディレクトリが現在のディレクトリの下にある場合、ディレクトリ全体を次のようにアーカイブできます。
shell> tar cf /tmp/dbbackup.tar ./data
-
MySQL サーバーを再起動します。Unix の場合:
shell> mysqld_safe &
Windows の場合:
C:\> "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysqld"
通常は、スレーブ MySQL サーバーのデータディレクトリ全体をバックアップしてください。データをリストアしてそれらをスレーブとして運用できるようにしたい場合 (たとえば、スレーブの障害時)、スレーブのデータに加えて、スレーブステータスファイル、マスター情報およびリレーログ情報リポジトリ、およびリレーログファイルもバックアップしてください。これらのファイルは、スレーブのデータをリストアしたあとにレプリケーションを再開するために必要です。
リレーログを失ったけれども relay-log.info
ファイルがある場合は、これを調べることで SQL スレッドがマスターバイナリログ内でどのくらい実行されたかを判断できます。それから MASTER_LOG_FILE
および MASTER_LOG_POS
オプションで CHANGE MASTER TO
を使用することで、そのポイントからバイナリログを再度読み取るようにスレーブに指示できます。これには、マスターサーバー上にバイナリログが残っている必要があります。
スレーブが LOAD DATA INFILE
ステートメントをレプリケートする場合、スレーブがこのために使用するディレクトリ内に存在する SQL_LOAD-*
ファイルもバックアップしてください。スレーブは、中断した LOAD DATA INFILE
操作のレプリケーションを再開するためにこれらのファイルを必要とします。このディレクトリの場所は --slave-load-tmpdir
オプションの値です。そのオプションでサーバーを起動しなかった場合、ディレクトリの場所は tmpdir
システム変数の値になります。