MySQL主从复制怎样实现高可用

57次阅读
没有评论

共计 2879 个字符,预计需要花费 8 分钟才能阅读完成。

MySQL 主从复制怎样实现高可用,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1. MySQL 主从复制实现高可用 1.1. 数据库永远是系统最脆弱的环节

80% 都是查询

缓存来保护数据库:Redis、ElasticSearch

数据库系统要有一定的容灾能力

数据状态化明显

1.2. 数据库的 HA 实现的方式 1.2.1. 高可以计算方式

MTTF:平均无故障时间

MTTR:平均维护时间

HA=MTTF/(MTTF+MTTR)* 100%(这就是常说的 99.95%)

1.2.2. 数据库高可用的三种方式

主从(非对称)

master-slave,热数据备份,从库一般是用来实时备份,从机可以快速切换为主库,读写分离(数据的一致性),从库一般设置为只读

前端应用走缓存,后端应用 Report 走从库查

对称方式

两个节点,互为主从,双主模式(两个数据库的主键如果是自动生成需要初始设置成不一样的)

A-1001,1003,1005,B-1002,1004,1006

双主下数据同步一定要实时

多机方式

MHA

MMM

MyCat(可以实现双主机热切)

1.2.3. 主从实现的逻辑

资源:两台数据库

Master 会将修改记录进 binlog

Slave 从主库 binlog 读取数据写入 relaylog

relaylog 和 binlog 的格式一样,可以用 mysqlbinlog 读取 relaylog

mysql show relaylog events in relay-bin.000001

binlog 的 postition 方式

GTID 方式:MySQL 版本 =5.7

1.3. 配置主从复制

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 主从复制怎样实现高可用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注丸趣 TV 行业资讯频道,感谢各位的阅读!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-17发表,共计2879字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)