Mysql 系列 | 復(fù)制表數(shù)據(jù)
需要復(fù)制的數(shù)據(jù)較少的場(chǎng)合,可以控制源表掃描行數(shù)且加鎖范圍很小的情況下,直接用?insert...select
?語(yǔ)句即可實(shí)現(xiàn)少量數(shù)據(jù)的復(fù)制。
數(shù)據(jù)量較大的情況,為了避免源表加讀鎖,需要先將數(shù)據(jù)放入外部文件,再寫(xiě)入目標(biāo)表。
mysqldump 導(dǎo)出
mysqldump -h$host -P$port -u$user --add-locks=0 --no-create-info --single-transaction --set-gtid-purged=OFF db1 t --where="a>900" --result-file=dbbk.sql
用 mysqldump 命令將數(shù)據(jù)導(dǎo)出成 insert 語(yǔ)句
可以通過(guò)添加 where 條件,實(shí)現(xiàn)導(dǎo)出部分?jǐn)?shù)據(jù)
文件保存在客戶端機(jī)器,會(huì)自動(dòng)覆蓋之前的同名文件
-add-locks=0
?表示輸出的文件結(jié)果中沒(méi)有?LOCK TABLES t WRITE;
-no-create-info
?表示不導(dǎo)出表結(jié)果-single-transaction
?表示導(dǎo)出時(shí)不對(duì)表 db1.t 加鎖,使用?START TRANSACTIONWITH CONSISTENTSNAPSHOT
?的方法-set-gtid-purged=off
?表示不輸出 gtid 相關(guān)的信息-result-file
?表示輸出文件的路徑將數(shù)據(jù)寫(xiě)入目標(biāo)數(shù)據(jù)庫(kù) db2 中,
mysql -h$host -P$port -u$user db2 -e "source dbbk.sql"
導(dǎo)出 CSV 文件
select * from db1.t where a>900 into outfile 'dbbk.csv';
導(dǎo)出的 csv 文件保存在數(shù)據(jù)庫(kù)服務(wù)端,且每次只能導(dǎo)出一張表的數(shù)據(jù)
into outfile
?表示輸出文件的位置,受參數(shù)?secure_file_priv
?的限制secure_file_priv=empty,表示不限制文件生成的位置,不建議??!
secure_file_priv=具體路徑,表示生成的文件只能放在指定目錄或子目錄
secure_file_priv=NULL,表示禁止在 Mysql 實(shí)例中進(jìn)行導(dǎo)出 csv 操作
如果服務(wù)器存在同名文件會(huì)報(bào)錯(cuò),不會(huì)自動(dòng)覆蓋
這種方式只會(huì)導(dǎo)出數(shù)據(jù),沒(méi)有表結(jié)構(gòu)
將數(shù)據(jù)寫(xiě)入目標(biāo) db2.t 表中,以換行符為每一行數(shù)據(jù)的分隔符,
load data infile 'dbbk.csv' into table db2.t;
物理拷貝
innodb 表都對(duì)應(yīng)有?
.frm
?和?.ibd
?文件,但是直接拷貝這兩文件不管用?。?!除了物理文件外,還需要在數(shù)據(jù)字典中注冊(cè),否則系統(tǒng)不會(huì)識(shí)別Mysql5.6 引入了可傳輸表空間(transportable tablespace)的方法,通過(guò)導(dǎo)出后導(dǎo)入表空間的方式實(shí)現(xiàn)
create table t2 like t1
,創(chuàng)建一個(gè)相同表結(jié)構(gòu)的空表 t2alter table t2 discard tablespace
,t2.ibd 文件會(huì)被刪除flush table t1 for export
,生成 t1.cfg 文件,此時(shí)表 t1 只讀,直到 unlock tablescp t1.cfg t2.cfg cp t1.ibd t2.ibd
,得到 t2.cfg 和 t2.ibd,注意文件權(quán)限,Mysql需要可讀寫(xiě)unlock tables
,t1.cfg 文件會(huì)被刪除alter table t2 import tablespace
,將 t2.ibd 作為表 t2 的新的表空間物理拷貝方式,比起前兩種速度最快
只能拷貝全表數(shù)據(jù),而且需要登陸到服務(wù)器進(jìn)行操作
源表和目標(biāo)表的引擎必須都是 innodb
三種方式各有利弊,選擇合適的就是最好的
鏈接:https://www.dianjilingqu.com/613844.html