MySQLのバックアップ、リストア
MySQLのDBサーバー移行手順
- mysqldumpでSQLファイルを作成
- 稼働中のDBを触る場合、-single-transactionってオプションをつけとく
- 移行先サーバーにDBを用意
- バックアップで作成したSQLファイルの実行
バックアップ
# mysqldump -h <localhost> -u root -p<passwd> --databases target-db --flush-logs --single-transaction --master-data=2 > dump_target_db.sql
オプションについては以下記事を参考に。
リストア
// 移行先サーバーに移動、SQLファイル配置しておく
// MySQLのセットアップは完了している前提 ※文字コード、デフォルトDBエンジンなどは一致させておく
# mysql -u root -p
// DB作成
mysql> create database target-db;
// アカウント作成、権限割り当て
mysql> CREATE USER 'username'@'localhost' IDENTIFIED BY 'passwd';
mysql> GRANT ALL ON target-db.* TO 'username'@'localhost';
mysql> exit
Bye
// リストア
# mysql -h localhost -u root -p passwd < dump_target_db.sql
参考ページ
アカウント作成
パスワード設定
権限割り当て
フラッシュ、"フラッシュする"とは?
バックアップを取る際に、--flush-logs
を付けた。こちらの説明文で"サーバーログファイルをフラッシュします。"というあんまり説明になってない感じ。そもそもフラッシュがピンと来ない。
ダンプを始める前に MySQL サーバーログファイルをフラッシュします。このオプションには RELOAD 権限が必要です。このオプションを --all-databases オプションと組み合わせて使用すると、ログはダンプされるデータベースごとにフラッシュされます。例外は、--lock-all-tables、--master-data、または --single-transaction を使用する場合です。この場合、ログはすべてのテーブルがロックされた瞬間に対応して一度のみフラッシュされます。ダンプとログのフラッシュを正確に同時に実行するには、--flush-logs を --lock-all-tables、--master-data、または --single-transaction とともに使用するようにしてください。
一応単語の意味も載せておく。注意したいのは綴りがflushであること!自分はflashだと思っていたので。。。
《コ》フラッシュする◆ダンプ(ごみ箱)の中の全てのページをディスクに書き込む
おお〜、なるほど?なんとなくイメージは湧いた。
で、色々調べていくとMySQLのドキュメントにいい感じのページを見つけた。
ログのフラッシュ操作は、次のことを実行します。
- ログファイルに対する一般クエリーロギングまたはスロークエリーロギングが有効化されている場合、サーバーは一般クエリーログファイルまたはスロークエリーログファイルを閉じて再オープンします。
- バイナリロギングが有効化されている場合、サーバーは現在のバイナリログファイルを閉じ、新しいログファイルを次のシーケンス番号で開きます。
- エラーログがファイルに書き込まれるようにするためにサーバーが --log-error オプションで開始されている場合、サーバーはログファイルを閉じて再オープンします。
ログをフラッシュすると、サーバーは新しいバイナリログファイルを作成します。ただし、一般クエリーログファイルおよびスロークエリーログファイルについては、それらを閉じて再オープンするだけです。Unix で新しいファイルが作成されるようにするには、現在のログファイルをフラッシュする前にそれらを名前変更します。フラッシュ時に、サーバーは新しいログファイルを元の名前で開きます。たとえば、一般クエリーログファイルおよびスロークエリーログファイルの名前が mysql.log および mysql-slow.log の場合、次のような一連のコマンドを使用することができます。
ログファイルを一旦閉じてもう一度開くという行為のことを「ログのフラッシュ」と呼んでいるらしい。バックアップでいうと処理中もログファイルを開いている状態を継続することになるため、ファイルを一時閉じることで書き込んだ変更を決定(保存)し、ログもバックアップできるようにすることを言っているんだと理解した。
気になってflushを調べると、なるほど、フラッシュというのは割とIT用語で一般的に使われているのかもしれない。勉強になった。