一、环境&安装包
- CentOS Linux release 7.4.1708 (Core)
- TDSQL(腾讯基于MySQL5.7.x自主研发的数据库)
- Mysqldump(MySQL5.7.41备份客户端)
- Dumpling(mydumper 的全新升级版)
- Myloader(mydumper附带的导入命令,需要安装mydumper)
- TiDB(分布式集群数据库)
二、数据导出/导入
所需要权限:
- SELECT
- RELOAD
- LOCK TABLES
- REPLICATION CLIENT
- PROCESS
1.安装mysqldump
#检查之前是否安装了其他mysql
[root@node-11 user1]# rpm -qa | grep mysql
[root@node-11 user1]# rpm -qa | grep mariadb
#卸载之前安装的 mariadb (与mysql-client参数上存在不同,mariadb它没有--set-gtid-purged=off参数,备份时会报错)
[root@node-11 user1]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
[root@node-11 user1]# rpm -e --nodeps mariadb-5.5.68-1.el7.x86_64
#安装mysql-client(包含mysqldump)
[root@node-11 user1]# rpm -ivh mysql-community-common-5.7.41-1.el7.x86_64.rpm //安装公共类库包
[root@node-11 user1]# rpm -ivh mysql-community-libs-5.7.41-1.el7.x86_64.rpm //安装libs依赖包
[root@node-11 user1]# rpm -ivh mysql-community-client-5.7.41-1.el7.x86_64.rpm //安装MySQL客户端包
[root@node-11 user1]# mysqldump -V //查看版本
2.数据导出
[root@hdzwvm000007172 bak]# time mysqldump -h172.16.8.99 -P15070 -uhdjsjb_intelliQT --set-gtid-purged=off -p'xxxxxxxxxx' --databases hdjsjb_intelliqt > /srv/bak/hdjsjb_intelliqt.sql
[root@hdzwvm000007172 bak]# du -h hdjsjb_intelliqt.sql //计算sql文件大小
参数说明:
time:计算命令执行返回时间
-h:指定MySQL服务器的主机名或IP地址。
-P:指定MySQL服务器的端口号。
–u:指定连接MySQL服务器的用户名。
- -set-gtid-purged:指定是否在备份时清除GTID信息。GTID是MySQL 5.6及以上版本中用于复制的全局事务标识符。
-p:指定连接MySQL服务器的密码。注意密码需要用单引号括起来。
- -databases:指定要备份的数据库名称。
>:将备份数据输出到指定的文件中。命令解析:
这条命令的作用是将名为hdjsjb_intelliqt的MySQL数据库备份到/srv/bak/hdjsjb_intelliqt.sql文件中,备份时不清除GTID信息。备份时需要连接到主机名或IP地址为172.16.8.99,端口号为15070的MySQL服务器,使用用户名hdjsjb_intelliQT和密码hdjsjb_intelliQT@123进行连接。
3.文件传输
#将文件传输至目标服务器
[root@hdzwvm000007172 bak]# time rsync -av -e "ssh -p4147" hdjsjb_intelliqt.sql root@10.111.13.17:/srv/mysql_bak
参数说明:
time:在执行 rsync 命令时显示详细的时间统计信息。
rsync:命令本身,用于同步文件。
-av:a 表示以归档模式同步文件,保留文件属性,递归同步子目录,保留符号链接等;v 表示以详细模式输出同步过程中的信息。
-e “ssh -p4147”:指定使用 ssh 协议进行同步,并指定 ssh 的端口号为 4147。
hdjsjb_intelliqt.sql:要同步的本地文件名。
root@10.111.13.17:/srv/mysql_bak:远程服务器的用户名和 IP 地址,以及同步到的目标路径。命令解析:
这条命令是用于将本地文件 hdjsjb_intelliqt.sql 同步到远程服务器 10.111.13.17 的 /srv/mysql_bak 目录下。
4.数据导入
[root@node-11 mysql_bak]# time mysql -h10.111.13.32 -uhdjsjb_intelliQT -p'xxxxxxxx' hdjsjb_intelliqt < hdjsjb_intelliqt.sql
三、数据迁移(tidb–>tdsql[mysql])
1.安装dumpling导出数据
[root@bogon tidb]# tar -xvf dumpling-v6.0.0-linux-amd64.tar.gz
[root@bogon tidb]# ./dumpling -V
[root@bogon tidb]# date=$(date +%Y-%m-%d) //赋值日期格式变量
[root@bogon tidb]# time ./dumpling -h 11.16.39.5 -P 14000 -u root -p xxxxx -c gzip -t 8 -F 256m -o /lightning-tidb/$date/ //全量导出数据(支持热导出)
[root@bogon tidb]# zcat bak_ebike-schema-create.sql.gz //查看压缩文件内容
[root@bogon tidb]# zcat bak_ebike.magic_api_file_202203301601-schema.sql.gz
[root@bogon tidb]# zcat bak_ebike.magic_api_file_202203301601.000000000.sql.gz |grep INSERT
参数说明:
参数说明:
time:这个命令会测量程序的运行时间。
./dumpling:这是要运行的程序的名称。
-h 11.16.39.5:这是要连接的主机的IP地址。
-P 14000:这是要连接的主机的端口号。
-u root:这是要使用的用户名。
-p :这是要使用的密码。
-c gzip:这是要使用的压缩算法。
-t 8:这是要使用的线程数。
-F 256m:这是要使用的文件大小。
-o /lightning-tidb/ d a t e / :这是要导出数据的目录路径,其中 date/:这是要导出数据的目录路径,其中 date/:这是要导出数据的目录路径,其中date将被替换为当前日期备份文件:
metadata:此文件包含导出的起始时间,以及 master binary log 的位置。
{schema}-schema-create.sql:创建 数据库 的 SQL 文件。
{schema}.{table}-schema.sql:创建 table 的 SQL 文件。
2.安装mydumper、myloader导入MySQL
无需提前创建数据库、表结构
[root@bogon tidb-sql]# rpm -ivh mydumper-0.13.0-6.el7.x86_64.rpm
[root@bogon tidb-sql]# myloader -V
[root@bogon tidb-sql]# time myloader -h 127.0.0.1 -u root -p 'xxxxxxx' -P 3307 -e -t 8 -C -d /srv/soft/tidb-sql --overwrite-tables -v 3
参数说明:
time:这个命令会输出执行时间。
myloader:这是要执行的命令。
-h 127.0.0.1:这是要连接的MySQL服务器的IP地址。
-u root:这是要使用的MySQL用户名。
-p ‘hdzxzj!qazxsw2’:这是要使用的MySQL密码。
-P 3307:这是要连接的MySQL服务器的端口号。
-e:启用还原数据的二进制日志。
-t 8:这个参数表示使用8个线程来导入数据。
-C:这个参数表示要压缩导出的数据。
-d /srv/soft/tidb-sql:这个参数表示要导出的数据库的名称。
- -overwrite-tables:这个参数表示要覆盖已存在的表。
-v 3:这个参数表示输出详细的日志信息,级别为3。
3.验证数据
[root@bogon mysql-5.7]# ./bin/mysql -S mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1219882
Server version: 5.7.36-log MySQL Community Server (GPL)
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bak_ebike |
| confluence |
| ebike |
| es_view |
| jira |
| jumpserver |
| mysql |
| performance_schema |
| sys |
| zabbix |
+--------------------+
11 rows in set (0.01 sec)
mysql> use bak_ebike
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_bak_ebike |
+-----------------------------+
| magic_api_file_202203301601 |
+-----------------------------+
1 row in set (0.00 sec)
mysql> select * from magic_api_file_202203301601\G;
可以看到数据库、表结构、表数据均已导入成功,已有300行数据插入。
四、结束语
本次MySQL
导入/导出、TiDB
数据回迁就到此结束了,后期会给大家带来主流数据库
更深层次应用,感谢认真读完,如果觉得还可以,那么给作者点赞、收藏、关注吧!