mysqldumpとは、MySQLのバックアップを取るツール。
mysqlにログイン後の画面ではなく、
通常のコンソールから実行する。
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 --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処理をしてくれる。
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
というテーブルだけをバックアップする。
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
が実行される。