国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > MySQL > 正文

MySQL傳輸表空間總結(jié)

2024-07-24 12:31:22
字體:
供稿:網(wǎng)友
       在MySQL中如果要遷移一個表導(dǎo)另外一個服務(wù)器/環(huán)境中,常規(guī)的做法就是使用備份工具備份,比如mysqldump,然后拷貝備份到目標(biāo)服務(wù)器或者環(huán)境導(dǎo)入。如果某一個表數(shù)據(jù)量很大,導(dǎo)出dump文件很大的情況下,使用導(dǎo)出導(dǎo)入工具其實會花費不少的時間.
 
       怎么樣提高效率呢,可以有一種想法就是直接拷貝數(shù)據(jù)文件到目標(biāo)環(huán)境,當(dāng)然在早期版本中這么做是不可取的,因為會有很多關(guān)聯(lián)數(shù)據(jù)在ibdata中,InnoDB的數(shù)據(jù)存在對應(yīng)的數(shù)據(jù)字典信息,是存放在共享表空間中,無法直接剝離出來,而在5.6/5.7中,就推出了一個很不錯的特性,就是遷移表空間,可以把這個配置信息剝離出來,簡單來說就是把數(shù)據(jù)文件直接拷貝到目標(biāo)環(huán)境,在目標(biāo)端掛載即可。
 
       這樣一個操作的一個基本前提是使用了獨立表空間,開啟innodb_file_per_table.
 
>show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)
 
跨版本傳輸表空間-源端操作
我們做一個有代表意義的測試,比如把某一個表從MySQL 5.6環(huán)境遷移到MySQL 5.7環(huán)境中。
 
 我們選擇一個表users作為測試所用,數(shù)據(jù)量在2萬條左右。數(shù)據(jù)文件情況:
 
-rw-rw---- 1 mysql mysql      8602 Feb 13 23:10 users.frm
-rw-rw---- 1 mysql mysql  11534336 Mar 12 22:55 users.ibd數(shù)據(jù)情況:
 
> select count(*) from users;
+----------+
| count(*) |
+----------+
|    20001 |
+----------+
1 row in set (0.01 sec)我們開始遷移數(shù)據(jù),首先要生成一個cfg文件,導(dǎo)出配置信息。
  
-rw-rw---- 1 mysql mysql       599 Mar 13 08:17 users.cfg
-rw-rw---- 1 mysql mysql      8602 Feb 13 23:10 users.frm
-rw-rw---- 1 mysql mysql  11534336 Mar 12 22:55 users.ibd在flush table之后,這個表users就被鎖定了,DML操作是阻塞的,也就意味著遷移的過程中,是無法直接寫入數(shù)據(jù)的。
 
# strings users.cfg
mbionline.test.com    
test/users
userid
        username
DB_ROW_ID
DB_TRX_ID
DB_ROLL_PTR
PRIMARY
userid
DB_TRX_ID
DB_ROLL_PTR
        username
        username
        username
userid
idx_users
userid
        username完成之后推出會話,設(shè)置unlock tables即可。
 
> alter table users import tablespace;
ERROR 1808 (HY000): Schema mismatch (Table flags don't match, server table has 0x5 and the meta-data file has 0x1)或者下面的錯誤:
 
> alter table users import tablespace;
ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)通過錯誤信息可以發(fā)現(xiàn)和表的一個屬性有關(guān)。我們先解決問題,添加屬性row_format
 
CREATE TABLE `users` (
  `userid` int(11) unsigned NOT NULL,
  `username` varchar(64) DEFAULT NULL,
  PRIMARY KEY (`userid`),
  KEY `username` (`username`),
  KEY `idx_users` (`userid`,`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 row_format=compact;然后繼續(xù)嘗試Import tablespace操作。
 
   回到剛剛碰到的問題,為什么在5.6遷移至5.7會有報錯。
 
> alter table users import tablespace;
ERROR 1808 (HY000): Schema mismatch (Table has ROW_TYPE_DYNAMIC row format, .ibd file has ROW_TYPE_COMPACT row format.)原因就是Innodb_file_format在5.6中是Antelope,在MySQL 5.7中是Barracuda,主要是在表壓縮和行的動態(tài)格式上有所改變。更詳細(xì)的內(nèi)容可以參考:
 
https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-7.html
小結(jié)
其實這個特性在Oracle中已經(jīng)有耳熟能詳?shù)牡姆桨福琓TS,支持跨平臺,轉(zhuǎn)換字節(jié)順序,甚至可以支持基于增量備份的遷移方案,MySQL中的遷移方式和Oracle傳統(tǒng)的TTS有些相似。當(dāng)然上面的操作還可以使用Percona的工具innobackupex 來完成,我們下一篇來進(jìn)行演示。
 
    怎么能夠形象的表達(dá)這種遷移的感覺呢,我連超市里看葡萄酒都能看成 read write。

(編輯:武林網(wǎng))

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 绩溪县| 丰顺县| 涞水县| 马山县| 河曲县| 双辽市| 肃宁县| 郁南县| 黄平县| 宜丰县| 崇仁县| 板桥市| 宜兰市| 苏尼特左旗| 怀集县| 东方市| 吉水县| 海宁市| 桐庐县| 洱源县| 瑞昌市| 三河市| 太仓市| 上栗县| 金阳县| 敦化市| 黄骅市| 闽清县| 临朐县| 桂阳县| 鹤庆县| 南川市| 兴宁市| 偃师市| 武鸣县| 左云县| 华蓥市| 托克托县| 丹阳市| 永兴县| 泗水县|