質問

そのため、複製ストリームでセットアップされたテストDBサーバーがあります。名前を越えて、奴隷のデータディールのスペースをすぐに満たした最適化を通過しました。 MySQLは忠実に、さらにスペースを待っていました。

このDatadirは、MySQLのDatadirとしてのみ使用されるファイルシステムであるため、他に解放するものはありませんでした。

レプリケーションストリームの一部ではない4ギグInnoDBテストテーブルがありましたので、それが機能するかどうかを確認するために何かを試してみました。

これが私がとったステップです

  1. 私が動けようとしていたテーブルを洗い流しました
  2. 読み取りロックを置きました(何も書いていませんが、レプリケーションストリームにはありませんでした)
  3. .frmと.ibdをいくつかのスペアルーム付きファイルシステムにコピーしました
  4. テーブルのロックを解除しました
  5. そのテーブルが切り捨てられました - これにより、最適化が完了するのに十分なスペースが解放され、複製スタートが再び揺れています。
  6. 奴隷/シャットダウンmysqlを停止します
  7. TMPのファイルをデータdirに戻す
  8. mysqlを再起動します

.errログには何も表示されません、物事はよく見えます。 MyDBを接続して使用します。そして、私がショーテーブルでいじっていたテーブルをご覧ください。しかし、私が試してみると

select * from testtable limit 10;

エラーが発生します

ERROR 1146 (42S02): Table 'mydb.testtable' doesn't exist

私がこれまでに言うことができることから、私は他のすべてのテーブルから読むことができ、苦情からレプリケーションがバックアップされました。

この時点から回復するためにできることはありますか?必要に応じてゼロから再構築することができますが、他の人がこのベンチャーについて一般的に考えていたことに興味がありました。私が取った一連のステップについて、それが完璧な結果が増えてしまうでしょうか?

これがテストサーバーでなかった場合、「ライブでやる」ことができず、何が起こるかを見ることができませんでしたか?私がそれを気に入らなければならなかった場合、生産奴隷で一時的にスペースを解放するための最良の方法は何ですか?

役に立ちましたか?

解決

ほとんどの人が切り捨てられたテーブルを忘れる最大のことはそれです 切り捨てテーブルはDMLではなくDDLです. 。 INNODBでは、IBDATA1内のメタデータには、INNODBテーブルの番号付きリストが含まれています。 TRUNCATEテーブルを使用すると、INNODBテーブルの内部メタデータIDがシフトします。これは、テーブルが効果的に次のことを行うために起こります。

例:mydb.mytbと呼ばれるinnodbテーブルを切り捨てる

USE mydb
CREATE TABLE newtb LIKE mytb;
ALTER TABLE mytb RENAME oldtb;
ALTER TABLE newtb RENAME mytb;
DROP TABLE oldtb;

したがって、新しいMyTBには異なる内部メタデータIDがあります。

.ibdファイルを他の場所にコピーすると、.ibdには元の内部メタデータIDが含まれています。 .ibdファイルを戻すだけでは、内部メタデータIDのIBDATA1のメタデータの和解が和解しません。

あなたがすべきだったことはこれです:

InnoDBテーブルの.ibdファイルをコピーします。次に、これを実行します

ALTER TABLE tablename DISCARD TABLESPACE;

後でそれを取り戻すには、.ibdファイルをDatadirに戻してから実行します

ALTER TABLE tablename IMPORT TABLESPACE;

これにより、内部メタデータIDが保持されていました。

.frmが常に存在することを確認してください。

私はかつて、クライアントが同じ方法で彼がホスした30のInnodbテーブルを復元するのを手伝いました。別のDBサーバーを使用して、INNODBテーブルを追加およびドロップして、正しい内部メタデータIDを追い詰める必要がありました。

クライアントはこの記事を見つけました: http://www.chriscalender.com/?tag=innodb-error-tablespace-id-in-file 。私たちはそれを使用しました、そしてそれは大いに役立ちました。それがあなたを助けることを願っています。

他のヒント

友達に販売する前に、私は自分のMacを経験しました。XAMPPフォルダーをハードドライブにのみコピーするだけです。 (成功しません)残念ながら、それは私にトラブルをもたらしていました。なぜなら、私は次の手順を試したので、私は次の手順を試したので、私は新しいXAMPPをインストールし、 httdocsとvar mysql全体を新しいMacにコピーします。機能していないため、PhpMyAdmin内のテーブルにアクセスすることはできません... - 同じXAMPPバージョンをインストールして、まだ機能していない上記の手順を繰り返しようとしました。 - 寝ることにしました。

(成功) - 今朝、バックアップディスクを持ち込み、Windows 7で試してみてください。 -Windows用の新鮮な最新XAMPP、C: XAMPP -backup httdocsからWebサイト(フォルダー)のいずれか(フォルダー)があり、内の対応データベースフォルダーがあります。 var mysqlは私のWindows 7で準備ができています。1つのWebサイトで試してみて、残りを試してみたいと思います。httdocs and var mysqlには多くのプロジェクトがあります。 httdocsと var mysqlをc: xampp mysql dataにコピーします

まだ最後ではありません。ib_logfile0、ib_logfile1、ibdata1をバックアップファイルからwindows xampp c: xampp mysql dataにコピーします。

リフレッシュします http:// localhost/mywebsite

すごいすごい...それは働いています...

ライセンス: CC-BY-SA帰属
所属していません dba.stackexchange
scroll top