Master/Slave
Master: write/read
Slaves: read
企业mysql架构环境:
一主多从,主服务器负责写,从服务器提供读请求
为什么?
冗余:promte(提升为主),异地灾备
人工
工具程序: MHA
负载均衡:转移一部分“读”请求;
支援安全的备份操作;
测试;
主从复制的原理:利用二进制日志文件和中继日志文件,主服务器将所有的操作写入二进制文件,从服务器
通过i/o线程,不断申请 加载主服务器的二进制文件,存储到从服务器的中继日志中,sql线程通过读取中继
日志,将主服务器中的操作在从服务商进行重放
主/从架构:
异步复制:mysql server master 不需要确认从服务受到数据,直接进行操作
半同步复制:半同步复制是基于Google为 MySQL开发的半同步复制的插件。
半同步 复制的原理是,一个事务在主服务器上执行完成后,必须至少确保至少在一台从服务器
上执行完成后,事务才算提交成功。如果在一定时间内从服务器没有响应,则会自动降 级为异
步复制
一主多从;
一从一主;
级联复制;黑洞引擎:用于级联复制中,有三台 mysql A、B 、C ; B同步A 中的数据,
C同步B中的数据,其中B数据就可以使用黑洞引擎只记录二进制文件,不将数据记录
到磁盘中,减少I/O读写
应用场景:当mysql主服务器读写压力过大时,中间可以加入 B服务,用于减少压力
循环复制;
双主复制;
一从多主:
每个主服务器提供不同的数据库;
配置环境:
配置注意:
注意时间同步
主服务器的版本高于或者等于从服务器版本
复制的开始位置:
从0开始;
从备份中恢复到从节点后启动的复制;
mariadb版本:5.5
系统版本:centos7
mariadbserver1(master) ip:192.168.1.36
mariadbserver2(slave)ip:192.168.1.128
mysql 基于ssl实现mysql主从复制:
一:实现mysql用户能基于ssl连接:
配置环境:
mysql server:
hostname:Myserver
system version:centos7
mysql version:mariadb5.5.44
ip地址:192.168.1.133
mysql client:
hostname:Myclient
系统版本:centos7
mysql client:mariadb5.5
ip address:192.168.1.128
Myserver主机配置配置:
证书生成
由Myserver服务器自谦CA证书,并给自己和Myclient 颁发证书
1、 设置CA自签发:
2、 创建序列号文件和数据库文件
3、生成私钥:
4、生成自签证书
5、生成申请证书文件
6、签发证书:
7、复制CA cacert.pem 和私钥 cakey.pem 到/etc/mariadb/ssl中
mysql 配置
1、安装mariadb并启动mysql
2、添加授权用户,并要求使用基于ssl远程连接
3、创建/etc/mariadb/ssl目录用于存放证书,CA,密钥
4、编辑配置文件/etc/my.cnf在[mysqld]开启ssl,重新启动服务
登录mysql查看ssl功能是否开启
5、编辑配置文件在[mysqld]配置段,添加证书文件,重启服务
Myclient配置:
1、生成私钥
2、生成申请证书文件,并将其发给Myserver服务器
3、由Myserver生成给Myclient生成证书,将Myserver中的cacert.pem和生成的客户端证书一起发给Myclient的/etc/mariadb/ssl文件中,将自己的私钥文件也放到此目录中
Myserver端:
客户端测试基于ssl连接Myserver:
可能出现的错误:
Myserver中添加ssl和ssl证书路径等,如果出现了hava_ssl 状态为DISABLED,日志中提示如下错误
解决办法:
二:在第一步上完成主从配置:
通过完全备份,将主服务的数据导入到从服务器
master 配置:
1开启二进制文件,开启方式编辑/etc/my.cnf ,添加如下内容,之后重新启动服务
配置开启二进制文件
开启ssl和指明证书相关文件、
2、进入mysql添加用于主从复制的用户
3、重新启动服务即可
slave配置:
1编辑主配置文件/etc/my.cnf
开启中继日志
添加ssl证书:
2、重新启动服务
3、查看主节点的此时二进制文件的名称和位置,基于二进制文件和此位置进行复制同步
查看二进制文件日志时间,也可以根据此二级值日志文件不同事件的位置进行同步,例如从479开始
4、在slave中添加主节点:
5、设置salve为只读
配置文件中添加read_only :对管理员不生效啊
6、slave start;开启从服务
7、show slave status\G:显示从服务
主从复制常见问题
问题一: io线程始终保持为connecting状态
主从架构中,从库的io_thread一直保持connecting状态。先理解Slave_IO_Running 为connecting,的含义。造成的主要有三个:
1、网络不通 (是否打开防火墙)
2、复制用户的密码不对 (主从同步指定的用户密码主机名限制)
3、pos不对 (指定的position不正确)
4.主键冲突,报1062错误
问题二:在搭建主从时,报1201错误 。ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL
error log
解决方法:出现这个问题的原因是之前曾做过主从复制!需要reset slave后再change
问题三:
从库同步慢
主从架构中,从库的同步数据非常慢。出现主从同步慢的原因有:
1.主从同步延迟与系统时间的关系,查看主从两台机器间系统时间差
2.主从同步延迟与压力、网络、机器性能的关系,查看从库的io,cpu,mem及网络压力
3.主从同步延迟与lock锁的关系(myisam表读时会堵塞写),尽量避免使用myisam表。一个实例里面尽量减少数据库的数量。
问题四:从服务器落后主服务器怎么办
查看从服务器落后主服务器: show slave status\G
seconds_behind_master:是否落后主服务器,落后主服务器的时间;
停止从服务器然后在重新启动从服务器
或者基于半同步方式进行主从复制
mysql 半同步复制:
在主从同步的基础上配置半同步复制:
mysql支持多种插件:/usr/lib64/mysql/plugins/
master:
1、登录mysql安装PLUGIN模块
2、查看插件是否安装完成
3、查看安装完插件生成的相关变量,确保第一个变量值为ON
rpl_semi_sync_master_timeout:设置超时时间,超过此值主服务器连得不到从服务响应自动将其降级为普通的从服务器
slave:
1、安装从服务需要的插件rpl_semi_sync_slave
2、编辑配置文件:
3、重新启动slave;
slave stop;
slave start;
查看主服务器中半同步状态:
关注重点:
Rpl_semi_sync_master_net_avg_wait_time:网络等待的平均时间时间长查看带宽是 否够用单位 ms
Rpl_semi_sync_master_net_wait_time 网络等待时间:
Rpl_semi_sync_master_net_waits 网络等待次数:
Rpl_semi_sync_master_tx_avg_wait_time :等待事务的提交的平均时间
Rpl_semi_sync_master_tx_wait_time :等待事务的总时长
Rpl_semi_sync_master_tx_waits:等待事务提交的总次数
测试从服务器故障自定降级:
如果rpl_semi_sync_slave_enabled的值为在配置文件中配置,而是利用set 设置,重启mysql slave,当主服务更新数据库时会出现连接超时自动降级