免费注册 查看新帖 |

Chinaunix

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

请教一个mysql的master/slave数据双向同步问题? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-28 14:14 |只看该作者 |倒序浏览
现有一日志数据库logdb,会时刻插入,而还会不定时查询,更新,因为数据库里面文字量大,查询时组合条件很多,还涉及到关键字的全文搜索
现打算采用master/slave方式,
机器A: 作为master:
     用于插入日志数据
机器B: 作为slave:
     用于查询日志

主要的目的是提高查询日志的速度:
现有两个问题需要咨询:
(1)只在机器B上建立关键字的fulltext索引(听说需要再安装支持中文的插件),A上面没有,不知道是否可行,对效率影响如何??
(2)因为在查询的时候,可能还会对日志进行更新修改(update操作),如果这个更新操作仍然加主机A上,那么在查询的B上能立马
       显示出来吗?   或者直接把更新到B机,对效率影响大吗??
(3)要实现master/slave,要打开 binlog ,配置可否只设定对这个数据库记录,其他的所有数据库都不记录?

论坛徽章:
0
2 [报告]
发表于 2008-09-28 14:26 |只看该作者
(1)只在机器B上建立关键字的fulltext索引(听说需要再安装支持中文的插件),A上面没有,不知道是否可行,对效率影响如何??

可以,设置A,B上表的engine不同都可以,比如A需要事务支持,搞成InnoDB的,B只用来查询,搞成MyISAM的。
先配置好复制,保证B能从A复制以后,在A上建立数据库和表,然后去B的相应表上去修改引擎建立索引。

(2)因为在查询的时候,可能还会对日志进行更新修改(update操作),如果这个更新操作仍然加主机A上,那么在查询的B上能立马
       显示出来吗?   或者直接把更新到B机,对效率影响大吗??

对于一般数据量的写入和更新,复制过程的延时还是很小几乎可以忽略,大数据量或者长时间跑的话,可能会有一定延时,你可以在每晚负载最小的时候进行一些处理来解决这个。
具体做法,master上锁表,查得日志进度,然后slave上用select Master_pos_wait("log_file_name","log_pos")实现

(3)要实现master/slave,要打开 binlog ,配置可否只设定对这个数据库记录,其他的所有数据库都不记录?

可以,master的my.cnf里指定replication-do-db/replication-do-table/replication-ignore-db/replication-ignore-table来实现

[ 本帖最后由 KDr2 于 2008-9-28 14:32 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2008-09-28 17:46 |只看该作者

回复 #2 KDr2 的帖子

非常感谢KDr2这位朋友详细的回答,谢谢
对于插入数据是不定时执行的,每天数据量大概30~50w左右,不过将来数据量可能会增加
  对于查询日志时的更新,因为实时性比较高,更新后需要立马显示出来,无法在“每晚负载最小的时候进行一些处理来解决这个。”,呵呵,不过我听说可以双机数据同步,
  不过所有这些还是需要实践来检验下才好?
另外还有个问题:
1. 主机A的mysql版本为:4.1.22 (重装mysql可能性很小,里面有很多数据库在使用),slave机B的
mysql版本为:5.1.11-beta,版本不一致,对我的需求有影响吗?
  btw:如果各位朋友能提供一个比较好使用的 关于mysql 支持中文全文索引的插件 相关信息,不胜感激!

论坛徽章:
0
4 [报告]
发表于 2008-09-28 20:19 |只看该作者
1.复制延迟的问题,你还是自己测试下吧
2.版本不同,估计不可以,我不清楚。。。不过很多地方强调复制要同版本
3.mysql全文索引用sphinx,www.coreseek.com给sphinx做了中文支持。

论坛徽章:
0
5 [报告]
发表于 2008-10-07 13:36 |只看该作者
非常感谢KDr2 这位朋友的热情解答!

论坛徽章:
0
6 [报告]
发表于 2008-10-07 14:57 |只看该作者
原帖由 KDr2 于 2008-9-28 14:26 发表

可以,设置A,B上表的engine不同都可以,比如A需要事务支持,搞成InnoDB的,B只用来查询,搞成MyISAM的。
先配置好复制,保证B能从A复制以后,在A上建立数据库和表,然后去B的相应表上去修改引擎建立索引。
...


这个不行吧。A innodb 要进行事务处理 写入binlog  。然后 B 的myisam 不支持 A 的语法。这咋成涅?

引擎还是要一致。

论坛徽章:
0
7 [报告]
发表于 2008-10-07 17:27 |只看该作者

回复 #6 dahai01 的帖子

可以啊
因为最后记录的只是具体执行的SQL语句;
我一直这样用的,而且MySQL的官方资料也有提到。
master ——〉 InnoDB
slave ——〉MyISAM

我还干过 master 和 slave 的 索引不一样呢;
也没出问题,因为更新索引是MySQL的内部机制;
看了看代码,觉得没问题就干了
不过不建议这样用啊,我也不是用在关键业务上

论坛徽章:
0
8 [报告]
发表于 2008-10-07 18:22 |只看该作者
原帖由 simeiren 于 2008-10-7 17:27 发表
可以啊
因为最后记录的只是具体执行的SQL语句;
我一直这样用的,而且MySQL的官方资料也有提到。
master ——〉 InnoDB
slave ——〉MyISAM

我还干过 master 和 slave 的 索引不一样呢;
也没出问题,因 ...



恩。有道理 。谢谢了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP