• 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具有自增属性。

  • 相关阅读:
    【并行计算-CUDA开发】CUDA shared memory bank 冲突
    【并行计算-CUDA开发】CUDA shared memory bank 冲突
    【并行计算-CUDA开发】CUDA bank conflict in shared memory
    【并行计算-CUDA开发】CUDA bank conflict in shared memory
    【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
    【并行计算-CUDA开发】从熟悉到精通 英伟达显卡选购指南
    【C/C++开发】【VS开发】win32位与x64位下各类型长度对比
    【C/C++开发】【VS开发】win32位与x64位下各类型长度对比
    【并行计算-CUDA开发】浅谈GPU并行计算新趋势
    【并行计算-CUDA开发】浅谈GPU并行计算新趋势
  • 原文地址:https://www.cnblogs.com/still-smile/p/14882681.html
Copyright © 2020-2023  润新知