mysql将数导入数据库-mysql 导入mysqldump数据
背景
最近遇到需要添加字段。 阿里云的RDS支持在线添加字段。 我检查了表的计数,发现该表有将近 7000 万行。 字段添加将持续多长时间?
一种思路是新建一个空表mysql将数导入数据库,然后添加字段,然后将旧表的数据导入新表,然后比较数据增量,然后修改表名。 想法不错,但是操作起来比较麻烦,那么有没有相应的DBA工具可以达到同样的目的呢? 使用 pt-online-schema-change。
pt-online-schema-change 是 percona 开发的工具。 这个函数可以在 percona-toolkit 包中找到。 可在线修改表结构,尤其是大表,效率高。
原则
我们看到pt-osc的原理和我们修改大表的思路是一致的,这么多步骤只需要一个命令行就可以操作。
安装pt-osc
以centos平台为例
1.先安装依赖
yum install perl-DBI
yum install perl-DBD-MySQL
yum install perl-Time-HiRes
yum install perl-IO-Socket-SSL
2.安装percona-toolkit
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
实际的
阿里云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
当心
我在实际跑的时候加了下面两个参数 --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将数导入数据库,比在线加字段还快。