日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > 数据库 >内容正文

数据库

mysql的innodb表生成的物理文件_MySQL innodb表使用表空间物理文件复制或迁移表

發(fā)布時(shí)間:2024/1/23 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql的innodb表生成的物理文件_MySQL innodb表使用表空间物理文件复制或迁移表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

MySQL InnoDB引擎的表通過(guò)拷貝物理文件來(lái)進(jìn)行單表或指定表的復(fù)制,可以想到多種方式,今天測(cè)試其中2種:

將innodb引擎的表修改為Myisam引擎,然后拷貝物理文件

直接拷貝innodb的表空間文件(前提是獨(dú)立表空間(默認(rèn),通過(guò)show variables like 'innodb_file_per_table' 查看))進(jìn)行復(fù)制

一、修改引擎

1.創(chuàng)建一張innodb引擎的表,并插入測(cè)試數(shù)據(jù);

create table test_tb(id int primary key,c1 varchar(20)) ENGINE=InnoDB DEFAULT CHARSET=utf8;insert into test_tb select 1,'c1';insert into test_tb select 2,'c2';

2. 修改引擎

alter table test_tb engine=myisam;

showcreate table test_tb\G

3. 將物理文件拷貝至目標(biāo)庫(kù)

cd /data/mysql/mysql3307/data/cd testdbllcd ../testdb2/

pwdll

cp ../testdb/test_tb.*.ll

4.修改權(quán)限

chown -R mysql:mysql .

5. 查看結(jié)果

記錄和源庫(kù)一致。

6. 將源庫(kù)及目標(biāo)庫(kù)的表引擎修改為innodb

alter table testdb.test_tb engine=innodb;alter table testdb2.test_tb engine=innodb;

二、拷貝.idb物理表空間文件

1.? 創(chuàng)建一張innodb的表,為了測(cè)試大表的情況,我創(chuàng)建了一張800W記錄的表,占用940M空間

/*先創(chuàng)建快速生成連續(xù)數(shù)的表及存儲(chǔ)過(guò)程*/

--建表

CREATE TABLE`test_tb2` (

`id`int(11) DEFAULT NULL,

`aa`varchar(20) DEFAULT NULL,

`bb`varchar(20) DEFAULT NULL,

`cc`varchar(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;--創(chuàng)建過(guò)程

DELIMITER $$CREATE PROCEDURE `sp_test_tb2`(cnt INT)BEGIN

DECLARE i INT DEFAULT 1;TRUNCATE TABLEtest_tb2;INSERT INTO test_tb2 SELECT concat(i,'a'),concat(i,'b'),concat(i,'c') ;WHILE i

INSERT INTO test_tb2 SELECT id + i,concat(id+i,'a'),concat(id+i,'b'),concat(id+i,'c') FROM test_tb2 WHERE id + i<=cnt;SET i = i*2;END;END WHILE;END$$

DELIMITER ;--生成8000000條記錄

call sp_test_tb2(8000000);select count(*) from test_tb2;

2. 在目標(biāo)庫(kù)創(chuàng)建相同的表名

mysql> usetestdb2;CREATE TABLE`test_tb2` (

`id`int(11) DEFAULT NULL,

`aa`varchar(20) DEFAULT NULL,

`bb`varchar(20) DEFAULT NULL,

`cc`varchar(20) DEFAULT NULL,

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

3. 刪除目標(biāo)表的表空間

alter table test_tb2 discard tablespace;

此時(shí)目標(biāo)庫(kù)的test_tb2表近剩下數(shù)據(jù)定義文件,表空間文件已刪除

4. 拷貝源庫(kù)的idb文件

/** 需先f(wàn)lush table */

flush table test_tb2 for export ;

之后拷貝(會(huì)生成一個(gè)cfg文件 也一并拷貝過(guò)去)

拷貝完成后需解鎖test_tb2表

unlock tables;

5. 修改表空間文件權(quán)限

6. 目標(biāo)表導(dǎo)入表空間數(shù)據(jù)(記錄較多的時(shí)候需要一點(diǎn)時(shí)間)

alter table test_tb2 import tablespace;

7. 查看導(dǎo)入結(jié)果

結(jié)果與源表一致

Tips:

以上2種處理方式都需要源表無(wú)寫入更新等操作下進(jìn)行,且需要flush tables 將數(shù)據(jù)刷新到物理磁盤的文件上。所以建議先鎖表或停止業(yè)務(wù),待拷貝文件后再恢復(fù)寫入等操作。

耿小廚已開通個(gè)人微信公眾號(hào),想進(jìn)一步溝通或想了解其他文章的同學(xué)可以關(guān)注我

總結(jié)

以上是生活随笔為你收集整理的mysql的innodb表生成的物理文件_MySQL innodb表使用表空间物理文件复制或迁移表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。