把MySQL中的数据导入到OceanBase,分两个步骤:
- 1.准备一份MySQL测试数据集
- 2.使用mydumper工具导出数据
- 3.使用myloader工具导入到OceanBase
- 4.验证测试数据集在OceanBase下的执行情况
1.准备一份MySQL测试数据集
1.1.从github下载mysql测试数据集:https://github.com/datacharmer/test_db/releases/download/v1.0.7/test_db-1.0.7.tar.gz
1.2.数据导入到MySQL中
# 1.上传test_db-1.0.7.tar.gz到服务器
# 2.解压 tar -xvzf test_db-1.0.7.tar.gz
# 3.cd test_db
4.导入数据
mysql -uroot -p123456 < ./employees.sql
5.或者进入mysql命令行,使用source命令导入数据
mysql>source employees.sql
1.3.看下测试数据集、表结构、每个表的数量
1.4.用一段sql关联查询3位员工的薪资发放,所在部门、职称,查询时间0.203s,mysql主机配置1核2G
2.使用mydumper工具导出数据
mydumper 和 myloader 都是开源的工具,具有高效、安全、可靠的特点,并且支持多种备份方式和备份数据的压缩和加密
- mydumper: 是一款开源的多线程备份工具,用于备份 MySQL 数据库。mydumper 支持备份整个数据库、单个表或多个表,支持多线程备份,可以加速数据备份过程。mydumper 还支持备份数据的压缩和加密,可以从备份文件中恢复数据。
- myloader: 是一款用于恢复 mydumper 备份文件的工具。
mydumper下载地址:
https://github.com/mydumper/mydumper/releases
https://github.com/mydumper/mydumper/releases/download/v0.15.2-7/mydumper-0.15.2-7.el7.x86_64.rpm
https://download.csdn.net/download/zhuyu19911016520/88857315
安装: rpm -ivh mydumper-0.15.2-7.el7.x86_64.rpm
安装完后就有mydumper和myloader工具了
2.1.mydumper备份
# 1.备份全库
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -o /data/backup/mysql/
# 2.备份指定数据库 test
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -o /data/backup/mysql/
# 3.备份指定数据库指定表(t1,t2)
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -T t1,t2 -o /data/backup/mysql/
# 4.备份 t1 表的数据,开并行和数据压缩
mydumper -h xx.xx.xx.xx -P3306 -u username -p ****** -B test -T t1 -t 6 -c -o /data/backup/mysql/
# 5.导出示例代码
mydumper -u root -p '123456' -P 3306 -h 127.0.0.1 -B employees -t 6 -c -o /data/backup/mysql/
备份的数据会放到 /data/backup/mysql/ 目录下,每张表导出两个sql文件(schema表结构文件和数据文件)
mydumper 命令常用参数说明:
参数 | 参数全称 | 说明 |
---|---|---|
-h | –host | 连接的主机名或 IP 地址 |
-P | –port | 连接的端口 |
-u | –user | 备份使用的用户名 |
-p | –password | 备份使用的用户密码 |
-B | –database | 备份的数据库名,默认备份所有库 |
-T | –tables-list | 备份的表名,多张表名字用逗号隔开 |
-i | –ignore-engines | 备份忽略的存储引擎,用逗号分割 |
-m | –no-schemas | 不备份表结构 |
-t | –threads | 开启的并行备份线程数,默认是 4 |
-c | –compress | 对输出文件进行压缩 |
-o | –outputdir | 备份文件输出目录 |
3.使用myloader工具导入到OceanBase
OceanBase禁用外键检查约束,防止恢复时脚本报错
obclient -h192.168.113.161 -P2883 -uroot -p'123' -Doceanbase -A
[oceanbase]> SET GLOBAL foreign_key_checks=off;
[oceanbase]> SHOW GLOBAL VARIABLES LIKE '%foreign%';
myloader导入到OceanBase,如果test不存在则会自动创建
myloader -h 127.0.0.1 -P 2883 -u 'user@tenantname#clustenamer' -p ****** -B test -o -d /data/backup/mysql/
myloader -h 127.0.0.1 -P 2883 -u 'root@mq_t1#zycluster' -p '123456' -B test -o -d /data/backup/mysql/
导入测试数据集到OceanBase成功,但通过输出日志可以看到下面有个表导入报错了
myloader 命令常用参数说明:
参数 | 参数全称 | 说明 |
---|---|---|
-h | –host | 连接的主机名 |
-P | –port | 连接的端口 |
-u | –user | 恢复使用的用户名 |
-p | –password | 恢复使用的用户密码 |
-B | –database | 恢复的数据库名 |
-d | –directory | 恢复文件的目录 |
-o | –overwrite-tables | 如果要恢复的表存在,则先 drop 掉该表;使用该参数,需要备份时候要备份表结构 |
-B | –database | 需要还原的数据库 |
4.验证测试数据集在OceanBase下的执行情况
上面那段多表关联查询sql放到oceanbase集群的employees数据库中执行几次,看下执行时间(特别说明这里的执行情况不代表真实情况,因两台主机配置不同)
第一次查询时间为 0.114 秒
后面多次执行同一条sql,查询时间基本都是0.001秒,猜测数据被缓存了,这样对热点数据的查询性能比较高
参考文档:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507580