再次折腾Mysql主主同步配置,方案适合: Mysql5.1x-5.5x

放假了,无聊宅在家上网的人越来越多,这几天囧客圈的流量也渐渐大了起来,直至哥这台小巧的512MB ram VPS无法支撑,频频爆内存死机,还是不得不鄙视下香港的线路,5MB的小带宽,服务器还这么不耐操.
考虑这种流量高峰一般只有节假日才会出现,元旦+春节也就那么一个月的样子,为了这个升级VPS增加费用很不值得,有钱还不如多给老婆买点水果.
本着节约不浪费的精神,哥准备把另外一台LA的1GB ram VPS利用起来,话说pr机房最近真是越来越给力了,联通电信访问都舒畅无比,希望不要是临时现象,继续给力下去吧!
说实话选方案的时候哥真是纠结无比,一个用了10几年win系统的纯洁又善良的美工,让哥来搞centos真是肉体跟精神上的双重折磨,好在有广大技术牛人分享自己的方法,虾爷真是跪谢!
nginx反代就不考虑了,并发一大,HK的脆弱小vps照样会爆内存,wp用了supercache也一样,东哥写的cos-html-cache很牛逼,但是我的url结构不支持,囧!
言归正传,还是苦逼的研究Mysql主主同步配置吧,虽然折腾人,但是好在绿色环保,搞定了也安心一点.

下面给出配置方案:

需求: MYSQL主主同步

0、环境描述

1、MYSQL主主同步配置过程

需要配置同步的数据库: data

------------------------------------------------------------------------------------------

a)创建同步用户
  在主服务器上为从服务器建立一个连接帐户(datauser),该帐户必须授予REPLICAITON SLAVE权限。
  这里服务器A和服务器B互为主从,所以都要分别建立一个同步用户。

  服务器A (192.168.1.10) :

  服务器B (192.168.1.20) :

------------------------------------------------------------------------------------------

b). 修改 /etc/my.cnf 配置文件,为其添加以下内容:

  服务器A (192.168.1.10) :

  服务器B (192.168.1.20) :

---------------------------------------------------------------------------------------

c). 分别重启服务器A、B上的mysql服务 :

---------------------------------------------------------------------------------------

d)、分别在服务器A、B上查看做为主服务器状态

在操作前锁表的目的是为了生产环境中不让进新的数据,好让从服务器定位同步位置。初次同步完成后,记得解锁。

先执行:

接着:
  服务器A (192.168.1.10) :

  服务器B (192.168.1.20) :

---------------------------------------------------------------------------------------

e). 分别在服务器A、B上用change master语句指定同步位置 :

  服务器A (192.168.1.10) :

  服务器B (192.168.1.20) :

注:master_log_file,master_log_pos由上面主服务器查出的状态值中确定。master_log_file对应File,master_log_pos对应Position。
  mysql 5.x以上版本已经不支持在配置文件中指定主服务器相关选项。

解锁服务器:

---------------------------------------------------------------------------------------

f). 分别在服务器A、B上启动从服务器线程 :

分别在服务器A、B上查看从服务器状态 :

查看以上两项的值,均为Yes则表示状态正常。

不得不提一个很严重的地方:

第一次设置好之后不管怎么查看 从服务器状态都是:

Slave_IO_Running: No
Slave_SQL_Running: Yes

这真是让哥百撕不得骑姐,纠结了一番去看自己去年那篇同步的日志才发现又出现了相同的问题,这里着重记录一下:

提示server_id相同这个傻逼错误的解决办法:

用如下命令查看:

发现,mysql并没有从my.cnf文件中更新server_id,既然这样就只能手动修改了
复制代码 代码如下:

如此执行后,同步恢复了正常.

在配置第三台slave的时候终于发现了问题所在,为什么我总是修改server_id没用了!
原来是因为my.cnf里面下方还有个server_id的默认设置 = 1
我了个去,哥几乎3个小时浪费在这上面啦!!!
引以为戒!

感谢这篇文章的作者: http://www.mike.org.cn/articles/mysql-master-slave-sync-conf-detail/

.

  1. 作者,为什么高版本的mysql不需要
    #以下内容在高版本的Mysql上已经没用了,可以删掉:
    #master-host=192.168.1.10
    #master-user=datauser
    #master-password=123456789
    #master-port=3306
    如果不要这个,我从服务器,怎么知道去哪里同步啊?