MySQL 傳輸空間

      網友投稿 773 2025-03-31

      將file-per-table表空間復制到另一個實例

      如何將一個file-per-table表空間從一個Mysql實例復制到另一個實例中,也就是眾所周知的可傳輸表空間特性。

      有很多原因可以解釋為什么你可以將一個InnoDB文件表空間復制到不同的實例中:

      .在不增加生產服務器額外負載的情況下運行報表。

      .在新的從服務器上為表設置相同的數據

      .在出現問題或錯誤后恢復表或分區的備份版本。

      .作為一種比Mysqldump命令導入更快的移動數據的方法。數據立即可用,而不需要重新插入和重建索引

      .將每個file-per-table表空間移動到具有更適合系統需求的存儲介質的服務器。例如,您可能希望在SSD設備上有繁忙的表,或者在高容量HDD設備上有大型表。

      限制和使用說明

      .只有當innodb_file_per_table設置為ON(默認設置)時,才可以拷貝表空間。駐留在共享系統表空間中的表不能被靜默。

      .當一個表被靜默時,只允許在受影響的表上執行只讀事務

      .在導入表空間時,頁面大小必須與導入實例的頁面大小相匹配。

      .當foreign_key_checks設置為1時,對于父-子(主-外鍵)關系的表空間不支持DISCARD TABLESPACE。在丟棄父-子表的表空間之前,設置foreign_key_checks=0。分區InnoDB表不支持外鍵。

      .ALTER TABLE……IMPORT TABLESPACE不會對導入的數據強制外鍵約束。如果表之間存在外鍵約束,那么所有表都應該在同一(邏輯)時間點導出。分區InnoDB表不支持外鍵。

      .ALTER TABLE……IMPORT TABLESPACE 和 ALTER TABLE…IMPORT PARTITION…TABLESPACE不需要.cfg元數據文件來導入一個表空間。但是,如果導入時沒有.cfg文件,則不會執行元數據檢查,并且會發出類似于下面的警告:

      Message: InnoDB: IO Read error: (2, No such file or directory) Error opening ‘.

      test\t.cfg’, will attempt to import without schema verification

      1 row in set (0.00 sec)

      在期待沒用模式不匹配的情況下,不使用.cfg文件進行導入可能會更方便。此外,在無法從.ibd文件收集元數據的崩潰恢復場景中,不需要.cfg文件就可以導入。

      .由于.cfg元數據文件的限制,當為分區表導入表空間文件時,不會對分區類型或分區定義差異報告模式不匹配。列差異被報告。

      .當在子分區表上運行ALTER TABLE … DISCARD PARTITION … TABLESPACE和ALTER TABLE … IMPORT PARTITION … TABLESPACE,分區和子分區表名都是允許的。當指定分區名時,該分區的子分區將包含在操作中。

      .如果兩個實例都有GA(通用可用性)狀態,并且它們的版本在同一系列可以從另一個MySQL服務器實例導入表空間文件。否則,該文件必須是在導入它的同一個服務器實例上所創建

      .在復制場景中,innodb_file_per_table必須在主節點和從節點上都設置為ON。

      .在Windows環境下,InnoDB內部存儲數據庫、表空間和表名時使用小寫字母。為了避免在區分大小寫的操作系統(如Linux、UNIX)上的導入問題,請在創建數據庫、表空間和表時使用小寫名稱。一種方便的方法是在創建數據庫、表空間或表之前,在my.cnf或my.ini文件的[mysqld]部分中添加下面這一行:

      [mysqld]

      lower_case_table_names=1

      .alter table … discard tablespace和alter table … import tabelspace不支持屬于InnoDB通用表空間中的表。

      .InnoDB表的默認行格式可以通過innodb_default_row_format配置選項進行配置。如果導入的表沒有明確定義行格式(ROW_FORMAT),或者使用了ROW_FORMAT=DEFAULT,那么如果源實例上的innodb_default_row_format設置與目標實例上的innodb_default_row_format設置不一致,可能會導致模式不匹配錯誤

      .在使用InnoDB表空間加密特性導出加密的表空間時,InnoDB除了生成一個.cfg元數據文件外,還會生成一個.cfp文件。在目標實例上執行ALTER TABLE…IMPORT TABLESPACE之前,必須將.cfp文件與.cfg文件和表空間文件一起復制到目標實例中。cfp文件包含一個傳輸密鑰和一個加密的表空間密鑰。在導入時,InnoDB使用傳輸密鑰來解密表空間密鑰。

      傳輸表空間示例

      例如1:復制一個InnoDB表到另一個實例

      這個過程演示了如何將一個普通的InnoDB表從一個正在運行的MySQL服務器實例復制到另一個正在運行的實例。可以使用相同的過程在相同的實例上執行全表恢復,只是做了一些小小的調整。

      在源實例上,如果不存在表,則創建一個表:

      mysql> use test;

      Database changed

      mysql> create table t(c1 int) engine=innodb;

      Query OK, 0 rows affected (0.12 sec)

      mysql> insert into t values(1);

      Query OK, 1 row affected (0.16 sec)

      2.在目標實例上,如果不存在表,則創建表:

      mysql> use test;

      Database changed

      mysql> create table t(c1 int) engine=innodb;

      Query OK, 0 rows affected (0.09 sec)

      3.在目標實例上,丟棄現有的表空間。(在導入表空間之前,InnoDB必須丟棄連接到接收表空間的表空間。)

      [mysql@localhost test]$ ls -lrt

      總用量 112

      -rw-r-----. 1 mysql mysql 67 3月 15 16:55 db.opt

      -rw-r-----. 1 mysql mysql 8556 3月 15 16:57 t.frm

      -rw-r-----. 1 mysql mysql 98304 3月 15 16:57 t.ibd

      mysql> alter table t discard tablespace;

      Query OK, 0 rows affected (0.17 sec)

      [mysql@localhost test]$ ls -lrt

      總用量 16

      -rw-r-----. 1 mysql mysql 67 3月 15 16:55 db.opt

      -rw-r-----. 1 mysql mysql 8556 3月 15 16:57 t.frm

      4.在源實例上,運行FLUSH TABLES…FOR EXPORT將暫停表并創建.cfg元數據文件

      mysql> flush tables t for export;

      Query OK, 0 rows affected (0.00 sec)

      [mysql@localhost test]$ ls -lrt

      總用量 116

      -rw-r-----. 1 mysql mysql 67 3月 15 16:53 db.opt

      -rw-r-----. 1 mysql mysql 8556 3月 15 16:54 t.frm

      -rw-r-----. 1 mysql mysql 98304 3月 15 16:54 t.ibd

      -rw-r-----. 1 mysql mysql 371 3月 15 17:00 t.cfg

      在InnoDB數據目錄下創建元數據(.cfg)

      注意:FLUSH TABLES …… FOR EXPORT在MySQL 5.6.6版本中可用。該語句確保對指定表的更改已刷新到磁盤,以便在實例運行時可以生成二進制表副本。當FLUSH TABLES … FOR EXPORT時,InnoDB會在表所在的數據庫目錄中生成一個.cfg文件。cfg文件中包含導入表空間文件時用于模式驗證的元數據。

      5.將.ibd文件和.cfg元數據文件從源實例復制到目標實例

      [mysql@localhost test]$ scp t.{ibd,cfg} mysql@192.168.1.243:/mysqldata/mysql/test/

      mysql@192.168.1.243’s password:

      t.ibd 100% 96KB 96.0KB/s 00:00

      t.cfg 100% 371 0.4KB/s 00:00

      [mysql@localhost test]$

      在釋放共享鎖之前必須復制.ibd與.cfg文件。

      6.在源實例上,使用unlock tables語句來釋放由flush tables … for export所獲取的鎖:

      mysql> unlock tables;

      Query OK, 0 rows affected (0.00 sec)

      7.在目標實例上,導入表空間:

      mysql> alter table t import tablespace;

      Query OK, 0 rows affected (0.15 sec)

      mysql> desc t;

      ±------±--------±-----±----±--------±------+

      | Field | Type | Null | Key | Default | Extra |

      ±------±--------±-----±----±--------±------+

      | c1 | int(11) | YES | | NULL | |

      ±------±--------±-----±----±--------±------+

      MySQL 傳輸表空間

      1 row in set (0.00 sec)

      mysql> select * from t;

      ±-----+

      | c1 |

      ±-----+

      | 1 |

      ±-----+

      1 row in set (0.00 sec)

      可以看到表t從一個實例遷移到另一個實例上。

      MySQL

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:懂得芯片生產制造,看懂制造商從小處用心的美好
      下一篇:excel表格格式設置顏色方法(excel表格的顏色怎么設置)
      相關文章
      久久亚洲中文无码咪咪爱| 亚洲成a人片在线观看播放| 亚洲日韩久久综合中文字幕| 亚洲激情视频网站| 日木av无码专区亚洲av毛片| 久久久久久亚洲精品| 亚洲AV无码乱码国产麻豆 | 亚洲综合久久一本伊伊区| 亚洲成a人不卡在线观看| 亚洲理论片中文字幕电影| 亚洲大香人伊一本线| 亚洲中文字幕无码av在线| 亚洲av极品无码专区在线观看| 亚洲国产成人91精品| 97久久国产亚洲精品超碰热| 国产色在线|亚洲| 亚洲国产成人久久精品大牛影视| 亚洲精华国产精华精华液网站| 亚洲成a∨人片在无码2023 | 亚洲欧美日韩中文高清www777| 亚洲一久久久久久久久| 亚洲精品精华液一区二区| 亚洲av无码无线在线观看 | 婷婷亚洲天堂影院| 亚洲人成电影网站国产精品 | 国产精品亚洲аv无码播放| 久久青青草原亚洲AV无码麻豆 | 亚洲精品第一国产综合精品| 亚洲伊人久久大香线蕉在观| 日韩亚洲不卡在线视频中文字幕在线观看 | 亚洲国产成人精品激情| 亚洲精品中文字幕| 国产亚洲视频在线| 国产AV无码专区亚洲AWWW | 亚洲精品无码成人| 亚洲毛片av日韩av无码 | 亚洲五月综合缴情婷婷| 鲁死你资源站亚洲av| 亚洲人成网站18禁止一区| 亚洲精品制服丝袜四区| 亚洲AV成人无码久久精品老人|