本文目錄1、使用背景
1.可傳輸表空間基本流程
2.使用前提條件/限制
2、技術要點
3、實施步驟
1.實驗環境
2.源端操做
1) 造測試數據並模擬小壓力
2) 備份單庫數據
3) 備份表結構
4) 批量生成可傳輸表空間命令
3.目標端操做
1) 備份數據恢復準備
2) 恢復表結構至目標端
3) 捨棄目標端對應表空間文件
4) 拷貝表數據及配置文件到目標端sbtest庫數據目錄
5) 執行導入表空間文件操做
4.創建複製(多源複製)
4、參考連接
Keywords:
MySQL xtrabackup Transportable Tablespaces
MySQLdump multi-source replication
1、使用背景
MySQL在5.7之後引入了多源複製(Multi-Source)功能,可用於將多個單獨的數據庫匯聚到一個數據庫實例下,方便用戶進行數據分析、彙總或推送至其餘數據庫平臺。早期針對匯聚場景初始化各源端數據到匯聚庫,爲了提高效率一般會使用使用開源並行邏輯導入導出工具myloader/mydumper進行數據導入/導出,當源端多實例多庫數據量較大(100G以上)狀況下,使用myloader/mydumper花費的時間則可能沒法知足時間要求,須要考慮是否有更高效的方式進行數據初始化同步操做,以及當複製通道異常時更便捷快速修復。
ps:多源複製使用物理備份(xtrabackup)作數據初始化時,常規方式只有第一個通道可作覆蓋還原,後續通道需邏輯還原或用其餘方式還原,如該方案所描述的方式。
MySQL在5.6之後支持了可傳輸表空間,以及Xtrabackup針對該功能在備份時提供了一個對應參數export,該參數支持對InnoDB存儲引擎表的備份數據export轉換,且與常規備份操做同樣可生成備份時間點的binlog信息(GTID信息),結合這兩特性能夠更高效和快速的方式實現多庫數據匯聚的初始導入操做。
▽場景架構圖以下▽
html
1.可傳輸表空間基本流程
先簡單梳理一下可傳輸表空間基本流程:
mysql
export tablespace
))
單純使用可傳輸表空間功能沒法記錄對應表的事務點,也就是若是須要進行匯聚複製同步,沒法知道從binlog哪一個文件的哪一個position點進行數據同步,這也就是須要引入xtrabackup及export功能的緣由。備份元數據信息自己會記錄複製同步點信息。
2.使用前提條件/限制git
2、技術要點github
sysbench
源端造測試數據並模擬壓力mysqldump
備份源端表結構concat()
拼接批量可傳輸表空間SQLxtrabackup
備份源端單庫(部分庫)數據Transportable Tablespace
可傳輸表空間功能Multi-source Replication
多源複製mysql-error.log
錯誤信息日誌校驗ANALYZE TABLE
更新統計信息
3、實施步驟
1.實驗環境
算法
2.源端操做
sql
使用sysbench建立4張各100W記錄的測試表,並使用2個併發持續模擬業務壓力: ## 造數據 shell> /opt/sysbench-0.9/sysbench/sysbench --test=/opt/sysbench-0.9/sysbench/tests/db/oltp.lua --oltp-table-size=1000000 --oltp-tables-count=4 --mysql-user=sysbench --mysql-password=sysbench --mysql-host=10.186.60.16 --mysql-port=3333 prepare ## 模擬小壓力 shell> /opt/sysbench-0.9/sysbench/sysbench --test=/opt/sysbench-0.9/sysbench/tests/db/oltp.lua --oltp-table-size=1000000 --oltp-tables-count=4 --mysql-user=sysbench --mysql-password=sysbench --mysql-host=10.186.60.16 --mysql-port=3333 --num-threads=2 --max-requests=0 --max-time=0 --report-interval=1 run
使用xtrabackup備份工具對源端sbtest庫進行單庫備份,保存至/data/mysql/backup/目錄下:shell
shell> innobackupex --databases=sbtest /data/mysql/backup/
爲可傳輸表空間作準備,將源端表結構備份並後續在目標端導入:數據庫
shell> cd /data/mysql/backup shell> mysqldump --no-data --set-gtid-purged=off sbtest>sbtest_schema.sql
使用concat函數拼接出批量DISCARD TABLESPACE的SQL:架構
shell> cd /data/mysql/backup shell> mysql -ssre "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' DISCARD TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='sbtest';" >discard_tbs.sql ## 輸出文件以下所示 shell> cat discard_tbs.sql ALTER TABLE sbtest.sbtest1 DISCARD TABLESPACE; ALTER TABLE sbtest.sbtest2 DISCARD TABLESPACE; ALTER TABLE sbtest.sbtest3 DISCARD TABLESPACE; ALTER TABLE sbtest.sbtest4 DISCARD TABLESPACE;
使用concat函數拼接出批量IMPORT TABLESPACE的SQL:併發
shell> cd /data/mysql/backup shell> mysql -ssre "select concat('ALTER TABLE ',TABLE_SCHEMA,'.',TABLE_NAME,' IMPORT TABLESPACE;') from information_schema.tables where TABLE_SCHEMA='sbtest';">import_tbs.sql ## 輸出文件以下所示 shell> cat import_tbs.sql ALTER TABLE sbtest.sbtest1 IMPORT TABLESPACE; ALTER TABLE sbtest.sbtest2 IMPORT TABLESPACE; ALTER TABLE sbtest.sbtest3 IMPORT TABLESPACE; ALTER TABLE sbtest.sbtest4 IMPORT TABLESPACE;
拷貝源端/data/mysql/backup目錄下生成的全部相關文件到目標端/data/mysql/backup下
3.目標端操做
對備份數據進行apply-log日誌應用及將數據進行export轉換生成配置文件:
shell> innobackupex --apply-log --export /data/mysql/backup/2019-02-22_15-26-20/ ## export執行完後sbtest庫下備份文件以下所示 ## exp結尾的文件爲Percona針對Percona XtraDB作export的配置文件 ## cfg結尾的文件爲Percona針對MySQL可傳輸表空間export的配置文件 shell> ll /data/mysql/backup/2019-02-22_15-26-20/sbtest/ 總用量 999556 -rw-r----- 1 root root 67 2月 22 15:40 db.opt -rw-r--r-- 1 root root 569 2月 22 15:53 sbtest1.cfg -rw-r----- 1 root root 16384 2月 22 15:53 sbtest1.exp -rw-r----- 1 root root 8632 2月 22 15:40 sbtest1.frm -rw-r----- 1 root root 255852544 2月 22 15:53 sbtest1.ibd -rw-r--r-- 1 root root 569 2月 22 15:53 sbtest2.cfg -rw-r----- 1 root root 16384 2月 22 15:53 sbtest2.exp -rw-r----- 1 root root 8632 2月 22 15:40 sbtest2.frm -rw-r----- 1 root root 255852544 2月 22 15:53 sbtest2.ibd -rw-r--r-- 1 root root 569 2月 22 15:53 sbtest3.cfg -rw-r----- 1 root root 16384 2月 22 15:53 sbtest3.exp -rw-r----- 1 root root 8632 2月 22 15:40 sbtest3.frm -rw-r----- 1 root root 255852544 2月 22 15:53 sbtest3.ibd -rw-r--r-- 1 root root 569 2月 22 15:53 sbtest4.cfg -rw-r----- 1 root root 16384 2月 22 15:53 sbtest4.exp -rw-r----- 1 root root 8632 2月 22 15:40 sbtest4.frm -rw-r----- 1 root root 255852544 2月 22 15:53 sbtest4.ibd
將源端表結構在目標端數據庫建立:
shell> cd /data/mysql/backup ## 手工建立sbtest庫 shell> mysql -e "create database sbtest;" ## 導入源端對應的表結構 shell> mysql sbtest< sbtest_schema.sql ## 驗證 shell> mysql -e "show tables from sbtest;"
shell> cd /data/mysql/backup shell> mysql <discard_tbs.sql ## 執行後效果以下所示,ibd文件已被捨棄 shell> ll /data/mysql/data/sbtest/ -rw-r----- 1 mysql mysql 67 2月 22 15:58 db.opt -rw-r----- 1 mysql mysql 8632 2月 22 15:58 sbtest1.frm -rw-r----- 1 mysql mysql 8632 2月 22 15:58 sbtest2.frm -rw-r----- 1 mysql mysql 8632 2月 22 15:58 sbtest3.frm -rw-r----- 1 mysql mysql 8632 2月 22 15:58 sbtest4.frm
## 拷貝ibd文件 shell> cp /data/mysql/backup/2019-02-22_15-26-20/sbtest/*.ibd /data/mysql/data/sbtest/ ## 拷貝cfg文件 shell> cp /data/mysql/backup/2019-02-22_15-26-20/sbtest/*.cfg /data/mysql/data/sbtest/ ## 修改文件權限爲mysql用戶 shell> chown -R mysql:mysql /data/mysql/data/sbtest
shell> cd /data/mysql/backup ## 出現Warning爲可傳輸表空間正常輸出,可忽略,詳情可參考下圖所示note說明 shell> mysql <import_tbs.sql Warning (Code 1814): InnoDB: Tablespace has been discarded for table 'sbtest1' Warning (Code 1814): InnoDB: Tablespace has been discarded for table 'sbtest2' Warning (Code 1814): InnoDB: Tablespace has been discarded for table 'sbtest3' Warning (Code 1814): InnoDB: Tablespace has been discarded for table 'sbtest4' ## 可經過MySQL錯誤日誌查看import期間是否存在導入異常 shell> less /data/mysql/data/mysql-error.log
4.創建複製(多源複製)
mysql> CHANGE MASTER TO MASTER_HOST='10.186.60.16', MASTER_USER='repl', MASTER_PORT=3333, MASTER_PASSWORD='repl', MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=149327998 FOR CHANNEL '10-186-60-16'; mysql> CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE=('sbtest.%'); mysql> START SLAVE FOR CHANNEL '10-186-60-16'; mysql> SHOW SLAVE STATUS FOR CHANNEL '10-186-60-16'\G;
4、參考連接
https://www.percona.com/doc/percona-xtrabackup/2.4/xtrabackup_bin/restoring_individual_tables.html
https://dev.mysql.com/doc/refman/5.7/en/tablespace-copying.html
http://www.cnblogs.com/xuanzhi201111/p/6609867.html
使用指南系列
| 使用指南
深度分析 | MyCat與DBLE的對比性能調優
開源分佈式中間件 DBLE 快速入門指南
DBLE 自定義拆分算法
DBLE Server.xml 配置解析
DBLE Schema.xml 配置解析
DBLE rule.xml 配置解析
| 案例分析
DBLE和Mycat跨分片查詢結果不一致案例分析
| 社區活動
DBLE核心研發主講:MySQL分佈式中間件公開課開課啦
開源分佈式中間件DBLE
社區官網:https://opensource.actionsky.com/
GitHub主頁:https://github.com/actiontech/dble
技術交流羣:669663113
開源數據傳輸中間件DTLE
社區官網:https://opensource.actionsky.com/
GitHub主頁:https://github.com/actiontech/dtle
技術交流羣:852990221