MySQLのバックアップとリストア

バックアップ

InnoDBのデータベースだけの場合、mysqldumpでホットバックアップ可能。

    • optは、--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset と同等みたいです。

5.1以降はデフォルトらしいですが、yumでインストールしたMySQLのバージョンが5.0だったので、付けた方がよさそう。

全部

# mysqldump --opt -uユーザー名 -pパスワード --all-databases > mysql.dmp

特定のデータベースのみ

# mysqldump --opt -uユーザー名 -pパスワード データベース名 > mysql.dmp

InnoDBエンジン以外のストレージエンジンのテーブルが存在しているデータベースの場合、バックアップを取得している間にデータの変更が発生しないよう、データベースに共有ロックをほどこす必要があるようなので、その場合は、--lock-all-tablesを付ける。

cron.dailyなんかで実行する場合は、前述の通り対応する。
前述の通りrootに~/.my.cnfを作って、mysqldumpセクションにユーザー、パスワードを設定しておく


2009-05-30追記:
Redmine.JP | Redmineのインストールのように、リダイレクト前にパイプでgzipした方がよさそう。

# mysqldump --opt -uユーザー名 -pパスワード --all-database | gzip > mysql.dmp.gz


リストア

MYSQLコマンド自身もバイナリログの対象となっているため、リストアする前に、バイナリログの出力を停止しておくと良さそう。
HugeDomains.com - Shop for over 300,000 Premium Domainsを参照。

全部

# mysql -uユーザー名 -pパスワード < mysql.dmp

特定のデータベースのみ

# mysql -uユーザー名 -pパスワード名 データベース名 < mysql.dmp