当前位置: 主页 > 数据库

mysql将数导入数据库-mysql 导入mysqldump数据

发布时间:2023-02-09 07:03   浏览次数:次   作者:佚名

mysql 导入mysqldump数据_有数据 mysql导入_mysql将数导入数据库

背景

最近遇到需要添加字段。 阿里云的RDS支持在线添加字段。 我检查了表的计数,发现该表有将近 7000 万行。 字段添加将持续多长时间?

一种思路是新建一个空表mysql将数导入数据库,然后添加字段,然后将旧表的数据导入新表,然后比较数据增量,然后修改表名。 想法不错,但是操作起来比较麻烦,那么有没有相应的DBA工具可以达到同样的目的呢? 使用 pt-online-schema-change。

pt-online-schema-change 是 percona 开发的工具。 这个函数可以在 percona-toolkit 包中找到。 可在线修改表结构,尤其是大表,效率高。

mysql将数导入数据库_mysql 导入mysqldump数据_有数据 mysql导入

原则

我们看到pt-osc的原理和我们修改大表的思路是一致的,这么多步骤只需要一个命令行就可以操作。

安装pt-osc

以centos平台为例

1.先安装依赖

有数据 mysql导入_mysql 导入mysqldump数据_mysql将数导入数据库

yum install perl-DBI
yum install perl-DBD-MySQL
yum install perl-Time-HiRes
yum install perl-IO-Socket-SSL

2.安装percona-toolkit

有数据 mysql导入_mysql 导入mysqldump数据_mysql将数导入数据库

yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum update percona-release
yum install percona-toolkit

percona-toolkit 包括 pt-online-schema-change

实际的

mysql将数导入数据库_mysql 导入mysqldump数据_有数据 mysql导入

阿里云RDS需要指定参数--no-version-check

pt-online-schema-change --no-version-check \
    --execute \
    --alter "ADD COLUMN step_num int(0)" \
    h=rm-******.mysql.rds.aliyuncs.com,P=3306,u=dev,p=******,D=ilisten,t=x,A=utf8mb4

mysql 导入mysqldump数据_有数据 mysql导入_mysql将数导入数据库

当心

我在实际跑的时候加了下面两个参数 --channel 和 --no-check-replication-filters

--channel=db_dbsync 使用复制通道连接到服务器时使用的通道名称。 假设您有两个主机,端口 12345 上的 master_a,端口 1236 上的 master_b 和一个使用通道 chan_master_a 和 chan_master_b 连接到两个主机的从机。 如果您尝试运行 pt-table-sync 来同步 slave 和 master_a,pt-table-sync 将无法确定什么是正确的 master,因为 SHOW SLAVE STATUS 将返回 2 行。 在这种情况下,您可以使用 --channel=chan_master_a 指定要在 SHOW SLAVE STATUS 命令中使用的通道名称。

--no-check-replication-filters 有过滤条件,处理时忽略过滤

在生产环境中,建议在业务淡季执行。 7000万行不到两个小时就执行完了mysql将数导入数据库,比在线加字段还快。