免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 11074 | 回复: 16
打印 上一主题 下一主题

mysql binlog 不记录load data infile [复制链接]

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-02 15:19 |只看该作者 |倒序浏览
本帖最后由 sydt 于 2011-06-02 15:20 编辑

环境:
centos 5.5  
mysql Server version: 5.0.77     AB复制。(两台机器型号,系统版本,mysql版本,完全一致。并且,同步已经正常运行。)

问题:

在master上,使用
  1. load data infile "/tmp/ad.ins" into table db_music.ad_ad;
复制代码
导入数据。  (数据文件格式无误,db_musc.ad_ad。 库和表都存在。无人为操作错误。) 。
导入完成后,无任何报错信息。 查询数据,导入正常。数据只有三条。 我是做测试的。

在slave上面查询。 发现没有同步。 slave 运行正常,show slave status\G;无任何报错信息。  

返回master上查看,binlog日志。 发现最新产生的日志文件中,没有将   load data infile 的操作记录到日志中。

在master上删掉刚才的日志信息。  重新执行如下语句:
  1. use db_music
  2. load data infile "/tmp/ad.ins" into table ad_ad;
复制代码
再去看binlog ,发现里面有了关于load data  infile 操作的相关记录。  再去查看slave。 发现也同步了。



我想问的问题是:


为什么我在执行load data infile 的时候,使用   db.table 的方式,无法记录到binlog日志。 而先use  db ,然后再load data infile  却可以记录到binlog日志中?

希望高手帮忙解答。万分感谢。 ~

论坛徽章:
0
2 [报告]
发表于 2011-06-02 16:16 |只看该作者
回复 1# sydt


    我的测试结果无论是采用db.table的方式,还是use db,直接操作table的方式都会记录binlog!
我的mysql版本是:5.1.50

论坛徽章:
0
3 [报告]
发表于 2011-06-02 16:23 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
4 [报告]
发表于 2011-06-02 18:06 |只看该作者
·         --replicate-do-db=db_name

告诉从服务器限制默认数据库(由USE所选择)为db_name的语句的复制。要指定多个数据库,应多次使用该选项,每个数据库使用一次。请注意不复制跨数据库的语句,例如当已经选择了其它数据库或没有数据库时执行UPDATE some_db.some_table SET foo='bar'。如果需要跨数据库进行更新,使用--replicate-wild-do-table=db_name.%。请读取该选项列表后面的注意事项。

一个不能按照期望工作的例子:如果用--replicate-do-db=sales启动从服务器,并且在主服务器上执行下面的语句,UPDATE语句不会复制:

USE prices;
UPDATE sales.january SET amount=amount+1000;
如果需要跨数据库进行更新,应使用--replicate-wild-do-table=db_name.%。

“只检查默认数据库”行为的主要原因是语句自己很难知道它是否应被复制(例如,如果你正使用跨数据库的多表DELETE语句或多表UPDATE语句)。如果不需要,只检查默认数据库比检查所有数据库要快得多。

论坛徽章:
0
5 [报告]
发表于 2011-06-02 18:06 |只看该作者
我很疑问的是,如果"/tmp/ad.ins"这个文件在slave不存在,是怎么进行同步的?

论坛徽章:
0
6 [报告]
发表于 2011-06-03 11:14 |只看该作者
应该是binlog 自动转换为row,复制了每一行的数据.

论坛徽章:
0
7 [报告]
发表于 2011-06-03 14:37 |只看该作者
环境:
centos 5.5  
mysql Server version: 5.0.77     AB复制。(两台机器型号,系统版本,mysql版本, ...
sydt 发表于 2011-06-02 15:19



    load data 本来就不产生日志的

论坛徽章:
0
8 [报告]
发表于 2011-06-03 18:37 |只看该作者
本帖最后由 horizonhyg 于 2011-06-03 18:39 编辑

回复 7# cxm.cm


    测试是说实话的..
   
SET TIMESTAMP=1307096978/*!*/;
    load data LOCAL INFILE '/tmp/SQL_LOAD_MB-1-1' INTO table test.testload

    可以看到确实load data记录到了日志文件,但是文件名字是跟源文件不一样的,具体的插入细节是不产生日志的,现在我还不清楚他是怎么个实现机制,根据文件名可以猜测mysql应该记录了文件里的信息,或者是直接传递的一个临时表到从,希望大家能找到正确的解释

论坛徽章:
0
9 [报告]
发表于 2011-06-03 18:42 |只看该作者

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:57:09
10 [报告]
发表于 2011-06-05 10:27 |只看该作者
回复 2# 飞鸿无痕


    难道是数据库版本问题? 我回去编个5.1的mysql测试一下。   节日愉快
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP