把MySQL中的数据导入到OceanBase,分几个步骤:

  • 1.准备一份MySQL测试数据集
  • 2.使用mydumper工具导出MySQL数据
  • 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下载地址:

安装: 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 表的数据,开并行6线程和数据压缩
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' -h 127.0.0.1 -P 3306 -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/

# 导入到OceanBase,上一篇创建了mq_t1租户
myloader -h 127.0.0.1 -P 2883 -u 'root@mq_t1#zycluster' -p '123456'  -B employees -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

Logo

了解最新的技术洞察和前沿趋势,参与 OceanBase 定期举办的线下活动,与行业开发者互动交流

更多推荐