そのため、レプリケーションストリームでセットアップされたテストデータベースサーバーがあります。名前を超えて、スレーブdatadirのスペースをすぐにいっぱいにする最適化が行われました。Mysqlは忠実に、もう少しスペースを待っていました。
このdatadirはmysqlのdatadirとしてのみ使用されるファイルシステムであるため、他に解放するものはありませんでした。
レプリケーションストリームの一部ではない4ギガのinnodbテストテーブルがあったので、それが機能するかどうかを確認するために何かを試してみようと思ったのです。
これが私がとったステップです
- 移動しようとしていたテーブルをフラッシュしました
- 読み取りロックを設定しました(書き込みがなく、レプリケーションストリームにない場合でも)
- .frmと.ibdをファイルシステムにコピーし、予備の部屋を用意しました
- テーブルのロックを解除しました
- そのテーブルは切り捨てられました-これにより、最適化が完了するのに十分なスペースが解放され、レプリケーションが再び開始されます。
- mysqlのスレーブ化/シャットダウンを停止する
- ファイルをtmpからデータディレクトリにコピーして戻します
- mysqlを再起動します
.errログには何も表示されず、見た目は良好です。mydbに接続して使用します。ショーテーブルで私がいじっていたテーブルを参照してください。しかし、私が試してみると
select * from testtable limit 10;
エラーが出ます
ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist
私がこれまでに伝えることができることから、私は他のすべてのテーブルから問題なく読むことができ、複製は苦情なしでバックアップを開始しました。
この時点から回復するためにできることはありますか?必要に応じてゼロから再構築できますが、他の人がこのベンチャーについて一般的に考えていることを知りたいと思いました。完璧な結果が得られなかった一連の手順について何かありましたか?
これがテストサーバーでない場合、「ライブで実行」して何が起こるかを確認できませんでした。私がそれを気に入らなければならなかった場合、本番スレーブのスペースを一時的に解放する最良の方法は何でしょうか?
Table 'X' doesn't exist in engine
。すべてのテーブルに対して上記の方法を実行する必要がありますか、それを修正するより良い方法がありますか?