mysqldumpでフルバックアップとリストア
MySQLのバックアップにはいくつか方法があります。その中でも最もオーソドックスな方法であるmysqldumpを使った方法についてまとめておきます。
mysqldumpを使った方法の特徴としては
- 手軽である
- 無停止でバックアップが取れる(オンラインバックアップ)
- データのダンプを出力する(論理バックアップ)
- リストアに時間がかかる
などがあります。
1. セットアップ
2. ダンプの取得
以下のようにmysqldumpコマンドを使いダンプデータを取得します。
$ sudo mysqldump example > backup/backup-$(date +%Y%m%d).sql
以上です。簡単。
リストア
リストアのためDROP TABLE
しておきます。
リストアの際には先ほどのダンプデータをリダイレクトで入力するだけ。
$ sudo mysql example < backup/backup-20181029.sql
リストアも簡単。
全てのデータベースをバックアップしたい
--all-databases
オプションを使います。
$ sudo mysqldump --all-databases > backup/backup-$(date +%Y%m%d).sql
これならDROP DATABASE
した状態でも以下でリストア可能。
$ sudo mysql < backup/backup-20181029.sql
バックアップを圧縮して取りたい
gzip
にパイプすれば圧縮も簡単。
$ sudo mysqldump --all-databases | gzip > backup/backup-$(date +%Y%m%d).sql.gz
リストアもgunzip経由で。
$ gunzip < backup/backup-20181029.sql.gz | sudo mysql
cronで定期的にバックアップしたい
最後にcronの設定をしてみます。MySQL接続のため.my.cnf
は事前に設定しておきましょう。
例えば毎日午前3時にバックアップを取りたかったらcrontab -e
に以下を追加します。
0 3 * * * /usr/bin/mysqldump -u root --all-databases > /path/to/home/backup/full-$(date +\%Y\%m\%d).sql