免费注册 查看新帖 |

Chinaunix

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

help,log-slave-updates打开,主从服务器binlog大小增长不一致。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-10-30 12:05 |只看该作者 |倒序浏览
大家好,

  我在配置 MM Replication 这种结构得时候,发现一个很郁闷的问题:

Master1   <---> Master2 ,
   |
     |

  slave_1,..... slave_n ...


目前两台机器的数据能相互复制,同步完全没有问题,但是在 Master1 上
执行更改或者插入一条数据以后,
Master1:
mysql> show master status ;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mfx227-bin.000001 |      512 |              |                  |
+-------------------+----------+--------------+------------------+

而:
Master2:
mysql> show master status ;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| mfx225-bin.000001 |      503 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

每次以后,这个 Position 的差异就增加 9 。
详细看了 binlog 中的内容,
发现 Master1比Master2 上多了 :
use MAIN/*!*/;
这行数据。


从服务器上的配置为:
#MySQL slave config ...........
log-bin=mfx225-bin
#####binlog_format="STATEMENT"
binlog_format="ROW"
#binlog_format="MIXED"
server-id       = 25
master-host     = 10.4.6.227
master-user     = root
master-password = 123456
replicate-ignore-table =  MAIN.JHF_ALIVE
replicate-ignore-table =  MAIN.JHF_UN
replicate-ignore-table =  mysql.%
replicate-ignore-table =  test.%
#replicate-rewrite-db="MAIN->MAIN"

relay-log=mfx225-relay-bin
skip-slave-start
log-slave-updates





请问各位高手,怎么设定 才能达到 master1/master2 上面的 binlog 日志大小增长一致呢 ?
或者 如果才能保证 slave 的切换机制能顺利进行呢 ?(目前不太想使用 mmm-agent这类软件。)

[ 本帖最后由 jb96_xlwang 于 2008-10-31 09:21 编辑 ]

wangxl_db_arch.JPG (15.08 KB, 下载次数: 68)

db_archer

db_archer

论坛徽章:
0
2 [报告]
发表于 2008-10-30 16:02 |只看该作者
use MAIN/*!*/;

跟这个无关,主要是两台master的更新肯定不一样,所以binlog就不一样;
要不会循环的。

试试,不一定成功
--logs-slave-updates
--replicate-same-server-id

