共計(jì) 2870 個(gè)字符,預(yù)計(jì)需要花費(fèi) 8 分鐘才能閱讀完成。
本篇內(nèi)容介紹了“mysql 共享表空間的擴(kuò)容、收縮和遷移”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓丸趣 TV 小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
一. 擴(kuò)容 innodb 文件
1. 關(guān)閉 mysql db
# /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock shutdown
2. 打開(kāi)參數(shù)文件
innodb_data_file_path = ibdata1:512M:autoextend
將 ibdata1 調(diào)整至接近實(shí)際大小,并在后面追加新的文件:
innodb_data_file_path = ibdata1:512M;ibdata2:512M:autoextend
3. 啟動(dòng)數(shù)據(jù)庫(kù)
# /usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my3307.cnf –user=mysql
二. 縮小表空間
共享表空間文件, 一旦擴(kuò)展無(wú)法自動(dòng)縮小, 需要通過(guò)手工縮小
1. 導(dǎo)出全部數(shù)據(jù)庫(kù)
# /usr/local/mysql/bin/mysqldump -uroot -p -A -S /tmp/mysql3307.sock /tmp/3307all.sql
Enter password:
2. 關(guān)閉 mysql db
# /usr/local/mysql/bin/mysqladmin -S /tmp/mysql3307.sock shutdown
3. 刪除 mysql 的數(shù)據(jù)目錄
rm -rf /home/mysql3307/mysql3307/*
4. 初始化 mysql
/usr/local/mysql/bin/mysqld –defaults-file=/etc/my3307.cnf –initialize-insecure –basedir=/usr/local/mysql –datadir=/home/mysql3307/mysql3307 –user=mysql
5. 啟動(dòng) mysql
/usr/local/mysql/bin/mysqld_safe –defaults-file=/etc/my3307.cnf –user=mysql
6. 導(dǎo)入數(shù)據(jù)
source /tmp/3307all.sql
三.innodb 表空間遷移
原庫(kù)表結(jié)構(gòu):
點(diǎn)擊 (此處) 折疊或打開(kāi)
CREATE TABLE `wwj`.`t1` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
alter table wwj.t1 add index idx_name (name) ;
insert into wwj.t1 values(1, wwj
1. 在目標(biāo)實(shí)例上創(chuàng)建一個(gè)相同的表
點(diǎn)擊 (此處) 折疊或打開(kāi)
CREATE TABLE `wwj2`.`t1` (
`id` INT NOT NULL,
`name` VARCHAR(45) NULL,
PRIMARY KEY (`id`));
2. 在目標(biāo)庫(kù)上執(zhí)行 ALTER TABLE t DISCARD TABLESPACE;
ALTER TABLE t1 DISCARD TABLESPACE;
– discard 的意思就是從數(shù)據(jù)庫(kù) detached, 會(huì)刪除 ibd 文件,保留 frm 文件。
– 也就意味著,你可以對(duì) frm 文件操作,比如:rename table,drop table,但是不能對(duì) ibd 文件操作,比如:dml
3. 在源庫(kù)上執(zhí)行 FLUSH TABLES t FOR EXPORT; 生成.cfg 文件
flush tables t1 for export;
-rw-r—–. 1 mysql mysql 67 Mar 24 06:59 db.opt
-rw-r—–. 1 mysql mysql 467 Mar 24 18:32 t1.cfg
-rw-r—–. 1 mysql mysql 8586 Mar 24 06:59 t1.frm
-rw-r—–. 1 mysql mysql 114688 Mar 24 06:59 t1.ibd
此時(shí),.cfg 文件在 InnoDB 的 data directory 中
flush tables .. for export 會(huì)加鎖,這時(shí)候,千萬(wàn)不能退出終端或 session,否則加鎖無(wú)效且.cfg 文件自動(dòng)刪除。
4. 講.ibd 文件和.cfg 文件拷貝到目標(biāo)實(shí)例
[root@mysql5 wwj]# cp t1.cfg /home/mysql3306/mysql3306/wwj2
[root@mysql5 wwj]# cp t1.ibd /home/mysql3306/mysql3306/wwj2
修改權(quán)限
5. 在源庫(kù)執(zhí)行 unlock tables;
mysql UNLOCK TABLES;
Query OK, 0 rows affected (0.00 sec)
6. 在目標(biāo)庫(kù)執(zhí)行 ALTER TABLE t IMPORT TABLESPACE;
第一次執(zhí)行: 在目標(biāo)庫(kù)追加 index 后成功
mysql alter table t1 import tablespace;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect…
Connection id: 3
Current database: wwj2
ERROR 1808 (HY000): Schema mismatch (Number of indexes don t match, table has 1 indexes but the tablespace meta-data file has 2 indexes)
innodb 可傳輸表空間注意事項(xiàng)
—————————–
必須開(kāi)啟 innodb_file_per_table
當(dāng)這個(gè)表處于 quiesced 狀態(tài), 甚至不能被 select
兩邊實(shí)例的 page size 一致
5.7 版本之前,不支持分區(qū)表 transport
外鍵相關(guān)的表,必須設(shè)置 foreign_key_checks=0 才能成功
ALTER TABLE … IMPORT TABLESPACE 不需要.cfg metadata file . 但是,這樣的話,MySQL 就不會(huì)對(duì) schema 進(jìn)行 verificate
5.6 以及更高版本,import export 版本必須在同一個(gè) series
在 replication 環(huán)境中,master slave 都必須開(kāi)啟 innodb_file_per_table
對(duì)于 InnoDB general tablespace,不支持 discard import tablespace
如果兩邊服務(wù)器的 table row_format 設(shè)置的不一樣,會(huì)導(dǎo)致 schema mismatch error
加密過(guò)的 InnoDB tablespace 必須要拷貝.cfp 文件
四.MyISAM 表空間遷移
1. flush table with read lock
2. 直接復(fù)制數(shù)據(jù)文件和表結(jié)構(gòu)文件
“mysql 共享表空間的擴(kuò)容、收縮和遷移”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編將為大家輸出更多高質(zhì)量的實(shí)用文章!