tt-开心 2024-05-24 13:58 采纳率: 50%
浏览 2
已结题

MySQL主从同步的问题

最近在测试环境测试验证主从同步。发现一个问题:我用source 命令导入的测试数据无法同步到从库,不知道是什么地方需要设置一下。
我直接在命令行创建表,新增数据,是可以同步到从库的。
请各位神仙解答一下。

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-24 13:58
    关注

    引自免费微信小程序:皆我百晓生

    在MySQL主从复制中,如果你通过SOURCE命令导入数据到主库,这些操作可能不会被binlog记录下来,因此从库就无法接收到相应的更新信息进行同步。这是因为SOURCE命令是直接将SQL脚本执行结果写入数据库,而不是通过SQL语句发送给服务器,所以不触发binlog记录。

    要解决这个问题,你需要确保数据修改的操作能被binlog记录。有以下几种方法可以实现:

    1. 使用LOAD DATA INFILE替代SOURCE命令加载数据。这会生成binlog事件,从而允许从库同步。

      LOAD DATA INFILE 'yourfile.csv' INTO TABLE yourtable FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
      
    2. 如果你坚持使用SOURCE命令,可以尝试在执行它之前设置binlog格式为ROW(默认可能是STATEMENT或MIXED):

      SET GLOBAL binlog_format = 'ROW';
      

      这将会记录每一行数据的变化,但可能会增加binlog的大小。在完成数据导入后,记得恢复原来的binlog格式,比如回滚到STATEMENT模式:

      SET GLOBAL binlog_format = 'STATEMENT';
      
    3. 为了确保所有操作都被记录,你也可以在导入数据前运行以下命令,这样所有的SQL语句都会被记录在binlog中:

      SET SQL_LOG_BIN = 1;
      

      在完成数据导入后,可以将其恢复为默认值:

      SET SQL_LOG_BIN = 0;
      
    4. 另外一种方式是手动创建一个包含插入语句的SQL文件,然后使用SOURCE命令执行这个文件,这样也能产生binlog记录。例如,先将CSV文件转换成INSERT语句的SQL文件,再执行:

      mysql -u username -p database_name < convert_csv_to_inserts.sql
      

    以上就是针对你遇到的问题的一些解决方案。根据你的具体需求选择合适的方法,并确保在生产环境中谨慎处理binlog格式和日志大小,因为这可能影响性能。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 7月3日
  • 已采纳回答 6月25日
  • 创建了问题 5月24日

悬赏问题

  • ¥15 java代码写在记事本上后在cmd上运行时无报错但又没生成文件
  • ¥15 关于#python#的问题:在跑ldsc数据整理的时候一直抱这种错误,要么--out识别不了参数,要么--merge-alleles识别不了参数(操作系统-linux)
  • ¥15 PPOCRLabel
  • ¥15 混合键合键合机对准标识
  • ¥100 现在不懂的是如何将当前的相机中的照片,作为纹理贴图,映射到扫描出的模型上
  • ¥15 魔霸ROG7 pro,win11.息屏后会显示黑屏,如图,如何解决?(关键词-重新启动)
  • ¥15 有没有人知道这是哪里出了问题啊?要怎么改呀?
  • ¥200 C++表格文件处理-悬赏
  • ¥15 Windows Server2016本地登录失败
  • ¥15 复合卡卡号轨道写入芯片卡