mysqldumpの使い方
mysqldumpとは、MySQLのバックアップを取るツール。
mysqlにログイン後の画面ではなく、
通常のコンソールから実行する。
mysqldumpのパスワード
パスワードを対話的に入力
mysqldump --single-transaction -u root -p ddd > ddd_dump.sql
-uは、ユーザーオプション。
rootユーザーでmysqldumpを実行している。
-pは、パスワードオプション。
エンターを押した後に、対話的にパスワード入力が発生する。
パスワードをオプションで指定
mysqldump --single-transaction -u root -pxxx ddd > ddd_dump.sql
rootユーザーのパスワードをxxxとする。
-p xxxのように書くと、xxxはパスワードではなくデータベース名として解釈されてしまう。
-pxxxのように書くと、xxxはパスワードとして解釈される。
crontabでmysqldumpを定期実行する場合、
対話的にパスワードを入力できないので、コマンドにパスワードを含めて書く。
mysqldumpでバックアップ
データベースを指定してバックアップ
mysqldump --single-transaction -u root -pxxx ddd > ddd_dump.sql
dddというデータベースのすべてのテーブルをバックアップし、
ddd_dump.sqlというファイルに書き出す。
ddd_dump.sql の中身はSQL文+コメント。
CREATE TABLEやINSERTコマンドの羅列となっている。
–single-transactionは、データベースの整合性を保つためのオプション。
–single-transactionを指定しないと、テーブル1を書きだして、テーブル2を書きだして……と逐次的に処理される。
そのため、mysqldump処理の途中でデータが更新された場合に、「テーブル1はデータ更新前の情報だけど、テーブル5はデータ更新後の情報」のような不整合が起こる。
–single-transactionを指定すると、すべてのテーブルを更新できないようにロックしてmysqldump処理をしてくれる。
CREATE DATABASE付きでデータベースをバックアップ
mysqldump --single-transaction -u root -pxxx --databases ddd > ddd_dump.sql
–database オプションを付けると、CREATE TABLEの前にCREATE DATABASEコマンドも生成される。
サーバー移転時など、リストア対象となるデータベースがまだ存在しない環境へデータを移行するときに使う。
データベースの構造だけをバックアップ
mysqldump --single-transaction -u root -pxxx --databases ddd -d > ddd_dump.sql
-dオプションを指定すると、テーブル名やカラム名などの構造だけをバックアップし、レコードをバックアップしない。
(ddd_dump.sqlにCREATE TABLEは出力されるが、INSERTは出力されない)
開発環境から本番環境へデータベースを移設するときなどに使う。
動作試験に使ったデータを含まないまっさらなデータベースを本番環境に作成できる。
特定のテーブルをバックアップ
mysqldump -u root -pxxx ddd ttt> dump.sql
dddというデータベースの、tttというテーブルだけをバックアップする。
dump.sqlからデータベースをリストアする方法
データベース名を指定せずにリストア
mysql -u root -p < dump.sql
mysqlにrootでログイン、
dump.sqlファイルに書かれたSQL文をまとめて実行する。
dump.sqlの中にCREATE DABASEやUSEが含まれている場合は、
コマンド実行時にデータベース名の指定は不要。
dump.sqlの中にDROP TABLEを含む場合は注意が必要。
リストア先に同名のテーブルが存在する場合、
リストア先に元々あるデータは完全に削除され、
dump.sqlの内容で完全に上書きされる。
データベース名を指定してリストア
mysql -u root -p xxx < dump.sql
xxxというデータベースに対して、
dump.sql内のDROP TABLEやCREATE TABELEが実行される。