10bet网址
MySQL 5.6リファレンスマニュアル
本手册下载
PDF (Ltr)- 26.8 mb
PDF (A4)- 26.8 mb
HTML下载(TGZ)- 7.2 mb
HTML下载(邮政编码)- 7.2 mb


MySQL 5.6リファレンスマニュアル/.../ テブルスペスの別のサバへのコピ(トランスポタブルテブルスペス)

14.5.5テブルスペスの別のサバへのコピ(トランスポタブルテブルスペス)

このセクションでは,移动式表空间機能を使用して,file-per-tableテブルスペス(.idbファイル)をあるデータベースサーバーから別のデータベースサーバーにコピーする方法について説明します。

他のInnoDBテブルコピ方式に,セクション14.6.2 "別のマシンへのInnoDBテ"を参照してください。

InnoDBfile-per-tableテーブルスペースを別のデータベースサーバーにコピーすることをお勧めするのには,多くの理由があります。

  • 本番サバに余計な負荷を掛けずにレポトを実行するため。

  • 新しいスレブサバに,あるテブルとまったく同じデタをセットアップするため。

  • 問題や誤りが発生したあとに,テブルのバックアップ版をリストアするため。

  • , mysqldumpコマンドの結果をンポトするよりも,デタを移動させる方が速いため。デ。

  • システム要件により適したストレジ媒体を持サにfile-per-tableテブルスペスを移動するため。たとえば,アクセス頻度の高いテブルを固态硬盘デバスに置いたり,大規模なテブルを大容量の硬盘驱动器デバ邮箱スに置いたりする場合です。

テブルスペスのコピの制限と使用方法に関する注意(トランスポタブルテブルスペス)

  • テブルスペスのコピ手順は,innodb_file_per_table(MySQL 5.6.6以降ではデフォルトです)共有のシステムテブルスペスにあるテブルは休止できません。

  • テブルが休止されると,影響を受けたテブルでは読み取り専用のトランザクションのみが許可されます。

  • テーブルスペースをインポートする場合,ページサイズはインポートするインスタンスのページサイズに一致する必要があります。

  • 丢弃表空间がパーティション化されたテーブルでサポートされていないということは,トランスポータブルテーブルスペースも未サポートであることを意味します。パティション化されたテブルでALTER TABLE……丢弃表空间を実行すると,次のエラが返されます。错误1031 (HY000):表存储引擎'部分'没有这个选项

  • 丢弃表空间は,foreign_key_checks1に設定されている親/子(主キ/外部キ)関係を持。親子関係のテブルのテブルスペスを破棄する前に,foreign_key_checks = 0を設定します。

  • ALTER TABLE……导入表空间は,ンポトされたデタに対して外部キ制約を課しません。テーブル間に外部キー制約がある場合,すべてのテーブルを同じ(論理上の)時点でエクスポートしてください。

  • ALTER TABLE……导入表空间では,テブルスペスを. cfgメタデタファ。ただし,. cfgファイルなしでインポートした場合は,メタデータのチェックは実行されず,次に類似した警告が発行されます。

    InnoDB: IO Read error:(2,没有这样的文件或目录)错误打开'。\ test\t.cfg',将尝试在没有模式验证的情况下导入1行

    . cfgファイルなしでインポートする機能は,スキーマの不一致が予想されない場合に,使い勝手が高まる可能性があります。また,. cfgファ.ibdファルから収集できないクラッシュリカバリシナリオで役立。

  • MySQL 5.6以降では,両方のサーバーがGA(一般提供)ステータスであり,両者のバージョンが同じシリーズである場合に,テーブルスペースファイルの別のサーバーからのインポートが機能します。そうでないと,ンポト先のサ。

  • レプリケションシナリオでは,マスタブの両方でinnodb_file_per_tableに設定されている必要があります。

  • Windowsでは,InnoDBはデタベス,テス,およびテブル名を内部的に小文字で格納します。LinuxやUNIXなど,大文字と小文字を区別するオペレーティングシステムでインポートの問題を回避するには,すべてのデータベース,テーブルスペース,およびテーブルを小文字名を使用して作成します。これを遂行する便利な方法は,デタベス,テス,またはテブルを作成する前に,my.cnfまたはmy.iniファ邮箱ルの(mysqld)セクションに次の行を追加することです。

    (mysqld) lower_case_table_names = 1

手順の例:あるサーバーから別のサーバーへのテーブルスペースのコピー(トランスポータブルテーブルスペース)

