国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MySQL數據遷移之表空間傳輸

IT那活兒 / 3837人閱讀
MySQL數據遷移之表空間傳輸
一. 簡 介

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


二. 環 境

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

  • 兩個數據庫的數據都采用靜態加密

  • 使用傳輸表空間功能將database1數據庫中的加密表“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表的更新已經刷新到磁盤,以便在服務器運行時制作表副本,在database1中:

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

執行該命令后,將在 MySQL 數據目錄中創建兩個附加文件(.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

執行完第一步后,需要將表文件(.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
mysql@192.168.0.22s 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上創建表結構

在目標數據庫database2上創建空表

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”上添加了加密。否則,在導入過程中會出現以下錯誤信息

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 上創建空表后,建產生兩個文件(.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. 復制表空間到數據文件目錄

將表空間文件(從database1)拷貝到數據庫文件夾下的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 文件存在,如果沒有,導入將無法進行,并且會出現以下錯誤

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. 導入表空間

在目標數據庫運行一下命令進行導入

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)


四. 總 結

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

END


更多精彩干貨分享

點擊下方名片關注

IT那活兒

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

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

相關文章

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

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

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

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

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

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

    Tecode 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

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