3ノードのperconaクラスターの1つのノードから取得した完全バックアップを復元しようとしています(perconaクラスター5.5、galera 2.1、wsrep sstメソッドはrsync、innodbテーブルのみ)。
バックアップは次のように行われました。
rm -rf /tmp/backup/mysqldb
innobackupex --user=bkpuser --password=xxxx --galera-info --no-timestamp /tmp/backup/mysqldb/
innobackupex --apply-log --use-memory=2G /tmp/backup/mysqldb/
私が試みている復元手順は次のとおりです。
wsrep_urls = gcomm://
で開始して、クラスターを初期化しますgalera.cache
とgrastate.dat
を削除しますwsrep_urls = gcomm://firstnode:port,gcomm://secondnode:port,gcomm://thirdnode:port
)wsrep_urls
構成で最初のノードを再起動します(wsrep_urlsが非推奨になっていることは知っていますが、まだwsrep_cluster_addressを使用できるようにガレラを取得していません。)
私の問題は、2番目と3番目のノードがSSTの後にエラーを報告することです。テーブルごとに、次のエラーが表示されます。
130225 15:44:43 [ERROR] Cannot find or open table myTestDb/settings from the internal data dictionary of InnoDB though the .frm file for the table exists. Maybe you have deleted and recreated InnoDB data files but have forgotten to delete the corresponding .frm files of InnoDB tables, or you have moved .frm files to another database? or, the table contains indexes that this version of the engine doesn't support. See http://dev.mysql.com/doc/refman/5.5/en/innodb-troubleshooting.html how you can resolve the problem.
Mysql show tables
はテーブルを既存のものとして表示しますが、それらから選択しようとすると、エラーTable 'myTestDb.settings' does not exist
..を報告します。
Mysqlを起動してsstを要求する前に、ローカルテーブルスペースファイルを削除しようとしましたが、同じ結果になります。
復元はどのように実行すればよいですか?バックアップファイルをすべてのノードにコピーして戻す必要がありますか?
使用しているSSTメソッドについては言及していません。エクストラバックアップだと思いますか?
2番目と3番目のノードで説明する症状は、ibdata1ファイルにあるInnodbデータディクショナリが欠落している(そして再初期化されている)ように聞こえます。 1番目のノードの適切な場所からコピーされていない可能性があります。
Trxログや「別のフォルダ」内のファイルの二重書き込みなどについて言及されました。 my.cnfのInnodb設定は何ですか?あなたは、perchance、innodb_data_home_dirを設定しますか(そしてそれはあなたの標準のdatadirの外にあります)?
もしそうなら、それはおそらくこのバグです: https://bugs.launchpad.net/percona-xtradb-cluster/+bug/1098566 、またはおそらくそれに類似したもの。
答えを見つけるのに多くの時間がかかりました。ドナーノードからinnobackup.backup.logを読み取り、追加ノードで作成されているデータを観察すると、なぜこれが発生するのかがわかります。
私はまったく同じ問題を抱えています。私の場合、カスタマイズされたinnodb_data_home_dirをコメントアウトすると、innodb_log_group_home_dirの値で問題が解決します。
グループと同期した後、それらの値を有効にしてファイルをコピーするだけです。
お役に立てれば。