この手順ではMySQLの実行中のサーバーインスタンスから実行中の別のインスタンスへテーブルをコピーする方法について説明します。同じ手順は,微調整を加えると,同じインスタンスでテーブルの完全なリストアを実行するために使用できます。

  1. ソスサバで,テブルがまだ存在していない場合,テブルを作成します。

    mysql >使用测试;CREATE TABLE t(c1 INT) =InnoDB;
  2. 目的サバで,テブルが存在していない場合,テブルを作成します。

    mysql >使用测试;CREATE TABLE t(c1 INT) =InnoDB;
  3. 目的サバで,既存のテブルスペスを破棄します。(テブルスペスをンポトする前に,InnoDBは受け取り側のテブルにアタッチされたテブルスペスを破棄します。)

    删除表空间
  4. ソスサバでは,刷新表……用于出口を実行してテブルを休止し,. cfgメタデタファ。

    mysql >使用测试;mysql>的FLUSH table表

    メタデタ(. cfg)ファルはInnoDBデタディレクトリに作成されます。

    注記

    刷新表……用于出口はMySQL 5.6.6以降で使用できます。このステートメントは,サーバー稼働中にバイナリテーブルのコピーができるように,名前付きテーブルへの変更をディスクにフラッシュします。刷新表……用于出口が実行されると,InnoDBはテブルと同じデタベスディレクトリに. cfgファ邮箱ルを作成します。. cfgファイルには,テーブルスペースファイルをインポートするときのスキーマの検証に使用されるメタデータが含まれます。

  5. .ibdファ邮箱ルおよび. cfgメタデ。例:

    壳> scp/ / datadir /路径/测试/ t。{ibd, cfg}目标服务器:/ / datadir /路径/测试
    注記

    .ibdファ邮箱ルおよび. cfgファ,ルは,次の手順で示すように,共有ロックを解放する前にコピ,する必要があります。

  6. ソスサバでは,打开表を使用して,刷新表……用于出口によって取得されたロックを解放します。

    mysql >使用测试;mysql >解锁表;
  7. 目的サバで,テ。

    mysql >使用测试;修改表的表空间
    注記

    ALTER TABLE……导入表空间機能は,ンポトされたデタに対して外部キ制約を課しません。テーブル間に外部キー制約がある場合,すべてのテーブルを同じ(論理上の)時点でエクスポートしてください。この場合,テーブルの更新を停止し,すべてのトランザクションをコミットし,テーブルで共有ロックを取得してから,エクスポート操作を実行します。

テブルスペスのコピの内部情報(トランスポタブルテブルスペス)

次の情報では,トランスポータブルテーブルスペースのコピー手順に関する内部情報とエラーログについて説明します。

ALTER TABLE……丢弃表空间が目的の邮箱ンスタンスで実行された場合。

  • テブルはxモドでロックされています。

  • テブルスペスがテブルから切り離されています。

刷新表……用于出口がソス。

  • エクスポトのためにフラッシュされたテブルが共有モドでロックされています。

  • パジコディネタのスレッドが停止しています。

  • ダティペジがディスクに同期しています。

  • テブルのメタデタがバナリの. cfgファ邮箱ルに書き込まれました。

この操作で予想されるエラログメッセジです。

2013-07-18 14:47:31 34471[注]InnoDB: Sync to disk of '"test"。“t”的开始。2013-07-18 14:47:31 34471[注]InnoDB:将表元数据写入“。/test/t.cfg”中。2013-07-18 14:47:31 34471[注]InnoDB:表“test”。“t”已刷新到磁盘

打开表がソス。

  • バereplicationナリの.cfgファereplicationルが削除されました.cfg。

  • インポートされたテーブル(または複数のテーブル)の共有ロックが解放され,パージコーディネータのスレッドが再起動されました。

この操作で予想されるエラログメッセジです。

2013-07-18 15:01:40 34471[注]InnoDB: Deleting the meta-data file './test/t.cfg' 2013-07-18 15:01:40 34471[注]InnoDB: restoring purge .删除元数据文件

ALTER TABLE……导入表空间が目的のインスタンスで実行されると,インポートのアルゴリズムはインポートされたテーブルスペースごとに次の操作を実行します。

  • テブルスペスの各ペジに破損があるかどうかをチェックします。

  • 各ペジのスペスidとログシケンス番号(lsn)が更新されます。

  • フラグが検証され,ヘッダペジのLSNが更新されます。

  • Bリペジが更新されます。

  • ペジの状態がディスクに書き込まれるように,この状態をダに設定します。

この操作で予想されるエラログメッセジです。

2013-07-18 15:15:01 34960[注]InnoDB: Importing tablespace for table 'test/t' that was exported from host 'ubuntu' 2013-07-18 15:15:01 34960[注]InnoDB: Phase I - Update all pages 2013-07-18 15:15:01 34960[注]InnoDB: Sync to disk 2013-07-18 15:15:01 34960[注]InnoDB: Sync to disk - done!2013-07-18 15:15:01 34960[注]InnoDB: Phase III - Flush changes to disk . 2013-07-18 15:15:01 34960[注]InnoDB: Phase IV - Flush complete
注記

テーブルスペースが破棄されたこと(目的のテーブルのテーブルスペースを破棄した場合)を伝える警告,および.ibdファ邮箱ルがないために統計値が計算できなかったことを伝えるメッセ邮箱ジも受け取る場合があります。

2013-07-18 15:14:38 34960 [Warning] InnoDB:表“test”。t表空间设置为废弃。2013-07-18 15:14:38 7f34d9a37700 InnoDB: cannot calculate statistics for table "test"。“t”是因为缺少。ibd文件。如需帮助,请登录//www.delbede.com/doc/refm10bet靠谱an/5.7/en/innodb-troubleshooting.html