MySQL主从架构及基于SSL实现数据复制
一:Mysql主从架构拓扑图:
二: MySQL主从架构相关知识点
在MySQL的主从架构中,有关键的三个线程:
dump thread :当主服务器上的有使数据库发生改变的操作的语句时(基于语句,基于行的,混合三种语句)
会先将改操作语句记录到二进制log中,该线程通知从服务器有数据库操作语句发生,让从服务器的I/O thread 复制
I/O thread:监控主服器的二进制log ,及传输数据库操作语句,将这些语句记录到中继日志(relay log)中
SQL thread:执行从服务器中的中继日志语句,到数据库存储中。
在MySQL 5.5版本中的主从架构中的主服务器中为了处理高并发业务时可能是多线程写入,
而在从服务器的SQL thread是单线程写入数据库存储中的,这可能会造成从数据库滞后的问题
三:MySQL的主从架构的过程
首先建立MySQL数据库的Master(172.16.10.4)和Slave(172.16.10.5)之间为主从关系
Master的server-id:1
Slave的server-id:15
Master:
启用二进制日志
设置server-id
建立具有复制权限的用户,且需要ssl认证
Slave:
启用中继日志
设置server-id
启动Slave服务,并指定Master的相关参数
最后为Mater和Slave先创建ssh连接需要的证书,密钥
关于证书,密钥的实现请参看—> http://www.linuxidc.com/Linux/2012-06/63317.htm
主服务器配置
1:打开二进制日志
2:修改server-id 为1
3:创建具有复制权限的用户mysql及为其提供RedHat的密码
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO mysql@’172.16.10.5′ IDENTIFIED BY ‘redhat’ REQUIRE SSL;
从服务器配置
打开中继日志
修改server-id为15
主从服务器基于ssl复制的功能配置:
Master和Slave都打开have_ssl。
都在在配置文件中打开 have-openssl选项,并添加证书,密码相关信息
主服务器配置:
注:重启MySQL服务查看开启状态
从服务器的配置建议使用CHANGE MASTER TO 命令
- CHANGE MASTER TO
- –>MASTER_HOST=‘172.16.10.4’,
- –>MASTER_USER=‘mysql’,
- –>MASTER_PASSWORD=‘redhat’,
- –>MASTER_LOG_FILE=‘msql-bin.000001’,
- –>MASTER_LOG_POS=107
-
- CHANGE MASTER TO
- –> MASTER_SSL=1
- –>MASTER_SSL_CA=“/etc/pki/CA/cacert.pem”,
- –>MASTER_SSL_CERT=“/usr/local/mysql/ssh/Slave.crt”,
- –>MASTER_SSL_KEY=“/usr/local/mysql/ssh/Slave.key”;
-
- START SLAVE;
- SHOW SLAVE STATUS;
详见官方文档:http://dev.mysql.com/doc/refman/5.1/en/replication-solutions-ssl.html
另外在主从架构中为了确保事务型引擎的数据库的数据一致性建议配置如下:
主服务器:
sync_binlog=1———->在事物未提交的情况下,写入二进制log
innodb_flush_logs_at_trx_commit=1
从服务器:
skip_slave_start=1-禁制下面两个进程随着MySQL服务自动启动
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
read_only=1
验证MySQL服务器的主从复制
主服务器:创建student表
查看从服务器
四 :在配置过程中遇到的问题
在启动从服务器过程中遇到ERROR 1201
查看从服务器日志
由于从服务器的 中继日志导致的 。
解决方案:
先停止MySQL服务器:service mysqld stop
rm -fr master.info
rm -fr relay-log.info
在配置文件/etc/my.cnf中添加 skip-slave-start
service mysqld start
登陆mysql
mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000011 | 107 | | |
+——————+———-+————–+——————+
再次执行:
change master to 命令
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
确保Slave?_IO_Running和Slave?_SQL_Running为yes状态
查看结果
问题点二
配置完成后启动从服务器时出现error 1236错误如下
查找从服务器的日志
从日志中可以看出,是从服务器在查找主服务器最新的二进制log时时出错,下面是从服务器的相关信息
查看主服务器
对比发现,从服务器指向的最新二进制日志与主服务器不一致导致出错
修改如下:
五 :总结
查看错误日志,及Goolge ,及在出现问题,要找到问题出现的原因,许多问题都是可以迎刃而解的。
这点小小的经验,希望能给大家带来帮助,彼此共勉吧,呵呵!