mysql内置提供的复制功能是mysql大规模、高可用性能的基础,应用人员可通过水平扩展,配置n个备库来实现数据同步,是数据库高性能、备份、数据仓库容灾的工作前提。
一、mysql复制能解决什么问题?
1、数据分布
在不同的地理位置来分配数据备份,产生各地数据中心
2、负载均衡
通过mysql复制可将读操作分布到多台服务器,实现对读高并发的应用优化。如何实现mysql负载均衡在下文中会进行介绍
3、高可用和故障切换
复制能避免mysql单点故障,在故障发生时,可执行切库操作缩短宕机时间
二、mysql复制原理
1、主库将所有的数据操作记录在二进制日志文件中(Binary log)
2、备库启动一个IO线程,将主库的二进制文件转储(binlog dump)到自己的中继日志中(Relay log)
3、备库读取中继文件中的操作,执行结果放到备份服务器上
注意:
1、数据一致性延迟问题:
在同一时间,数据的一致性会有延迟,这取决于二进制文件的大小,一些大的语句可能会导致备库产生几秒、几分钟甚至几小时的延迟。
2、mysql复制的版本问题:
由于老版本可能无法解析新版本产生的二进制文件中采用的新特性或语法,所以一般使用同一版本做复制或老版本作为主库,新版本做备库。
三、如何实现mysql复制
1、每台服务器上创建复制账号,备库以该账号进行验证权限
GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.21.%' IDENTIFIED BY 'max1209' ;
2、配置主库和备库(master-slave)
修改主库my.cnf文件:log_bin
server_id=1 (值是 1 到 2^32-1 之间的正整数)
修改主库my.cnf文件:
server_id=2(值是 1 到 2^32-1 之间的正整数)
3、通知备库连接到主库并从主库复制binary log
SHOW MASTER STATUS --查询mysql主库上的日志文件内容--开始复制
CHANGE MASTER TO MASTER_HOST='qa-sandbox-1′,
MASTER_USER='rep',
MASTER_PASSWORD='max1209',
MASTER_LOG_FILE='mysql-bin.000007′,
MASTER_LOG_POS=471632;
start slave;
四、mysql支持的复制方式
1、基于语句的复制(默认)
基本原理:主库记录下有造成数据更新的语句,当备库读取备份文件时,把这些语句在本地再执行一遍。
优点:简单粗暴、记录语句的二进制文件更紧凑,不会占用太多带宽。
缺陷:存在一些无法复制的sql,例如使用时间戳、current_user()函数的语句;
2、基于行的复制
在5.1之后开始支持基于行的复制
基本原理:将实际数据保存在二进制文件中
优点:能准确无误的复制每一行记录;无需replay主库的语句执行,高效;
缺点:二进制文件庞大,给主库复制增加额外负载开销
3、总结
金无赤金,人无完人,结合使用,效果更佳。
五、mysql同步复制
1、同步复制
主库上的事务只有在备库上执行完成之后,该事务才算执行完成。这就意味着,所有主库上执行的事务同一时间在备库上都会执行一次,达到主库数据与备库实时同步。
2、同步复制的优点
同步复制使得当主库服务器崩溃,执行事务丢失时,至少有一个备库拥有实时数据的副本。Mysql本身并不支持同步复制,但mysql Cluster 存储引擎(NDB Cluster)支持同步复制。
3、NDB Cluster实现同步复制
在所有节点上进行同步的主-主复制(两台主服务器间进行复制),也就是说在任何节点写入,这些节点都拥有同等的读写能力。
还没有评论,来说两句吧...