MySQLを使用していて、データベースの中身をバックアップしたり。復元(リストア)する機会があると思います。
実際、このブログでもなんかあったら怖いなと思ってたまにデータベースのバックアップをとったりしています。
今回の記事では、MySQLでのデータベースをmysqldumpコマンドを使用してバックアップ・復元する方法を紹介します。
MySQLのデータベースのバックアップを取る方法
MySQLでデータベースのバックアップには、mysqldumpコマンドを使用することで行うことが出来ます。
今回は、データベースのバックアップをする際に、2つの方法を紹介します。
・データベース全部のデータのバックアップを取る方法
・特定のデータベースのバックアップを取る方法
・複数のデータベースの指定をしてバックアップを取る方法
データベースのバックアップを取る際には、バックアップの対象となるデータが膨大で、バックアップに1時間際なども考えられると思います。
そうした場合でもトランザクションで囲むのがおすすめです。
InnoDBでは、--single-transactionを、MyISAMテーブルが含まれるDBでは意味が無いので、代わりに--lock-tablesか--lock-all-tablesを使用します。
特定のデータベースのバックアップを取る
特定のデータベースのバックアップを取るには下記のようなコマンドを打ちます。
$ mysqldump -u DBユーザ名 -p DB名 > 出力先ファイル名
–single-transactionなどのオプションをつける場合には、下記のように記載します。
$ mysqldump --single-transaction -u DBユーザ名 -p DB名 > 出力先ファイル名
例えば、ユーザーがrootでlaravelという名前のデータベースを mysqldump.sqlというファイル名でバックアップしたい場合は、下記のようになります。実行するとパスワードを求められるのでパスワードを入力するとバックアップを取ることが出来ます。
$ mysqldump -u root -p laravel > mysqldump.sql Enter password:
全てのデータベースのバックアップを取る
全てのデータベースのバックアップを取るには下記のコマンドで行うことが出来ます。
$ mysqldump -u root -p -x --all-databases > 出力ファイル名
オプションの -x は、全てのデータベースの全てのテーブルをロックするためのオプションです。バックアップ中のデータの操作を禁止します。こちらも –single-transactionなどのオプションは任意でつけてください。
実際の記載例は、下記となります。
$ mysqldump -u root -p -x --all-databases > mysqldump.sql
データベースを指定してダンプを取る方法
mysqldump -u root --databases DB1 DB2 DB3 > 出力ファイル名
複数のデータベースを指定してバックアップを取る際には、上記のように記載することでバックアップを取ることが出来ます。
こちらの実際の記載例は、下記となります。
mysqldump -u root --databases DB1 DB2 DB3 > mysqldump.sql
MySQLのデータベースの復元(リストア)をする方法
データベースのバックアップを取り復元する方法について紹介します。
特定のデータベースを復元する方法
データベースを復元する際に特定のデータベースのみ復元したい時があると思います。
特定のデータベースの復元をするには下記のようなコマンドを打ちます。
$ mysql -u ユーザー名 -p データベース名 < dumpファイル名
実際の記載例は、下記となります。
$ mysql -u root -p laravel < mysqldump.sql
全てのデータベースのバックアップの復元をする方法
同時にバックアップのダンプにある全てのデータベースの復元(リストア)をしたい際もあるとお思います。
そのような際には、下記のようなコマンドを打ちます。
$ mysql -u ユーザー名 -p < dumpファイル名
実際の記載例は下記です。
$ mysql -u root -p < mysqldump.sql
まとめ
今回は、MySQLでのデータベースのバックアップ・復元の方法について紹介しました。
結構、mysqldumpは、覚えていないものです。
必要になった際には、コマンドをコピペなどして利用してみてください。