古いMYISAMデータベースのテーブルをInnoDBに変換して、停電などの場合の堅牢性を高めています。
Mysql 5.5.xを使用しています
本番システムを実行する前に、念のため、テストマシンでDBのコピーを試しに実行しています。
Mysqldumpでテーブルをバックアップしました この情報を使用します
一部のテーブルは、変換にタイムアウト(600秒)を超える時間がかかるため、エラー2013が発生します。
ALTER TABLE voice.members ENGINE=InnoDB Error Code: 2013. Lost connection to MySQL server during query
後でテーブルを確認すると、InnoDBと表示されています。
show table status in voice like "members";
ここに私の質問があります:
変換が意図したとおりに行われたと思いますか?
テストするまで変換を想定しないでください。よろしくお願いします。
整合性が損なわれていないことを確認するために実行する必要がある明らかなチェックはありますか?
InnoDBに変換した特定のテーブルmydb.mytable
について、2つのことを確認してください
すべての行を数える
SELECT COUNT(1) FROM mydb.mytable;
MyISAMバックアップで同じカウントを実行します。
テーブル全体のチェックサムを実行する
CHECKSUM TABLE mydb.mytable;
MyISAMバックアップで同じチェックサムを実行します。
InnoDBテーブルとMyISAMテーブルの両方で同じカウントとチェックサム値を取得する必要があります。
InnoDB変換を段階的に管理したい場合は、次の手順で試してください。
CREATE TABLE mydb.mytable_new LIKE mydb.mytable;
ALTER TABLE mydb.mytable_new ENGINE=InnoDB;
INSERT INTO mydb.mytable_new SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytable_old;
ALTER TABLE mydb.mytable_new RENAME mydb.mytable;
テーブルを使用して、ステージングでテストし、タイヤをキックします。
テーブルに問題がなければ、古いテーブルをドロップします
DROP TABLE mydb.mytable_old;
またはバックアップとして保持する
ALTER TABLE mydb.mytable_old RENAME mydb.mytable_myisam;
変換前にDBがシングルユーザーであることを強制する必要がありますか、それとも変換が進行中の応答時間が悪くなる可能性があるか、または最初のバックアップから復元した場合に作業が失われることだけを心配する必要がありますか?
ライブMyISAMテーブルをInnoDBに変換する場合は、私の投稿を参照してください Converting live MyISAM table to InnoDB
非常に懐疑的であるか、データの損失を恐れている場合は、シングルユーザーアクセスのアイデアは問題ありません。
あなたはこのようにmysqlを再起動することができます
service mysql restart --skip-networking
root@localhost
としてmysqlにログインします。次に変換を行います
service mysql restart