Amazon EC2などのクラウドサーバが暴走し、アクセス不可になった場合、こちらの手順でデータにアクセスできる状態にすることができます。
ファイルの復旧はは単純にコピーすればよいですが、MySQLはどのように復旧させればよいでしょうか。
基本的にはファイルを移動させればよいのですが、InnoDBの復旧はちょっと気を付けなければならないポイントがあります。
MySQL復旧手順
- 新環境でMySQLをインストールします。インストール後、サービスをストップします。
- 旧環境の/var/lib/mysql以下から必要なデータベース名のディレクトリをコピーします。
- 2のデータを新環境の/var/lib/mysqlにコピーします
- ここまででMyIsam型のテーブルは移行完了です。Mysqlにログインし、テーブルにアクセスできることを確認してみてください。
問題はInnoDB型のテーブルです。show tablesなどでみると確かにテーブルは得るのですがselectなどのクエリーを発行仕様とすると、そんなテーブルはない と怒られます。
これはInnoDBがログファイルから構成されているためです。 - ログファイルを移行する手順です。旧環境の/var/lib/mysql/ib_logfile0 とlogfile1とibdata1を新環境に上書きコピーします。
- この状態でサービスをスタートしようとすると、おそらく失敗します。/var/log/maillogで失敗の理由を探るとおそらく下記のようなエラーが出ていると思います。
- my.cnfの編集が終わったらmysqlサーバをスタートします。これで正常にMySQLが移行できたはずです。
[crayon]
InnoDB: Error: log file ./ib_logfile0 is of different size 0 16777216 bytes
InnoDB: than specified in the .cnf file 0 5242880 bytes!
[/crayon]
これは旧環境の/etc/my.cnfで設定されていたinnodb_log_file_sizeが新環境のinnodb_log_file_sizeよりも大きいから合わせてくれ!というエラーです。
デフォルトでは5M (5242880 bytes)です。上の例では旧環境は16M(16777216 bytes)なので、/etc/my.cnfを編集し、innodb_log_file_sizeの値を変えてあげます。
ちなみに、my.cnfは記載する位置も注意する必要があります。通常のモード(mysqld)でmysqlサーバを立ち上げる時は[mysqld]から次の[xxxxxx]の中に記載してください。
mysqld_safeモードで立ち上げる時は[mysqld_safe]から次の[xxxxxxx]の中に記載してください。