1. 程式人生 > 其它 >OB入門實踐4-遷移 MySQL 資料到 OceanBase 叢集

OB入門實踐4-遷移 MySQL 資料到 OceanBase 叢集

遷移 MySQL 資料到 OceanBase 叢集

實踐練習四(必選):遷移 MySQL 資料到 OceanBase 叢集

歷史實踐題回顧

  1. 實踐1:OceanBase Docker 體驗
  2. 實踐2:手動部署 OceanBase 叢集
  3. 實踐3:使用OBD 部署一個 三副本OceanBase 叢集

練習目的

本次練習目的掌握從 MySQL 向 OceanBase 遷移資料的基本方法:mysqldump、datax 、canal 等。

練習內容

請記錄並分享下列內容:

  • (必選)使用 mysqldump 將 mysql的表結構和資料同步到 OceanBase 的MySQL 租戶中。
  • (必選)使用 datax 配置至少一個表的 MySQL 到 OceanBase 的 MySQL 租戶的離線同步。
  • (可選)使用 datax 配置至少一個表的 OceanBase 到 CSV 以及 CSV 到 OceanBase 的離線同步。
  • (可選)使用 canal 配置 MySQL 的增量同步到 OceanBase 的 MySQL 租戶。

具體實現

準備實驗資料

unzip -qo tpcc-mysql-master.zip
cd tpcc-mysql-master/src
make

生成tpcc_load和 tpcc_start 二進位制檔案

將資料匯入到源端(MySQL)
建立tpcc資料庫
CREATE DATABASE `tpcc` DEFAULT CHARACTER SET utf8;
匯入表物件
# grep -ci 'create table' create_table.sql
mycli tpcc <./create_table.sql
mycli tpcc -e "show tables;"
載入批量資料(tpcc_load)
./tpcc_load -h progs -P 3308 -d tpcc -u root -w 1 
## 用法
]# ./tpcc_load -h
*************************************
*** TPCC-mysql Data Loader        ***
*************************************
./tpcc_load: option requires an argument -- 'h'
Usage: tpcc_load -h server_host -P port -d database_name -u mysql_user -p mysql_password -w warehouses -l part -m min_wh -n max_wh
* [part]: 1=ITEMS 2=WAREHOUSE 3=CUSTOMER 4=ORDERS
  • 查看錶記錄數

    SELECT TABLE_NAME,DATA_LENGTH,INDEX_LENGTH,(DATA_LENGTH+INDEX_LENGTH) as length,TABLE_ROWS,concat(round((DATA_LENGTH+INDEX_LENGTH)/1024/1024,2), 'MB') as total_size 
    FROM information_schema.TABLES 
    WHERE TABLE_SCHEMA='tpcc' 
    order by length desc
    ;
    

使用 mysqldump 將 mysql的表結構和資料同步到 OceanBase 的MySQL 租戶

僅匯出表結構(MySQL源端)
mysqldump -h progs -uroot -proot -P3308 -d tpcc --set-gtid-purged=OFF --compact > tpcc_ddl.sql
檢查檔案中是否存在特殊語法|變數等
grep -Ei "SQL_NOTES|DEFINER|MAX_ROWS" tpcc_ddl.sql
僅匯出表資料(MySQL源端)
mysqldump -h progs -uroot -P3308 --set-gtid-purged=OFF -t tpcc  > tpcc_data.sql
資料同步到Oceanbase MySQL租戶
obclient連線到MySQL租戶中並建立資料庫tpcc
obclient -hprogs -uroot@pay_mysql_tat#obce -P2883 -c -A 

create database tpcc;
匯入表物件
obclient -hprogs -uroot@pay_mysql_tat#obce -P2883 -c -A tpcc

MySQL [tpcc]> source /tmp/tpcc_ddl.sql
匯入表資料
-- 先禁用外來鍵約束
MySQL [tpcc]> set global foreign_key_checks=off;
MySQL [tpcc]> show global variables like '%foreign%';

MySQL [tpcc]> source /tmp/tpcc_data.sql
檢查兩端資料量

使用datax (離線)從 MySQL 同步表資料到 OceanBase

使用 datax 配置至少一個表的 MySQL 到 OceanBase 的 MySQL 租戶的離線同步

部署datax軟體
# 下載 datax 
wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

# 解壓
tar -xf datax.tar.gz
cd datax

# 刪除datax中的隱藏檔案
find ./datax/plugin -name ".*" | xargs rm -f
建立同步作業配置檔案
生成模板檔案
python ./datax/bin/datax.py -r mysqlreader -w oceanbasev10writer
修改同步作業檔案
# 生成模板檔案
python ./datax/bin/datax.py -r mysqlreader -w oceanbasev10writer > jog/my2ob.json

# 根據實際環境修改
vi job/my2obce.json
  • 修改完成作業json檔案

    {    
    "job": {
            "setting": {
                "speed": {
                    "channel": 2,
                },
                "errorLimit": {
                    "record": 10
                }
            },
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "username": "root",
                            "password": "root",
                            "splitPk": "no_o_id",
                            "column": [
                                "*"
                            ],
                            "connection": [
                                {
                                    "jdbcUrl": [
                                        "jdbc:mysql://progs:3308/tpcc"
                                    ],
                                    "table": [
                                        "new_orders"
                                    ]
                                }
                            ]
                        }
                    },
                    "writer": {
                        "name": "oceanbasev10writer",
                        "parameter": {
                            "writeMode": "insert",
                            "username": "root",
                            "password": "root",
                            "writerThreadCount": 5,
                            "column": [
                                "*"
                            ],
                            "connection": [
                               {
                                    "jdbcUrl": "||_dsc_ob10_dsc_||obce:pay_mysql_tat||_dsc_ob10_dsc_||jdbc:mysql://progs:2883/tpcc?useUnicode=true&characterEncoding=utf-8",
                                    "table": [
                                        "new_orders"
                                    ]
                                }
                            ]
                        }
                    }
                }
            ]
        }
    }
    
    
啟動同步作業
python ./bin/datax.py ./job/my2obce.json
檢查確認同步情況

附錄

參考資料