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