Amazon EC2

Linux上のMySQLをファイルベースで移動する方法

Amazon EC2などのクラウドサーバが暴走し、アクセス不可になった場合、こちらの手順でデータにアクセスできる状態にすることができます。

ファイルの復旧はは単純にコピーすればよいですが、MySQLはどのように復旧させればよいでしょうか。

基本的にはファイルを移動させればよいのですが、InnoDBの復旧はちょっと気を付けなければならないポイントがあります。

MySQL復旧手順

    1. 新環境でMySQLをインストールします。インストール後、サービスをストップします。
    2. 旧環境の/var/lib/mysql以下から必要なデータベース名のディレクトリをコピーします。
    3. 2のデータを新環境の/var/lib/mysqlにコピーします
    4. ここまででMyIsam型のテーブルは移行完了です。Mysqlにログインし、テーブルにアクセスできることを確認してみてください。
      問題はInnoDB型のテーブルです。show tablesなどでみると確かにテーブルは得るのですがselectなどのクエリーを発行仕様とすると、そんなテーブルはない と怒られます。
      これはInnoDBがログファイルから構成されているためです。
    5. ログファイルを移行する手順です。旧環境の/var/lib/mysql/ib_logfile0 とlogfile1とibdata1を新環境に上書きコピーします。
    6. この状態でサービスをスタートしようとすると、おそらく失敗します。/var/log/maillogで失敗の理由を探るとおそらく下記のようなエラーが出ていると思います。
    7. [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]の中に記載してください。

    8. my.cnfの編集が終わったらmysqlサーバをスタートします。これで正常にMySQLが移行できたはずです。

Ads by Google

Ads by Google

-Amazon EC2
-,

© 2024 みる米技術部 Powered by AFFINGER5