MySQLのバックアップ

WordPressのバックアップを取ろうと思ったがやり方がわからなかったのでちょっと調べてみました。

WordPressはPHPとMySQLで動いています。そのためMySQLのバックアップとコンテンツのバックアップを取れば実質的なバックアップはすべて完了します。コンテンツのバックアップについてはapacheのドキュメントルート配下にあるファイル群をバックアップすればOKです。問題はMySQL。どうやって取るのか分からないで途方にくれていたらGoogle先生が教えてくれました。

MySQLにはmysqldumpというデータのダンプファイルを取るためのツール、というかコマンドがあります。それを利用してバックアップをとり、さらにそれを利用してリストアを行います。

まず、すべてのデータをバックアップを取るときのやり方です。

 

$ mysqldump -u user_name -ppassword -x --all-databases > sample_all.sql

※user_name : ログインするためのユーザ名
※password : ログインするためのパスワード

 

-u : このオプションはログインユーザを指定するためのオプションです。このオプションの後に続く文字列がユーザとして認識されます。

-p : パスワードを指定するためのオプションです。ログインユーザに対するパスワードを書きます。オプションとパスワードとの間は空けないことに注意しましょう。

-x : すべてのデータベースのすべてのテーブルをロックします。

–all-databases : すべてのデータベースをダンプします。

以上のオプションをつけて実行すると本来はターミナルの標準出力にそのまま結果が垂れ流されます。そこで保存対象ファイルに出力内容をリダイレクトさせてあげます。上の例ではsample_all.sqlにリダイレクトして出力内容をファイルに書き込んでいます。

次にある対象のデータベースのみ対象にしてバックアップを取ります。

 

$ mysqldump -u user_name -ppassword データベース名 > sample.sql

※user_name : ログインするためのユーザ名
※password : ログインするためのパスワード
※データベース名 : バックアップ対象のデータベース名

 

先ほどと違うところはデータベースを指定しているところと、すべてのデータベースのロックをかけなくていいので「-x」オプションが無いところです。

さて、バックアップはできました。バックアップをしたら次はリストアをしてみましょう。

すべてのデータベースのバックアップデータをリストアするときには以下のように行います。

 

$ mysql -u user_name -ppassword < sample_all.sql 

※user_name : ログインするためのユーザ名
※password : ログインするためのパスワード

 

直感的で分かりやすいですね。データのリストアはユーザ名とパスワードを指定してあげ、リダイレクトを逆向きに書いてあげればそれでOKです。

同じように一部のデータベースに対してリストアを行う場合は以下となります。

 

$ mysql -u user_name -ppassword データベース名 < dump.sql 

※user_name : ログインするためのユーザ名
※password : ログインするためのパスワード
※データベース名 : バックアップ対象のデータベース名

 

以上がバックアップになります。結構簡単ですね。コマンドなのでシェルを組んで定期的に実行させるのもありだと思います。以上、KUJIRAでした。