mysql主从复制实践

来源:互联网 发布:军犬网络舆情监控系统 编辑:程序博客网 时间:2024/05/16 12:24

读万卷书不如行万里路,只有亲身实践过你才知道书里的内容是否是真实的。


前提条件:

准备至少2台mysql服务器,ip各不相同,一台作为master库,另外的作为slave苦。


例如本人的环境:

ubuntu(master库):

ip:192.168.1.104


ubuntu-clone(slave库):

ip:192.168.1.104


2个ip为局域网,之间能互相ping通!


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

配置mastar库:


1.SHOW MASTER STATUS 保证出现如下界面:




若没有出现,说明你没有开启log-bin,开启方式如下:

     

       #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[必须]启用二进制日志       server-id=222      //[必须]服务器唯一ID,默认是1,一般取IP最后一段


2.创一个用户给slave库授权进行主从复制。


GRANT REPLICATION SLAVE ON *.* to 'fengslave'@'%' identified by '123456';FLUSH PRIVILEGES;

不上登录mysql的账户,这一点不要搞混淆了!



3.重启mysql服务


配置slave库:


同maste的主库一样,修改配置文件,但可以不相同:


       #vi /etc/my.cnf       [mysqld]       log-bin=mysql-bin   //[不是必须]启用二进制日志       server-id=226      //[必须]服务器唯一ID,默认是1,一般取IP最后一段

设置主库账号,用root账号登录192.168.1.109:

1.stop slave

2.设置

    ->change master to    -> master_host='192.168.1.104',    -> master_user='fengslave',    -> master_password='123456',    -> master_log_file='mysql-bin.000002',    -> master_log_pos=120;

3.start slave


4.最后在重启mysql服务。


若进入slave库,用root登录后,发现:


SLAVE_IO_RUNNING:YES
SLAVE_SQL_RUNNING:TES

都是yes则说明没有问题,此时则安装结束!



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

可能出现的问题如下:

问题:安装时候发现SLAVE_IO_RUNNING:NO

在从库中执行:show slave status\G中:

Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal  MySQL server UUIDs; these UUIDs must be different for replication to work.


原因是:mysql5.6的复制引入了uuid的概念,各个复制结构中的server_uuid得保证不一样,但是查看到直接copy  data文件夹后server_uuid是相同的,show variables like '%server_uuid%';

解决方法:

找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个db的uuid不一样,重启db即可

参考:http://blog.csdn.net/cug_jiang126com/article/details/46846031


问题:Slave_SQL_Running_State会出现错误信息

原因是:mysql主从复制,经常会遇到错误而导致slave端复制中断,这个时候一般就需要人工干预,跳过错误才能继续

解决办法:跳过指定数量的事务:

mysql>slave stop;
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1        #跳过一个事务
mysql>slave start

参考:http://blog.csdn.net/seteor/article/details/17264633


思考:在现实出现任何一点一点小的问题都可能会导致巨大的损失,如何及时的发现mysql主从复制有问题了?

        参考:编写一shell脚本,用nagios监控slave的两个yes(Slave_IO及Slave_SQL进程),如发现只有一个或零个yes,就表明主从有问题了,发短信警报吧。


思考:主从复制的思路在一定程度上面保证了数据的备份以及在高并发的时候对IO性能瓶颈的提升,在程序上的体现就是从主库中进行删除,修改,添加操作,从库只进行查询的操作。程序上可以使用多数据源来回切换的方式进行实现,有没有更简便的方法呢?