このセクションでは,移动式表空间機能を使用して,file-per-tableテブルスペス(.idb
ファイル)をあるデータベースサーバーから別のデータベースサーバーにコピーする方法について説明します。
他のInnoDB
テブルコピ方式に,セクション14.6.2 "別のマシンへのInnoDBテ"を参照してください。
InnoDB
file-per-tableテーブルスペースを別のデータベースサーバーにコピーすることをお勧めするのには,多くの理由があります。
本番サバに余計な負荷を掛けずにレポトを実行するため。
新しいスレブサバに,あるテブルとまったく同じデタをセットアップするため。
問題や誤りが発生したあとに,テブルのバックアップ版をリストアするため。
, mysqldumpコマンドの結果をンポトするよりも,デタを移動させる方が速いため。デ。
システム要件により適したストレジ媒体を持サにfile-per-tableテブルスペスを移動するため。たとえば,アクセス頻度の高いテブルを固态硬盘デバスに置いたり,大規模なテブルを大容量の硬盘驱动器デバ邮箱スに置いたりする場合です。
テブルスペスのコピの制限と使用方法に関する注意(トランスポタブルテブルスペス)
テブルスペスのコピ手順は,
innodb_file_per_table
が在
(MySQL 5.6.6以降ではデフォルトです)共有のシステムテブルスペスにあるテブルは休止できません。テブルが休止されると,影響を受けたテブルでは読み取り専用のトランザクションのみが許可されます。
テーブルスペースをインポートする場合,ページサイズはインポートするインスタンスのページサイズに一致する必要があります。
丢弃表空间
がパーティション化されたテーブルでサポートされていないということは,トランスポータブルテーブルスペースも未サポートであることを意味します。パティション化されたテブルでALTER TABLE……丢弃表空间
を実行すると,次のエラが返されます。错误1031 (HY000):表存储引擎'部分'没有这个选项.丢弃表空间
は,foreign_key_checks
が1
に設定されている親/子(主キ/外部キ)関係を持。親子関係のテブルのテブルスペスを破棄する前に,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の実行中のサーバーインスタンスから実行中の別のインスタンスへテーブルをコピーする方法について説明します。同じ手順は,微調整を加えると,同じインスタンスでテーブルの完全なリストアを実行するために使用できます。
ソスサバで,テブルがまだ存在していない場合,テブルを作成します。
mysql >使用测试;CREATE TABLE t(c1 INT) =InnoDB;
目的サバで,テブルが存在していない場合,テブルを作成します。
mysql >使用测试;CREATE TABLE t(c1 INT) =InnoDB;
目的サバで,既存のテブルスペスを破棄します。(テブルスペスをンポトする前に,
InnoDB
は受け取り側のテブルにアタッチされたテブルスペスを破棄します。)删除表空间
ソスサバでは,
刷新表……用于出口
を実行してテブルを休止し,. cfg
メタデタファ。mysql >使用测试;mysql>的FLUSH table表
メタデタ(
. cfg
)ファルはInnoDB
デタディレクトリに作成されます。注記刷新表……用于出口
はMySQL 5.6.6以降で使用できます。このステートメントは,サーバー稼働中にバイナリテーブルのコピーができるように,名前付きテーブルへの変更をディスクにフラッシュします。刷新表……用于出口
が実行されると,InnoDB
はテブルと同じデタベスディレクトリに. cfg
ファ邮箱ルを作成します。. cfg
ファイルには,テーブルスペースファイルをインポートするときのスキーマの検証に使用されるメタデータが含まれます。.ibd
ファ邮箱ルおよび. cfg
メタデ。例:壳> scp/ / datadir /路径/测试/ t。{ibd, cfg}目标服务器:/ / datadir /路径/测试
注記.ibd
ファ邮箱ルおよび. cfg
ファ,ルは,次の手順で示すように,共有ロックを解放する前にコピ,する必要があります。ソスサバでは,
打开表
を使用して,刷新表……用于出口
によって取得されたロックを解放します。mysql >使用测试;mysql >解锁表;
目的サバで,テ。
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