[wp-cli]WordPressのデータベースをバックアップする


wp-cliを使うと、簡単にデータベースのバックアップを行うことができます。出力されるファイルは、生のSQLです。mysqldumpを使ってもよいのですが、取得の仕方を工夫しないと、シェルのhistoryにパスワードが残ってしまうので、wp-cliでのSQLバックアップを検討してみてはいかがでしょう。

■ wp-cliによるSQLのバックアップ

単純に「wp db export」するだけです。DB名やユーザー名、パスワードはwp-config.phpから引っ張ってくるので、手入力する必要がありません。

# wp --allow-root db export --path=/home/vhosts/$(uname -n)/public_html
Success: Exported to wpdb0001.sql

出力されるファイル名は、wp-config.phpに書かれているデータベース名になります。

■ mysqldumpではこうする

ちなみに、mysqldumpでなるべくパスワードを手打ちしない方法はこんな感じです。

# CONFIG=/home/vhosts/wp-centos7/public_html/wp-config.php ; mysqldump -u $(cat ${CONFIG} | grep DB_USER | awk '{print $NF}' | sed -e "s/[');]//g") -p$(cat ${CONFIG} | grep DB_PASSWORD | awk '{print $NF}' | sed -e "s/[');]//g") $(cat ${CONFIG} | grep DB_NAME | awk '{print $NF}' | sed -e "s/[');]//g") > $(cat ${CONFIG} | grep DB_NAME | awk '{print $NF}' | sed -e "s/[');]//g")_mysqldump.sql

最初にwp-config.phpのフルパスを変数に入れてもなおこんな長さです。長いですね・・・。おまけに、MySQL 5.6からはパスワードをシェルから入力すると「Warning: Using a password on the command line interface can be insecure.」なんて怒られてしまいます。

ちなみに、wp-config.phpからDB名、ユーザー名、パスワードを抜き出すとこんな風になります(以下のパスワードはデタラメですよ)。

# cat /home/vhosts/$(uname -n)/public_html/wp-config.php | egrep '(DB_NAME|DB_USER|DB_PASSWORD)' | awk '{print $NF}' | sed -e "s/[');]//g"
wpdb0001
user0001
A3kqJdxP

■ 両者のSQL比較

diffを取ってみるとこうなります。

# diff wpdb0001.sql wpdb0001_mysqldump.sql 
381c381
< -- Dump completed on 2015-01-04 10:21:51
---
> -- Dump completed on 2015-01-04 10:21:46

取得した時間しか違いませんね。ね、簡単でしょう?

[amazonjs asin="4774170208" locale="JP" title="MariaDB&MySQL全機能バイブル"]