mysql千万数据迁移只需要简单的5步(导出,导入)

原文地址,转载请注明出处: https://blog.csdn.net/qq_34021712/article/details/86358213     ©王赛超 

咳咳,千万级别其实也并不是很多,主要是上周做了一个生产环境的数据迁移,趁此记录一下学习笔记。

具体的需求如下: 之前是用户登录之后的token存储在用户信息主表中,并且token还要用来对请求进行加签,现在项目要上网关,想将用户请求验签的操作迁移到网关,网关是单独的数据库,所以要将 用户token字段迁移出去,目前用户有1000多万。

由于数据迁移并不需要对数据进行额外的处理(用户敏感信息加密),所以想直接使用msyql的导出、导入功能。

导出和导入是两个过程

导出对于字段较少/字段内容较少的数据,通过客户端方式可以采用navicat等工具导出,我导出的是3个字段,但是如果网络不好,导出也是很慢的,我在使用navicat导出的时候,用了很久,所以这里直接在生产环境内网的某台机器上使用mysqldump导出。

导入的话推荐直接使用mysql的命令导入,不要使用navicat工具,很慢,导出的sql大概有1.2G,并且navicat本身就有假死的风险。

具体步骤

这里讲源库标明为A库目标库标明为B库。方便理解!

第一步:在源库A上创建迁移目标表
CREATE TABLE `user_token` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `user_id` varchar(11) DEFAULT NULL,
  `token` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `user_id` (`user_id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
第二步:将源存储token的信息,复制到新建的表中
#INSERT INTO 目标表 (字段1,字段2) SELECT 字段1,字段2 FROM 源表;
INSERT INTO user_token (user_id,token) SELECT id,token FROM userinfo;

字段可以不一致,只要指定好顺序就行,比如我上面的 从userinfo表中查到的 id字段 插入 user_tokenuser_id字段上。 复制数据的话,测试的时候大概不到5分钟的时间。
第三步:数据复制完之后,将数据从源库A中导出
#mysqldump -h mysql服务IP地址 -P mysql端口号 -u账号 -p密码 库名 表名 > /tmp/user_token.sql(导出路径)
mysqldump -h 127.0.0.1 -P 3306 -uroot -p123456 usercenter user_token > /tmp/user_token.sql

 

导出的话,测试的时候也就花了1分多钟。

第四步:在目标库B库中执行sql文件进行数据导入
#mysql -h 目标mysql服务IP地址 -u目标mysql账号 -p目标mysql密码 库名 < /tmp/user_token.sql(要导入的文件路径)
mysql -h 192.168.1.155 -uroot -p123456 gateway < /tmp/user_token.sql

 

导入的话,测试也就几分钟。

第五步:使用checksum命令校验数据是否一致

分别在源库目标库中 对 user_token表进行 checksum 操作,如果结果一致,则表示成功。

checksum table user_token;
https://blog.csdn.net/qq_34021712/article/details/86358213