• 1. (本页无文本内容)
  • 2. MySQL主从复制主讲: 邮箱: 微博:
  • 3. MySQL复制是什么?MySQL复制的功能是构建基于MySQL数据库的大规模、高性能应用的基础
  • 4. MySQL复制能解决什么问题 1 MySQL的负载均衡(分担读负载) 2 为高可用 灾难恢复 备份提供更多的选择 3 读写分离
  • 5. 主从配置优点 1、解决应用系统,数据库出现的性能瓶颈,采用数据库集群的方式来实现查询负载;通常情况下一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将 数据库的查询分担到不同的查询服务器上从而提高查询效率。 2、数据备份,高可用性和故障切换,增强了数据库的安全性,利用备库备份来减少主库负载,复制并不能代替备份 3、实现数据库的在线升级
  • 6. MySQL日志MySQL有很多种日志分为两类 MySQL存储引擎日志 innodb: 重做日志 , 回滚日志 MySQL服务层日志 二进制日志 慢查日志 通用日志
  • 7. 二进制日志 二进制日志: 记录了所有对MySQL数据库的修改事件,包括增删改查事件和对表结构的修改事件 没有执行成功的SQL是不会记录到二进制日志
  • 8. 复制如何工作 1 在主库上把数据更改记录到二进制日志(bin-log)中(这些记录日志被称为二进制日志事件) 2 从库将主库上的日志复制到自己中继日志 3 从库读取自己的中继日志中的事件,将其重放到自己数据上 以上只是概述,实际上每一步都很复杂,见下图
  • 9. (本页无文本内容)
  • 10. 一主多从
  • 11. 复制的细节1第一步 是在主库上记录二进制日志,在每次准备提交事务完成数据更新的事件记录到二进制日志中,MySQL会按事务提交的顺序而非每条语句的执行执行顺序来记录二进制日志,在记录二进制日志后,主库会告诉存储引擎可以提交事务了
  • 12. 复制的细节2下一步 从库将主库的二进制日志复制到本地的中继日志中 首先从库会启动一个工作线程,称为I/O线程,I/O线程跟主库建立一个普通的客户端连接,然后在主库上启动一个特殊的二进制转存线程,这个二进制转存线程会读取主库上的二进制日志中的事件,如果该线程追赶上了主库,他会进去休眠状态,直到主库有新的事件产生是才会被唤醒,从库I/O线程会将接收到事件记录到中继日志当中
  • 13. 复制的细节3从库的SQL线程执行最后一步 该线程中从中继日志中读取事件并在从库执行,从而实现备库数据更新,当SQL线程追赶上I/O线程时,SQL线程也进入休眠状态,当中继日志更新,SQL线程才被唤醒。中继日志通常已经在系统缓存中,所以中继日志的开销很低,SQL线程执行的事件也可以通过配置选项来决定是否写入其自己的二进制中 SQL线程和I/O线程是独立工作的,只有一个SQL线程来重放中继日志中的事件 这也是很多工作负载的性能瓶颈所在
  • 14. 主从配置开始 MySQL配置主从非常简单,但是由于场景不同基本的步骤还有所差异 最基本的场景就是新安装的主库和从库备份总得来说分为下面几步: 1 在每台服务器上创建复制账号 2 配置主库和从库 3 通知从库连接主库并从主库复制数据
  • 15. 安装mysql本次实验使用阿里云服务器 更新源 apt-get update 安装mysql apt-get install mysql-server 登陆主库 创建复制账号 grant replication slave on *.* to 'test_1'@'ip' identified by 'abcd'; 为从库能连接主库创建用户并授权 从库连接主库的必要条件,TCP连接与端口要畅通 如果有防火墙需要打开3306端口 用户除了可以从从库服务器远程连接到主库外,从库连接主库使用的用户必须有权限能访问需要备份(同步)的数据库
  • 16. 同源策略 尽量保证两个MySQL版本相同,MySQL复制大部分是向后兼容的 新版本的服务器可以作为老版本服务器的备库,反过来是不可行的 停止主库进行打包 service mysql stop //停止 tar -zcvf mysql.tar.gz ./mysql/ //打包 service mysql start //开启 推送打包文件到从库 scp ./mysql.tar.gz root@120.27.6.194:/tmp
  • 17. 同源策略登陆从库服务器 移动mysql 备份文件 mv /tmp/mysql.tar.gz /var/lib //移动 停止从库 service mysql stop 备份从库 mv mysql ./mysql_bak 解压文件 tar -zxvf mysql.tar.gz service mysql start
  • 18. 配置主库和从库修改主库[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog-ignore-db=mysql 注释 #bind-address = 127.0.0.1
  • 19. 配置主库和从库修改从库[mysqld] server-id = 2 log_bin = /var/log/mysql/mysql-bin.log expire_logs_days = 10 max_binlog_size = 100M binlog-ignore-db=mysql
  • 20. 启动复制查看bin-log日志写到了哪里 show master status; 从库执行 CHANGE MASTER TO MASTER_HOST = '10.163.222.155',MASTER_USER = 'test_1', MASTER_PASSWORD='abcd',MASTER_LOG_FILE = 'mysql-bin.000001',MASTER_LOG_POS=107; 启动复制 START SLAVE; 停止复制 STOP SLAVE; 查看状态 SHOW SLAVE STATUS;
  • 21. 一主一从
  • 22. 一主多从
  • 23. 总 结 MySQL复制是内建功能中的瑞士军刀,显著增加了MySQL功能和可用性 事实上这也是MySQL这么快就如此流行的关键之一
  • 24. (本页无文本内容)