MySQL主从复制怎样实现高可用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
80%都是查询
缓存来保护数据库:Redis、ElasticSearch
数据库系统要有一定的容灾能力
数据状态化明显
MTTF:平均无故障时间
MTTR:平均维护时间
HA=MTTF/(MTTF+MTTR)* 100% (这就是常说的99.95%)
主从(非对称)
master-slave,热数据备份,从库一般是用来实时备份,从机可以快速切换为主库,读写分离(数据的一致性),从库一般设置为只读
前端应用走缓存,后端应用Report走从库查
对称方式
两个节点,互为主从,双主模式(两个数据库的主键如果是自动生成需要初始设置成不一样的)
A-1001,1003,1005,B-1002,1004,1006
双主下数据同步一定要实时
多机方式
MHA
MMM
MyCat(可以实现双主机热切)
资源:两台数据库
Master会将修改记录进binlog
Slave从主库binlog读取数据写入relaylog
relaylog和binlog的格式一样,可以用mysqlbinlog读取relaylog
mysql> show relaylog events in 'relay-bin.000001';
binlog的postition方式
GTID方式:MySQL版本>=5.7
Master服务器配置
# 慢查询开关 slow_query_log=ON slow_query_log_file=/usr/local/slowlog/slow.log slow_launch_time=4 long_query_time=3 # chown -R mysql:mysql /usr/local/slowlog/
binlog设置
server_id=213 log_bin=/usr/local/binlog/mysql-bin # 只需要给名字前缀 binlog_format=row expire_logs_days=3 max_binlog_size=200m
Slave服务器配置
# 慢查询开关 slow_query_log=ON slow_query_log_file=/usr/local/slowlog/slow.log slow_launch_time=4 long_query_time=3 # chown -R mysql:mysql /usr/local/slowlog/
从库的主从设置
server_id=214 relay_log=/usr/local/relaylog/relay-bin relay_log_recovery=1 #确保完整性 read_only=on #从服务器只读 skip_slave_start=on #slave重启后不会自己启动复制链路,需要手动启动,建议手动启动,好处是检查无误后启动 master_info_repository=TABLE # 将主从服务的信息保存进表 relay_log_info_repository=TABLE # 将主从服务的信息保存进表
主从指明不同步的数据库
# Master # 不同步数据库 binlog-ignore-db=mysql binlog-ignore-db=information_schema # 只同步某一些数据库 binlog-do-db=icoding_admin # Slave # 复制哪些数据库 replicate-do-db=icoding_admin replicate-do-db=game # 不复制哪些数据库 replicate-ignore-db=mysql replicate-ignore-db=information_schema
先Master上建立授权账号
# Master授权给slave mysql> use mysql; mysql> grant replication slave on *.* to 'synuser'@'192.168.0.214' identified by '123456'; mysql> flush privileges;
初始化Slave数据
# Master和Slave的数据库版本要一致,Master<=Slave mysqldump -uroot -p123456 -h227.0.0.1 --flush-logs --master-data=2 --routines --triggers --events --single-transaction --databases icoding_admin > mydb.sql #CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000004', MASTER_LOG_POS=154; 就用导出的日志pos
启动复制链路
# 在slave上执行 mysql> change master to master_host='192.168.0.213', master_port=3306, master_user='synuser', master_password='123456', master_log_file='mysql-bin.000004', master_log_pos=154;
注意事项
主从复制的时候主从数据库的UUID不能一样,如果是镜像方式,启动前将UUID文件删除,会重新创建 cd /var/lib/mysql cat auto.cnf # 将他删除 server-uuid=890980d9-b072-11ea-8ab8-00163e03668d
启动主从复制
# show slave status \G 可以查看主从复制的状态和日志错误 # 启动slave mysql> start slave; # 停止slave mysql> stop slave;
作业1:搭建一个双主的结构
使用GTID方式进行复制链路
# 默认GTID是不开启的 # 如果开启以下操作不可用 # create table ..... select * from xxx; 不可用 # 在一个事务里不能创建和删除表 # 在一个事务里更新innodb引擎和myisam不可用
无意中删除了一个数据,可以做延时从库
# 从库做备份就无法做到数据的及时恢复 # 让我的从库做到延时同步 mysql> stop slave; mysql> change master to master_delay=10; # 延时10秒 mysql> start slave; mysql> show slave status \G;
master(实时slave,延时slave)
看完上述内容,你们掌握MySQL主从复制怎样实现高可用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。