[ 本帖最后由 simeiren 于 2008-10-30 16:04 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-10-30 19:59 |只看该作者
不知道你是怎么设置的?

论坛徽章:
0
4 [报告]
发表于 2008-10-31 09:29 |只看该作者

回复 #3 yueliangdao0608 的帖子

yueliangdao:
你好,


把我们得结构弄成图了,你看看吧。

现在主要得问题在于:
  Master2 上的日志文件的增长不能和Master1 上完全同步增长,每次更新后就相差一个固定的数字。

配置信息,就是上面我贴的大概内容。


这里是 master 的详细全部配置:
  这样的:replicate-ignore-table =  MAIN.JHF_UNRE
    就是 ndb 的表,不需要复制到 master2 中去的,因为那里有同样的表。


[root@mfx225 data]# cat /etc/my.cnf
[MYSQLD]
ndbcluster
ndb-connectstring=10.4.6.224
default-storage-engine=ndbcluster
max_connections=1024
default-character-set=cp932
ndb-log-update-as-write=0

memlock

#ndb-cluster-connection-pool=4
#added 2008 08 20 for ...
#BASE config.....
skip-name-resolve  
back_log =350
log-slow-queries = slow.log
long_query_time = 1
table_cache =350
sort_buffer_size = 1M
query_cache_size=512M
query_cache_limit=2M


ndb_force_send=1
engine_condition_pushdown=1
ndb_use_exact_count=0
#1 -- means enable, 0 -- means disable
slave-allow-batching=1

#transaction-isolation = READ-COMMITTED

#add by wangxl ,for "converting HEAP to MyISAM "
max_heap_table_size=64M
tmp_table_size=64M
thread_cache_size=350

#add by liuyf  for primary key repeat
auto_increment_increment=4
auto_increment_offset=4

delayed_queue_size=500
bulk_insert_buffer_size=16M



#MySQL slave config ...........
log-bin=mfx225-bin
binlog_format="STATEMENT"
#binlog_format="ROW"
#binlog_format="MIXED"
server-id       = 25
master-host     = 10.4.6.227
master-user     = root
master-password = 123456

replicate-do-db = MAIN

replicate-ignore-table =  MAIN.JHF_ALIVE
replicate-ignore-table =  MAIN.JHF_UNRE
#replicate-ignore-table =  mysql.%
#replicate-ignore-table =  test.%
#replicate-rewrite-db="MAIN->MAIN"

relay-log=mfx225-relay-bin
skip-slave-start
log-slave-updates

论坛徽章:
0
5 [报告]
发表于 2008-10-31 11:11 |只看该作者
原帖由 simeiren 于 2008-10-30 16:02 发表

跟这个无关,主要是两台master的更新肯定不一样,所以binlog就不一样;
要不会循环的。

试试,不一定成功
--logs-slave-updates
--replicate-same-server-id



谢谢你的回复。。

这两个参数不能同时用的。启动的时候报错了。


另外,你说的原因好像是不存在的,因为
   1,master2 上 是不更新的,它相当于一个从。
   2,master2 上的 log-slave-updates 是打开的。
所以 master1 上的更改 都会写入 master2 中的 binlog 的。


但是,现在不是不写入,而是写入的量稍少一点,所以造成了 我的提问。。

[ 本帖最后由 jb96_xlwang 于 2008-10-31 11:20 编辑 ]

论坛徽章:
0
6 [报告]
发表于 2008-10-31 12:17 |只看该作者
不听我的,如果是MM结构,不可能一样的,就算暂时一样,但是一旦对某台有额外的操作 文件名索引和位置变量都会不同

论坛徽章:
0
7 [报告]
发表于 2008-11-01 16:28 |只看该作者
原帖由 showsa 于 2008-10-31 12:17 发表
不听我的,如果是MM结构,不可能一样的,就算暂时一样,但是一旦对某台有额外的操作 文件名索引和位置变量都会不同

试验出真知不:)

论坛徽章:
0
8 [报告]
发表于 2008-11-03 22:32 |只看该作者
已经放弃了,试遍了各个参数,无法达到两边一致。
所以切换的时候无法保证切入点和不丢数据。

现采用 memor + disk table 的方式了。。。
结构:
Cluster         ----------- > Slave (单台机器)

尽量控制 应用程度的读,能到slave上读统统去slave  上读。
将 Slave细分化,大部分 slave 只同步需要的表,而不是全部。

谢谢各位的关心。
更谢谢showsa 给我的那些建议。

论坛徽章:
0
9 [报告]
发表于 2008-11-04 23:58 |只看该作者

重燃希望,已经解决找不到同步点的问题了。。。

经过对Cluster Replication 的重新摸索,已经能够对上面这个
情况进行控制了。

解决方法就是 不用在 Master2  上打开  log-slave-updates 参数,
Master2 上的日志的增长由 Cluster 内部来解决,它会记录 Master2 里面的
mysql.ndb_binlog_index  表,结合 从服务器上的最后的复制状态表:mysql.ndb_apply_status
里面的 epoch 字段,来重新找到 master2  上 失败后的 更新点,
然后来更改 和 重启 slave 上的 slave 进程,
以此来达到无缝切换的目的。

切换的动作可以做成  perl 脚本,来定期执行,在压力和实时性上选择 30 秒检查一次,
能保证在 1分钟内 slave 上重新同步完毕的 目标。

重新整理了一下,以做备忘。。。。
http://blog.chinaunix.net/u1/33594/showart_1360118.html
(写的有些乱,讲究着看吧)

继续欢迎大家提出改进和批判性的建议。

评分

参与人数 1可用积分 +10 收起 理由
yueliangdao0608 + 10 支持自己解决问题!

查看全部评分

论坛徽章:
0
10 [报告]
发表于 2008-11-05 07:29 |只看该作者
我发现我以前的MM从来没有注意过这个日志的大小增长情况。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP