MySQL主从架构及基于SSL实现数据复制

一:Mysql主从架构拓扑图:
MySQL主从架构及基于SSL实现数据复制

二: MySQL主从架构相关知识点


  1. 在MySQL的主从架构中,有关键的三个线程: 
  2. dump thread :当主服务器上的有使数据库发生改变的操作的语句时(基于语句,基于行的,混合三种语句)
  3. 会先将改操作语句记录到二进制log中,该线程通知从服务器有数据库操作语句发生,让从服务器的I/O thread 复制 
  4. I/O thread:监控主服器的二进制log ,及传输数据库操作语句,将这些语句记录到中继日志(relay log)中 
  5. SQL thread:执行从服务器中的中继日志语句,到数据库存储中。 
  6.  
  7. 在MySQL 5.5版本中的主从架构中的主服务器中为了处理高并发业务时可能是多线程写入,
  8. 而在从服务器的SQL thread是单线程写入数据库存储中的,这可能会造成从数据库滞后的问题 

三:MySQL的主从架构的过程


  1. 首先建立MySQL数据库的Master(172.16.10.4)和Slave(172.16.10.5)之间为主从关系 
  2. Master的server-id:1 
  3. Slave的server-id:15
  4. Master: 
  5. 启用二进制日志 
  6. 设置server-id 
  7. 建立具有复制权限的用户,且需要ssl认证 
  8. Slave: 
  9. 启用中继日志 
  10. 设置server-id 
  11. 启动Slave服务,并指定Master的相关参数 
  12. 最后为MaterSlave先创建ssh连接需要的证书,**
  13. 关于证书,**的实现请参看---> http://haicang.blog.51cto.com/2590303/897660
  • 主服务器配置

  1. 1:打开二进制日志 
  2. 2:修改server-id 为1
  3. 3:创建具有复制权限的用户mysql及为其提供redhat的密码 

  1. mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO  [email protected]'172.16.10.5' IDENTIFIED BY 'redhat'  REQUIRE SSL; 

MySQL主从架构及基于SSL实现数据复制

  •   从服务器配置


  1. 打开中继日志 
  2. 修改server-id为15 
MySQL主从架构及基于SSL实现数据复制
  • 主从服务器基于ssl复制的功能配置:

  1. Master和Slave都打开have_ssl。 
  2. 都在在配置文件中打开 have-openssl选项,并添加证书,密码相关信息
  3. 主服务器配置:
MySQL主从架构及基于SSL实现数据复制

注:重启MySQL服务查看开启状态

从服务器的配置建议使用CHANGE MASTER TO 命令


  1. CHANGE MASTER TO  
  2. ->MASTER_HOST='172.16.10.4'
  3. ->MASTER_USER='mysql'
  4. ->MASTER_PASSWORD='redhat'
  5. ->MASTER_LOG_FILE='msql-bin.000001'
  6. ->MASTER_LOG_POS=107 
  7.  
  8. CHANGE MASTER TO 
  9. -> MASTER_SSL=1 
  10. ->MASTER_SSL_CA="/etc/pki/CA/cacert.pem"
  11. ->MASTER_SSL_CERT="/usr/local/mysql/ssh/Slave.crt"
  12. ->MASTER_SSL_KEY="/usr/local/mysql/ssh/Slave.key"
  13.  
  14. START SLAVE; 
  15. SHOW SLAVE STATUS; 
MySQL主从架构及基于SSL实现数据复制

  1. 详见官方文档:http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-ssl.h
  2. tml 

  1. 另外在主从架构中为了确保事务型引擎的数据库的数据一致性建议配置如下” 
  2. 主服务器: 
  3. sync_binlog=1---------->在事物未提交的情况下,写入二进制log 
  4. innodb_flush_logs_at_trx_commit=1 
  5.  
  6. 从服务器: 
  7. skip_slave_start=1-禁制下面两个进程随着MySQL服务自动启动 
  8.                       Slave_IO_Running: Yes 
  9.                      Slave_SQL_Running: Yes 
  10. read_only=1 
  • 验证MySQL服务器的主从复制

  1. 主服务器:创建student表 
MySQL主从架构及基于SSL实现数据复制

  1. 查看从服务器 
MySQL主从架构及基于SSL实现数据复制

四 :在配置过程中遇到的问题

  1. 在启动从服务器过程中遇到ERROR 1201

MySQL主从架构及基于SSL实现数据复制


  1. 查看从服务器日志 
MySQL主从架构及基于SSL实现数据复制 从日志中 可以发现 可能是由于从服务器的 中继日志导致的 。


  1. 解决方案: 
  2. 先停止MySQL服务器:service mysqld stop 
  3. rm -fr master.info  
  4. rm -fr relay-log.info 
  5. 在配置文件/etc/my.cnf中添加 skip-slave-start 
  6. service mysqld start 
  7. 登陆mysql 
  8. mysql> show master status; 
  9. +------------------+----------+--------------+------------------+ 
  10. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | 
  11. +------------------+----------+--------------+------------------+ 
  12. | mysql-bin.000011 |       107 |              |                  |  
  13. +------------------+----------+--------------+------------------+ 
  14. 再次执行: 
  15. change master to 命令 
  16. Query OK, 0 rows affected (0.02 sec) 
  17. mysql> start slave; 
  18. 确保Slave¬_IO_Running和Slave¬_SQL_Running为yes状态 

  1. 查看结果 

MySQL主从架构及基于SSL实现数据复制

  1. 问题点二

  1. 配置完成后启动从服务器时出现error 1236错误如下 
MySQL主从架构及基于SSL实现数据复制

  1. 查找从服务器的日志
MySQL主从架构及基于SSL实现数据复制

  1. 从日志中可以看出,是从服务器在查找主服务器最新的二进制log时时出错,下面是从服务器的相关信息 

MySQL主从架构及基于SSL实现数据复制


  1. 查看主服务器 
MySQL主从架构及基于SSL实现数据复制

  1. 对比发现,从服务器指向的最新二进制日志与主服务器不一致导致出错 
  2. 修改如下: 
MySQL主从架构及基于SSL实现数据复制

五 :总结 


  1. 查看错误日志,及Goolge ,及在出现问题,要找到问题出现的原因,许多问题都是可以迎刃而解的。
  2. 这点小小的经验,希望能给大家带来帮助,彼此共勉吧,呵呵!