文档详情

卢飞:浅析MySQL replication.pdf

发布:2017-03-15约1.09万字共40页下载文档
文本预览下载声明
浅析 MySQL Replication 卢飞 复制的用途 ? 读写分离 ? 灾备/高可用 ? 统计 ? 备份 复制如何工作 主要步骤 ? Master将改变记录到二进制日志Binary log中 ? Slave 将主库上的日志复制到自己的Relay log中 ? Slave上SQL线程回放中继日志的内容,将其Slave上的数据与 Master一致 Binary log 格式 ? STATEMENT --记录操作的SQL语句 ? ROW --记录操作的每一行数据的变化信息 ? MIXED --混合模式 -- STATEMENT--》ROW STATEMENT ? 优点 ? 减少了binlog 日志量,节约IO,提高性能 ? 缺点 ? 不是所有的DML语句都能被复制 ? UUID() ,FOUND_ROWS(),USER() ROW (推荐使用) ? 优点 ? 任何情况都可以被复制,ROW模式是最安全可靠的 ? 缺点 ? 产生大量的日志,copy data 的DDL会让日志暴涨 MIXED ? 默认会先使用STATEMENT模式保存binlog,对于STATEMENT模式无 法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL 语句选择日志保存方式。 ? Bug较多,不建议使用 Binlog Event 疑问 ? 为什么MySQL 有二进制日志,InnoDB还有redo 日志? ? 事务是如何提交的? ? 事务提交先写二进制日志还是重做日志? ? 如何保证这两部分的日志做到一致性? 体系架构 事务是怎样提交的 1)SQL语句已经成功执行并生 成redo和undo的内存日志 2 )Binary log write()--》fsync() 3 )存储引擎内提交使undo和 redo永久写入磁盘 双1保证 控制MySQL 磁盘写入策略以及数据安全性的关键参数,MySQL为了保证主库 和从库的数据一致性,就必须保证Binlog和InnoDB redo 日志的一致性 ? innodb_flush_log_at_trx_commit (redo) --0 log buffer将每秒一次地写入log file中,并且flush操作同时进行 --1 每次事务提交时都会把log buffer的数据写入log file,并且flush到磁盘 --2 每次事务提交时MySQL都会把log buffer的数据写入log file ,不flush ? sync_binlog (binlog) --0 刷新binlog_cache中的信息到磁盘 由os决定 --1 每次事务提交刷新binlog_cache中的信息到磁盘 sync_binlog ? prepare_commit_mutex MySQL 5.6 Binary Log Group Commit ? Flush stage :Leader线程遍历
显示全部
相似文档