
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
MySQL数据库在大多数软件开发项目中都得到了广泛的应用,而本文我们就通过案例分析来简单了解一下,MySQL数据库复制基础知识分享。
1.复制简述
MySQL从3.23版本开始提供复制的功能。复制是指将主数据库的DDL和DML操作通过二进制日志传到复制服务器(也叫从库)上,然后在从库上对这些日志重新执行(也叫重做),从而使得从库和主库的数据保持同步。
MySQL支持一台主库同时向多台从库进行复制,从库同时也可以作为其他服务器的主库,实现链状的复制。
MySQL复制的优点主要包括以下3个方面:
如果主库出现问题,可以快速切换到从库提供服务;
可以在从库上执行查询操作,降低主库的访问压力;
可以在从库上执行备份,以避免备份期间影响主库的服务。
2.复制原理
(1)MySQL主库在事务提交时会把数据变更作为事件Events记录在二进制日志文件Binlog中;MySQL主库上的sync_binlog参数控制Binlog日志刷新到磁盘。
(2)主库推送二进制日志文件Binlog中的事件到从库的中继日志RelayLog,之后从库根据中继日志RelayLog重做数据变更操作,通过逻辑复制以此来达到主库和从库的数据一致。
MySQL通过3个线程来完成主从库间的数据复制:其中BinlogDump线程跑在主库上,I/O线程和SQL线程跑在从库上。当在从库上启动复制(STARTSLAVE)时,先创建I/O线程连接主库,主库随后创建BinlogDump线程读取数据库事件并发送给I/O线程,I/O线程获取到事件数据后更新到从库的中继日志RelayLog中去,之后从库上的SQL线程读取中继日志RelayLog中更新的数据库事件并应用。
3.复制涉及的各类文件
二进制日志(Binlog)
二进制日志文件(Binlog)会把MySQL中的所有数据修改操作以二进制的形式记录到日志文件中,包括Create、Drop、Insert、Update、Delete操作等,但二进制日志文件(Binlog)不会记录Select操作,因为Select操作并不修改数据。
二进制日志文件Binlog格式有以下3种:
Statement:基于SQL语句级别的Binlog,每条修改数据的SQL都会保存到Binlog里
Row:基于行级别,记录每一行数据的变化,也就是将每行数据的变化都记录到Binlog里面,记录得非常详细,但是并不记录原始SQL;在复制的时候,并不会因为存储过程或触发器造成主从库数据不一致的问题,但是记录的日志量较Statement格式要大得多。
Mixed:混合Statement和Row模式,默认情况下采用Statement模式记录,某些情况下会切换到Row模式,例如SQL中包含与时间、用户相关的函数等。
中继日志(RelayLog)
中继日志文件RelayLog的文件格式、内容和二进制日志文件Binlog一样,的区别在于从库上的SQL线程在执行完当前中继日志文件RelayLog中的事件之后,SQL线程会自动删除当前中继日志文件RelayLog,避免从库上的中继日志文件RelayLog占用过多的磁盘空间。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei456学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。