mysqlの全てのデータベースを圧縮してダンプする

mysqldumpコマンドを使い簡単に全データベースのバックアップを取得します。 バックアップしたファイル名には日付を追加しユニークな名前にするので毎日バックアップを残す事ができます。 まず最初にパスワード入力無しでmysqlコマンドを実行出来るように~/.my.cnfファイルを次の内容で作成します。

~/.my.cnf

[client]
password="YOUR MYSQL PASSWD"

mysqlにログインする際に使うパスワードが書かれてますので権限をユーザのみ0600などに設定して下さい。

$ chmod 0600 .my.cnf

本当にパスワードなしでログインできるか確認します。mysqlと打つだけでmysql>にコンソール画面が変われば成功です。

dumpスクリプト

スクリプト自体は短いです。dumpしたファイルを保存するディレクトリを作成してスクリプト中に設定して下さい。

alldump.sh

for x in `mysql -Bse "show Databases;"`; do
    mysqldump --skip-lock-tables $x | gzip -9 > /path/to/mysqldump/$x.`date +%Y%m%d`.gz
done

dump実行

$ sh alldump.sh
$ ls mysqldump/
information_schema.20120322.gz  mysql.20120322.gz   performance_schema.20120322.gz  test.20120322.gz

ファイルが作成されていれば成功です。圧縮済みの.gzデータなので復元するには

$ gunzip mysql.20120322.gz

mysqldump コマンドに渡しているオプション--skip-lock-tablesは以下のエラーの為の対処です。

mysqldump: Got error: 1044: Access denied for user 'foo'@'localhost' to database 'information_schema' when using LOCK TABLES
mysqldump: Got error: 1142: SELECT,LOCK TABL command denied to user 'foo'@'localhost' for table 'cond_instances' when using LOCK TABLES
created:

Back to top