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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

表迁移工具的选型-复制ibd的方法-传输表空间

發布時間:2025/7/14 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 表迁移工具的选型-复制ibd的方法-传输表空间 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.1.?場景

有的時候開放人員自己的庫需要幫忙導一些數據,但是表的數據量又很大。雖然說使用mysqldump或mysqlpump也可以導。但是這耗時需要比較久。

記得之前建議開放人員可以直接使用navicat去抽取測試庫的數據。但是發現但遇到大表的時候,發現navicat會卡死。

1.2.?使用方法

使用拷貝*.ibd的方法。

注意:使用這種方法會鎖表。因為是測試庫,對服務器有一些影響還是可以接受的。

1.3.?先決條件

前提必須開啟innodb_file_per_table選項,并且使用InnoDB存儲引擎:

1 set global innodb_file_per_table = 1;

?

1.4.?制造大表

下面我們制造表數據,下面模擬的數據比較小,主要是為了節省時間:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 USE test; -- 創建表t1 DROP TABLE IF EXISTS t1; CREATE TABLE t1( ??id BIGINT unsigned NOT NULL AUTO_INCREMENT, ??x VARCHAR(500) NOT NULL, ??y VARCHAR(500) NOT NULL, ??PRIMARY KEY(id) ); -- 創建添加數據存儲過程 DROP PROCEDURE insert_batch; DELIMITER // CREATE PROCEDURE insert_batch() begin ??DECLARE num INT; ??SET num=1; ??WHILE num < 1000000 DO ????IF (num%10000=0) THEN ??????COMMIT; ????END IF; ????INSERT INTO t1 VALUES(NULL, REPEAT('X', 500), REPEAT('Y', 500)); ????SET num=num+1; ??END WHILE; ??COMMIT; END // DELIMITER ; -- 添加數據 CALL insert_batch(); DROP PROCEDURE insert_batch;

查看數據大小情況(磁盤上的數據大小)

1 2 3 ls -lh /u02/data/test/t1.* -rw-r----- 1 mysql mysql 8.5K Mar 10 13:54 /u02/data/test/t1.frm -rw-r----- 1 mysql mysql 1.2G Mar 10 14:20 /u02/data/test/t1.ibd

查看真實的大小情況

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 select count(*) from t1; +----------+ | count(*) | +----------+ |?? 999999 | +----------+ SELECT table_name, ??data_length/1024/1024 AS 'data_length(MB)', ??index_length/1024/1024 AS 'index_length(MB)', ??(data_length + index_length)/1024/1024 AS 'total(MB)' FROM information_schema.tables WHERE table_schema='test' ??AND table_name = 't1'; +------------+-----------------+------------------+---------------+ | table_name | data_length(MB) | index_length(MB) | total(MB)???? | +------------+-----------------+------------------+---------------+ | t1???????? |?? 1048.00000000 |?????? 0.00000000 | 1048.00000000 | +------------+-----------------+------------------+---------------+

從上面可以看出在磁盤上的數據大小是1.2G,而實際的大小才1048MB(估計值),實際情況會比上面的數據大很多。

1.5.?將test.t1遷移到test2.t1中

1、test2庫中創建和test.t1相同的表結構

1 2 3 CREATE DATABASE test2; USE test2; CREATE TABLE t1 LIKE test.t1;

2、廢棄test2.t1表空間,等待新表空間導入

1 2 USE test2; ALTER TABLE t1 DISCARD TABLESPACE;

3、鎖表導出test.t1表元數據

1 2 USE test; FLUSH TABLES t1 FOR EXPORT;

4、將test.t1表*.ibd和*.cfg文件拷貝到test2庫中

1 2 3 4 5 6 cp t1.cfg /u02/data/test2/ cp t1.ibd /u02/data/test2/ ll -h /u02/data/test2/ -rw-r----- 1 root??root?? 424 Mar 10 14:41 t1.cfg -rw-r----- 1 mysql mysql 8.5K Mar 10 14:33 t1.frm -rw-r----- 1 root??root??1.2G Mar 10 14:41 t1.ibd

5、釋放test.t1鎖

1 2 USE test; UNLOCK TABLES;

6、test2導入t1數據

1 2 3 chown -R mysql:mysql /u02/data/test2 USE test2; ALTER TABLE t1 IMPORT TABLESPACE;

7、查看test2.t1數據

1 2 3 4 5 6 7 USE test2; SELECT COUNT(*) FROM t1; +----------+ | COUNT(*) | +----------+ |?? 999999 | +----------+

?

1.6.?總結

如果是數據量比較大,并且可以忍受對服務器有一點影響的,就可以考慮使用這種方法來處理。并且需要注意的是最好遷移的數據庫版本是相同的。

轉載于:https://www.cnblogs.com/DataArt/p/10231920.html

總結

以上是生活随笔為你收集整理的表迁移工具的选型-复制ibd的方法-传输表空间的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。