mysqldumpでフルバックアップとリストア

MySQLのバックアップにはいくつか方法があります。その中でも最もオーソドックスな方法であるmysqldumpを使った方法についてまとめておきます。

mysqldumpを使った方法の特徴としては

  • 手軽である
  • 無停止でバックアップが取れる(オンラインバックアップ)
  • データのダンプを出力する(論理バックアップ)
  • リストアに時間がかかる

などがあります。

1. セットアップ

こちらの記事にしたがってMySQLサーバーを用意します。

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

参考