mysql主从配置
mysql 内建的复制功能是构建基于mysql的大规模,高性能应用的基础,这类应用使用的所谓的“水平扩展”的架构。
复制解决的基本的问题是让一台server的数据与其它服务器保持同步。一台主库的数据可以同步到多台备库上。同时备库本身也可以被配置成另外一台server的主库。主备之间的组合方式有多种。
mysql支持的复制方式,有2种:基于行的复制和基于语句的复制。这两种方式都是通过在主库上记录二进制日志,在备库重放日志的方式来实现异步的数据复制。这意味着,在同一时间点,备库上的数据可能与主库存在不一致,并且无法保证主备之间的延迟,一些大的语句可能导致备库产生几秒,几分钟甚至几个小时的延迟。
mysql复制大部分是向后兼容的,新版本的服务器可以作为老版本的备库,但反过来则不行。可能的原因有,old版本可能无法解析新版本所采用的新的特性或语法,另外,所使用的二进制文件的格式也可能不同。所以在进行大版本升级前,最好先对复制的设置进行测试。但对于小版本号升级,则通常是兼容的。
复制通常不会增加主库的开销,主要是启用二进制日志带来的开销,主要是启用二进制日志带来的开销,但处于备份或及时从崩溃中恢复的目的,这点开销也是必要,此外备库也会对主库增加一些负载,如网络I/O开销,尤其当备库请求从主库读取旧的二进制日志文件时,可能会造成更高的I/O开销。同时,琐竞争机制也可能阻碍事物的提交。最后,如果是从一个高吞吐量的主库上复制多个备库,唤醒多个复制线程发送事件的开销将会累加。
通过mysql复制可以将读操作分布到多个server上,实现对读密集型的优化。对于备份来说,复制是一项很有意义的技术补充,但复制既不是备份也不能够取代备份。复制能够帮助应用程序避免mysql单点失败。
![](https://images2015.cnblogs.com/blog/781052/201602/781052-20160226174048849-1814117562.png)
图:mysql复制如何工作
为mysql服务器配置复制非常简单,由于场景不同,略微会有所差异
1,在每台server上创建复制帐号
2,配置主库和备库
3,通知备库连接到主库并从主库复制数据
1,创建复制帐号
mysql> grant replication slave,replication client on *.* to rep1@'192.168.110.136' identified by 'abc-123';
Query OK, 0 rows affected (0.01 sec)
在主库上开启一些设置,需要打开二进制日志并指定一个独一无二的sever ID 在主库的my.cnf文件中增加或者修改如下内容
master
log_bin = mysql-bin
server_id = 5
如果在之前mysql配置文件中没有指定log-bin选项,则需重启mysql,可以用show master status;来检查
![](https://images2015.cnblogs.com/blog/781052/201602/781052-20160226174107693-1849028856.png)
slave
log_bin = mysql-bin
server_id = 6
relay_log = /var/lib/mysql/relay-bin
log_slave_updates = 1
read_only = 1
重启slave执行复制
stop slave;
change master to master_host='192.168.110.135',master_user='rep1',master_password='abc-123';
start slave;
查看slave状态
show slave status\G;
![](https://images2015.cnblogs.com/blog/781052/201602/781052-20160226174126052-1227804883.png)
可以从主库和从库用show processlist看到复制的线程
END !
本文主要参考《高性能mysql》