mysql 不同服务器中的数据表合并重建ID方法
项目中有遇到不同服务器中的数据需要合并,但是发现id重复,正常方法导入id就会出问题。
因为赶时间,没有找到比较好的方法,暂时用最简单的逻辑。
步骤
1.将服务器1中的表导出。
2.记录服务器2中该表的最大id数值
3.使用python脚本修改服务器1中导出的表数据
4.将服务器1中的表导入到服务器2中
python脚本修改sql文件中的id
import os
import re
file = open(r'D:\123.txt','r+',encoding = 'utf-8')
lines = file.readlines()
file.close()
file = open(r'D:\123.txt','w+',encoding = 'utf-8')
for k, v in enumerate(lines):
wid=re.sub('^(.{30})',r'INSERT INTO `loginfo` VALUES (74279+',v)
file.write(wid)
file.close()
数据修改前
INSERT INTO `loginfo` VALUES (1, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022046_6.337986.jpg', 200, '1', '0.99', '[263,80,377,132]', '031', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 76, 0, '2021-01-07 18:20:46', NULL);
INSERT INTO `loginfo` VALUES (2, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022046_6.337986.jpg', 200, '1', '0.99', '[203,205,439,315]', '0.65', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 76, 0, '2021-01-07 18:20:46', NULL);
INSERT INTO `loginfo` VALUES (3, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022748_22.419955.jpg', 200, '1', '0.99', '[263,80,377,132]', '031', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 77, 0, '2021-01-07 18:27:48', NULL);
INSERT INTO `loginfo` VALUES (4, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022748_22.419955.jpg', 200, '1', '0.99', '[203,205,439,315]', '0.65', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 77, 0, '2021-01-07 18:27:48', NULL);
INSERT INTO `loginfo` VALUES (5, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022847_24.483327.jpg', 200, '1', '0.99', '[263,80,377,132]', '031', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 78, 0, '2021-01-07 18:28:47', NULL);
数据修改后
INSERT INTO `loginfo` VALUES (74279+1, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022046_6.337986.jpg', 200, '1', '0.99', '[203,205,439,315]', '0.65', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 76, 0, '2021-01-07 18:20:46', NULL);
INSERT INTO `loginfo` VALUES (74279+2, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022046_6.337986.jpg', 200, '1', '0.99', '[203,205,439,315]', '0.65', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 76, 0, '2021-01-07 18:20:46', NULL);
INSERT INTO `loginfo` VALUES (74279+3, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022748_22.419955.jpg', 200, '1', '0.99', '[263,80,377,132]', '031', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 77, 0, '2021-01-07 18:27:48', NULL);
INSERT INTO `loginfo` VALUES (74279+4, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022748_22.419955.jpg', 200, '1', '0.99', '[203,205,439,315]', '0.65', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 77, 0, '2021-01-07 18:27:48', NULL);
INSERT INTO `loginfo` VALUES (74279+5, 'yjcam', 'info', '未配置定位信息', '未配置定位信息', 'test', '', '未配置定位信息', 'http://192.168.2.20/imgdata/capture/yjcam/000000/20210107/20210107022847_24.483327.jpg', 200, '1', '0.99', '[263,80,377,132]', '031', '747.70421841487', '521.8703675881', '', 'OK', '0', 0, 78, 0, '2021-01-07 18:28:47', NULL);
然后在服务器2中使用source导入即可。
本次导入的数据量在5万条,sql语句花费的时间比较长。
10万条以下的数据使用这种方法,不赶时间的话没问题。
不清楚mysql有没有相关的简便操作。
考虑下列方法同样可行,不过速度仍然很慢,但未尝试
1.导出数据表时不导出id
2.插入数据时使id自增,不过前提需要该表在构建时id具有自增属性。