MySQLのバックアップ

注意

  • CentOS4上でのMySQL5.1での調査内容です。
    • 他の環境だと異なるかも…。
  • 今回はmysqldumpのみ調査。mysqlhotcopyは未調査。

バックアップ命令は2種類

  • mysqldump
  • mysqlhotcopy

MySQLの命令ではなく、実行ファイルやperlスクリプト

mysqldumpの特徴

  • 結果がSQLのテキストとして出力される。
  • 実行ファイルなので、環境に依存しない。
  • 不整合が生じる可能性あり:デフォルトではロックされない。
  • 標準出力がUTF-8以外だと出力が文字化けする。

mysqlhotcopyの特徴

  • データベースファイルとしてバイナリで出力される。
  • PerlスクリプトDBIをuseしているので、DBIが無いと起動できない。
  • 自動的にロックされるので安心。
  • MyISAMのみバックアップ可能。InnoDBは無理。

 
今回は、DBIが入ってないので、mysqldumpを使用する。

mysqldumpの入力例


すべてのDBの情報を格納

$ mysqldump --opt -u [ユーザ名] -p[パスワード] -A > [バックアップファイル名].sql


対象のDB上のあるテーブルの情報を格納

$ mysqldump --opt -u [ユーザ名] -p[パスワード] [DB名] [テーブル名]> [バックアップファイル名].sql


標準出力がUTF-8以外の場合

$ mysqldump --opt --default-character-set=[文字コード名] -u [ユーザ名] -p[パスワード] -A > [バックアップファイル名].sql
  • -pと[パスワード]の間にはスペースを入れない!
  • [テーブル名]がnullならば、対象のDBすべてを取得する。
  • mysqldumpのデフォルト出力はUTF-8
オプションの意味
オプション 意味
--opt 出力結果のSQLに以下を追加
・テーブルのロック
・同名のテーブルがあった場合、それのDrop
・Insertの最適化
-u ユーザ名
-p パスワード
間に空白を入れると上手く認識されない
-A --all-databasesと等価。全DBを対象とする。

バックアップの復旧例

$ mysql -u [ユーザ名] -p[パスワード] < [バックアップファイル名].sql


ただのSQLなので、実行するだけ。
展開先のDBに既にテーブルがある場合、一度削除されるので注意。(--optオプションにより)

不明点・TODO

  • mysqlhotcopyもそのうち調査。
  • MyISAMInnoDBって何?