MySQL データベースのバックアップ(mysqldump)とレストアー
MySQL には昔からデータベースの内容を出力する為の mysqldump という便利なコマンドがあります。 これはデータベース名を指定して実行するとデータベース内に存在するテーブル全部のデータを出力してくれます。 この機能を使う事で簡単にデータベースのバックアップを取得することが出来ます。
ここで mysqldump で取得した内容をファイルで保存しておき後でデータベースが壊れたりした場合このバックアップからデータを復元することが簡単に出来るようになります。
MySQLデータベースのバックアップ
# mysqldump --user=USERNAME --password=PASSWORD DATABASE_NAME > BACKUP_FILENAME.sql
mysqldump 時にdefaultで有効になるオプション
--add-drop-database
DROP DATABASEステートメントをCREATE DATABASEステートメントの前に追加します。
--add-locks
LOCK TABLESとUNLOCK TABLESステートメントで各テーブルダンプを囲みます。ダンプファイルを再ロードする際のインサートの速度が向上します。
--create-options
MySQL独特のオプションをCREATE TABLEステートメントに含みます。
--disable-keys, -K
各テーブルごとに、INSERTステートメントを/*!40000 ALTER TABLE tbl_name DISABLE KEYS */;と/*!40000 ALTER TABLE tbl_name ENABLE KEYS */;ステートメントで囲んでください。行が全て挿入された後にインデックスが作成されるため、ダンプファイルのロードが早くなります。このオプションはMyISAMテーブルに対してのみ効果的です。
--extended-insert, -e
複数のVALUESリストを含む、複数行INSERT構文を使用してください。これにより、ダンプファイルサイズを小さくし、ファイルが再ロードされる際の挿入スピードがあがります。
--lock-tables, -l
ダンプする前に全てのテーブルをロックします。テーブルはREAD LOCALでロックされ、これによりMyISAMテーブルの場合同時インサートが許容されます。
--quick, -q
このオプションは大きなテーブルのダンプに便利です。これにより、mysqldumpは全結果セットを取得、メモリ内でバッファ後表示といった一連の作業を一気にこなさず、サーバから1行ずつ結果を取得します。
--set-charset
出力にSET NAMES default_character_setを追加してください。このオプションはデフォルトで有効となっています。
MySQLデータベースのリストアー
$ mysql --user=USERNAME --password=PASSWORD DATABASE_NAME < BACKUP_FILENAME.sql
created: