成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL數(shù)據(jù)遷移之表空間傳輸

IT那活兒 / 3846人閱讀
MySQL數(shù)據(jù)遷移之表空間傳輸
一. 簡 介

日常工作中經(jīng)常遇到將一個InnoDB表從一個實例,移動或者復制到另一個實例,其實有很多的方法,在5.6之前常用的是通過物理或者邏輯備份來實現(xiàn)。在MySQL 5.6.6版本中引入了一種基于表空間快速遷移的功能(類似Oracle TTS),我們可以直接將表空間復制到另一臺服務器數(shù)據(jù)庫中。這對于大表來說是一個非常有用的方法。可傳輸表空間機制比任何其他導出和導入表的方法都快,因為只需要使用傳統(tǒng)的 Linux 命令(cp、scp、rsync)將數(shù)據(jù)文件復制到目標位置即可。


二. 環(huán) 境

  • 準備兩臺數(shù)據(jù)庫服務器——database1 和database2
  • 在兩臺服務器上都運行MySQL 5.7.32版本的數(shù)據(jù)庫

  • 兩個數(shù)據(jù)庫的數(shù)據(jù)都采用靜態(tài)加密

  • 使用傳輸表空間功能將database1數(shù)據(jù)庫中的加密表“test.enc_data_test”復制到database2

mysql> select @@version, @@version_commentG
*************************** 1. row ***************************
        @@version: 5.7.32-log
@@version_comment: MySQL Community Server (GPL)
1 row in set (0.00 sec)

mysql> show create table test.enc_data_testG
*************************** 1. row ***************************
       Table: enc_data_test
Create Table: CREATE TABLE `enc_data_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(16) DEFAULT NULL,
  `exec_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=165520 DEFAULT CHARSET=utf8 ENCRYPTION=Y
1 row in set (0.00 sec)

三. 遷移步驟

1. 準備源表

確保enc_data_test表的更新已經(jīng)刷新到磁盤,以便在服務器運行時制作表副本,在database1中:

mysql> flush table enc_data_test for export;
Query OK, 0 rows affected (0.00 sec)

執(zhí)行該命令后,將在 MySQL 數(shù)據(jù)目錄中創(chuàng)建兩個附加文件(.cfg 和 .cfp)

-rw-r----- 1 mysql mysql 61 Jun 17 09:24 db.opt
-rw-r----- 1 mysql mysql 454 Jun 17 09:43 enc_data_test.cfg
-rw-r----- 1 mysql mysql 100 Jun 17 09:43 enc_data_test.cfp
-rw-r----- 1 mysql mysql 8626 Jun 17 09:37 enc_data_test.frm
-rw-r----- 1 mysql mysql 98304 Jun 17 09:43 enc_data_test.ibd
2. 將 .ibd、.cfg 和 .cfp 文件從 database1 復制到 database2

執(zhí)行完第一步后,需要將表文件(.ib、.cfg、.cfp)復制到目標服務器database2

[mysql@db01 test]$ scp -r enc_data_test.ibd enc_data_test.cfp enc_data_test.cfg 192.168.0.22:/home/mysql
[email protected] password:
enc_data_test.ibd 100% 96KB 6.9MB/s 00:00
enc_data_test.cfp 100% 100 37.5KB/s 00:00
enc_data_test.cfg 100% 454 148.5KB/s 00:00
3. 在 database1 上解鎖表

將表文件復制到目標服務器 (database2) 后,需要在 database1 上解鎖表以允許對其操作

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

4. 在database2上創(chuàng)建表結構

在目標數(shù)據(jù)庫database2上創(chuàng)建空表

mysql> CREATE TABLE `enc_data_test` (
    -> `id` int(11) NOT NULL AUTO_INCREMENT,
    -> `name` varchar(16) DEFAULT NULL,
    -> `exec_time` datetime DEFAULT CURRENT_TIMESTAMP,
    -> PRIMARY KEY (`id`)
    -> ) ENGINE=InnoDB AUTO_INCREMENT=165520 DEFAULT CHARSET=utf8 ENCRYPTION=Y;
Query OK, 0 rows affected (0.02 sec)

確保表結構“ENCRYPTION=Y”上添加了加密。否則,在導入過程中會出現(xiàn)以下錯誤信息

mysql> alter table enc_data_test import tablespace;
ERROR 1808 (HY000): Schema mismatch (Encryption attribute in the file does not match the dictionary.)

5. 刪除.idb文件

在 database2 上創(chuàng)建空表后,建產(chǎn)生兩個文件(.frm 和 .ibd)。需要刪除 .ibd 文件,以便從 database1復制表空間過來

[mysql@db02 test]$ ll
total 112
-rw-r----- 1 mysql mysql 61 Jun 17 09:24 db.opt
-rw-r----- 1 mysql mysql 8626 Jun 17 09:53 enc_data_test.frm
-rw-r----- 1 mysql mysql 98304 Jun 17 09:53 enc_data_test.ibd

mysql> alter table enc_data_test discard tablespace;
Query OK, 0 rows affected (0.13 sec)

[mysql@db02 test]$ ls -lrth
total 16K
-rw-r----- 1 mysql mysql 61 Jun 17 09:24 db.opt
-rw-r----- 1 mysql mysql 8.5K Jun 17 09:53 enc_data_test.frm

6. 復制表空間到數(shù)據(jù)文件目錄

將表空間文件(從database1)拷貝到數(shù)據(jù)庫文件夾下的data目錄下

[mysql@db02 test]$ cp -r /home/mysql/enc_data_test.ibd ./
[mysql@db02 test]$ cp -r /home/mysql/enc_data_test.cf* ./
[mysql@db02 test]$ ls -lrth
total 120K
-rw-r----- 1 mysql mysql 61 Jun 17 09:24 db.opt
-rw-r----- 1 mysql mysql 8.5K Jun 17 09:53 enc_data_test.frm
-rw-r----- 1 mysql mysql 96K Jun 17 10:01 enc_data_test.ibd
-rw-r----- 1 mysql mysql 100 Jun 17 10:01 enc_data_test.cfp
-rw-r----- 1 mysql mysql 454 Jun 17 10:01 enc_data_test.cfg

確保在.cfp 文件存在,如果沒有,導入將無法進行,并且會出現(xiàn)以下錯誤

mysql> alter table enc_data_test import tablespace;
ERROR 1808 (HY000): Schema mismatch (Table is in an encrypted tablespace, but the encryption meta-data file cannot be found while importing.)
7. 導入表空間

在目標數(shù)據(jù)庫運行一下命令進行導入

mysql> alter table enc_data_test import tablespace;
Query OK, 0 rows affected (0.02 sec)
mysql> select count(*)from enc_data_test;
+----------+
| count(*) |
+----------+
| 1000 |
+----------+
1 row in set (0.00 sec)

遷移過程與正常的 InnoDB 表空間導出/導入過程非常相似。但是,在這里需要注意以下兩點:

  • 必須將 .cfp 文件復制到目標服務器。

  • 遷移表需要加密(ENCRYPTION = Y)


四. 總 結

在實際環(huán)境中,對部分大表進行遷移,業(yè)務中斷時間短,使用mysqldump進行導出,然后重新導入到其它環(huán)境,效率緩慢;則可以采用傳輸表空間方法,提高效率縮短時間,滿足業(yè)務需求。

END


更多精彩干貨分享

點擊下方名片關注

IT那活兒

文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://systransis.cn/yun/129873.html

相關文章

  • Activiti6之表結構分析-引擎配置及流程部署

    摘要:如圖流程引擎創(chuàng)建完成后,只會對進行操作,屬性數(shù)據(jù)表存儲整個流程引擎級別的數(shù)據(jù)初始化表結構時,會默認插入四條記錄,流程部署測試流程部署,先把上面的流程引擎配置的注解改為。如圖資源流程定義數(shù)據(jù)表這里面存放的就是我們部署的資源元數(shù)據(jù)信息。 關于activiti是什么,我這里就不多說了,我們直接上路,O(∩_∩)O哈哈~ 引擎配置 配置方式有好幾種:1): /** * 獲取默認的流程引擎實例...

    xorpay 評論0 收藏0
  • 阿里云如何打破Oracle遷移上云的壁壘

    摘要:摘要第九屆中國數(shù)據(jù)庫技術大會,阿里云數(shù)據(jù)庫產(chǎn)品專家蕭少聰帶來以阿里云如何打破遷移上云的壁壘為題的演講。于是,阿里云給出了上面的解決方案。 摘要: 2018第九屆中國數(shù)據(jù)庫技術大會,阿里云數(shù)據(jù)庫產(chǎn)品專家蕭少聰帶來以阿里云如何打破Oracle遷移上云的壁壘為題的演講。Oracle是指數(shù)據(jù)庫管理系統(tǒng),面對Oracle遷移上云的壁壘,阿里云如何能夠打破它呢?本文提出了Oracle 到云數(shù)據(jù)庫P...

    chavesgu 評論0 收藏0
  • 跨云遷移過程中的數(shù)據(jù)同步及一致性校驗實踐(一)

    摘要:通過對一些客戶的跨云遷移過程進行總結,發(fā)現(xiàn)普遍存在的挑戰(zhàn)有三點數(shù)據(jù)完整性和一致性挑戰(zhàn)。簡而言之,跨云遷移過程中的數(shù)據(jù)一致性主要就集中在存量數(shù)據(jù)的遷移如何保證一致。前言隨著互聯(lián)網(wǎng)業(yè)務發(fā)展對容災以及對訪問加速、多供應商成本控制等需求的產(chǎn)生,互聯(lián)網(wǎng)公司的多云部署和跨云遷移逐漸成為剛需,而在此過程中,最困擾運維和研發(fā)人員的就是數(shù)據(jù)的遷移和同步。俗語說 上屋搬下屋,搬灑一籮谷 ,在業(yè)務的遷移過程中一旦...

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<