MySQL数据库⾼可⽤HA实现小结


Posted in MySQL onJanuary 22, 2022

MySQL数据库⾼可⽤HA实现

1、 数据库⾼可⽤分析

⾼可⽤的衡量标准
数据库实现⾼可⽤的⼏种⽅式
MySQL数据库实现⾼可⽤

2、MySQL主从复制的容灾处理

MySQL⽀持的复制⽅式分析
主从场景切换⽅式
主从结构如何实现容灾

1. 什么是数据库⾼可⽤

1.1. 什么是⾼可⽤集群

N+1:N就是集群,1就是⾼可⽤,⾼可⽤的核⼼就是冗余,集群是保证服务最低使⽤标准的

1.2. ⾼可⽤集群的衡量标准

⼀般是通过系统的可靠性和可维护性来衡量的
MTTF:平均⽆故障时间,这是衡量可靠性的
MTTR:衡量系统的可维护性的
HA=MTTF/(MTTF+MTTR)*100%
SLA:99.999%:表示⼀年故障时间/宕机时间不超过6分钟

1.3. 实现⾼可⽤的三种⽅式

主从⽅式(⾮对称)
    这种⽅式的组织形式通常都是通过两个节点和⼀个或多个服务器,其中⼀台作为主节点
(active),另⼀台作为备份节点(standy),备份节点应该随时都在检测主节点的健康状况,当
    主节点发⽣故障,服务会⾃动切换到备份节点保障服务正常运⾏
对称⽅式
    两个节点,都运⾏着不同的服务且相互备份,相互检测对⽅的健康,当任意⼀个节点发⽣故障,这
    个节点上的服务就会⾃动切换到另⼀节点
多机⽅式
    包含多个节点多个服务,每个节点都要备份运⾏不同的服务,出现问题⾃动迁移

1.4. MySQL数据的⾼可⽤实现

1.4.1. 主从⽅式(⾮对称)

资源:两台同版本的MySQL数据库
主从实现的内部运⾏原理和机制
    First Step:主数据库服务器会把数据的修改记录记录进binlog⽇志,binlog⼀定要打开
    Second Step:从库的I/O进⾏读取主库的binlog内容后存⼊⾃⼰的Relay Log中继⽇志中,这
    个I/O线程会和主库建⽴⼀个普通的客户端连接,然后主库启动⼀个⼆进制转储线程,I/O线
    程通过转储线程读取binlog更新事件,同步完毕后I/O进⼊sleep,有新的更新会再唤醒
            Relay Log和Binlog的格式是⼀样的,可以⽤mysqlbinlog读取,也可show
            mysql> show relaylog events in 'relay-log.000001';
            ⽬前数据库有两种复制⽅式
                    binlog⽇志点position
                    GTID⽅式也要依赖binlog
    第三步:从服务器的SQL进程会从Relay Log中读取事件并在从库中重放
            从服务器执⾏重放操作时是可以在配置⾥声明是否写⼊服务器的binlog⽇志中

MySQL数据库⾼可⽤HA实现小结

1.4.2. 配置主从服务步骤

1.4.2.1. Binlog的⽇志点⽅式配置主从同步

配置主从服务器参数
在Master服务器上创建⽤于复制并授权的数据库账号
备份Master数据库并初始化Slave服务器数据
启动复制链路

Master服务器配置

chown -R mysql:mysql /usr/local/binlog/
#配置⽂件
server_id=163
log_bin=/usr/local/binlog/mysql-bin
12345

Slave服务器配置

server_id=196
log_bin=/usr/local/binlog/mysql-bin
relay_log=/usr/local/relaylog/relay-bin
#当slave宕机后,如果relay log损坏了,导致⼀部分中继⽇志没有处理,则放弃所有未完成的,
重新获取执⾏,保证完整性
relay_log_recovery=1 #让从库数据只读,super⽤户,super_read_only=on
read_only=on
#从库的复制链路服务不会随数据库重启⽽重启,需要⼿动启动
skip_slave_start=on
#确保数据⼀致性,通过innoDB的崩溃恢复机制来保护哦
master_info_repository=TABLE
relay_log_info_repository=TABLE
#select * from mysql.slave_master_info;
#select * from mysql.slave_relay_log_info;

主库授权

mysql> use msyql;
mysql> grant replication slave on *.* to 'syncuser'@'192.168.0.103'
identified by '123456';
mysql> flush privileges;
set global validate_password_policy=LOW;
set global validate_password_length=6;

初始化数据

mysqldump -uroot -p123456 --master-data=2 --single-transaction --routines -
-triggers --events --databases mydb > mydb.sql

创建复制链路

mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.0.102',
MASTER_PORT=3306,
MASTER_USER='syncuser',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=8122;
mysql> start slave;
mysql> show slave status \G;

从库的binlog是否写⼊?

默认情况下是不写⼊的:因为写⼊binlog会消耗I/O,所以性能会下降,如果需要在从库上恢复数
据就到Relay Log⾥进⾏导出处理
直接在从库上操作更⾏语句则会写⼊binlog
如果就是需要写⼊?在从库的my.cnf : log_slave_updates=on #开启同步并写⼊binlog
开启同步并写⼊binlog应⽤于从到从的情况

问题:只同步其中三个表

#Master配置⽂件
#不同步哪些数据库
binlog-ignore-db=mysql
binlog-ignore-db=test
binlog-ignore-db=information_schema
#同步哪些库
binlog-do-db=game
binlog-do-db=mydb

#Slave配置⽂件
#复制哪些数据库
replicate-do-db=mydb
replicate-do-db=game
#不复制哪些数据库
replicate-ignore-db=mysql
replicate-ignore-db=test

--replicate-wild-ignore-table=foo%.bar% 不复制使⽤表名称以开头foo且表名称以开头
的表的更新bar

1.4.2.1. GTID的⽅式来进⾏主从复制

不同点
	主从服务器的参数有不同的地⽅

#在上⾯的基础上,需要给主从服务器都加上
gtid_mode=on
enforce_gtid_consistency=on #开启强制GTID的⼀致性确保事务		

GTID下复制链路的启动
mysql>
CHANGE MASTER TO
MASTER_HOST='192.168.0.102',
MASTER_PORT=3306,
MASTER_USER='syncuser',
MASTER_PASSWORD='123456',
MASTER_AUTO_POSITION=1;

启动GTID后以下数据库操作不可⽤
	create table tableName.... select
	在⼀个事务中创建临时表
	在⼀个transaction中更新innoDB表和myisam表

2. 数据主从复制⽅式的容灾处理

2.1. MySQL⽀持的复制格式

2.1.1. 基于语句的复制(statement)

优点:记录少,只记录执⾏语句,易懂
    缺点:insert into table1(create_time) values(now()),这个now就不是当时的时间了

2.1.2. 基于⾏复制(row)

优点:⼏乎没有基于⾏复制⽆法处理的场景
    缺点:数据量太⼤了

2.1.3. 混合类型的复制(MIXED)

mixed格式默认采⽤statement,⽐如⽤到UUID(),ROW_COUNT()

2.1. MySQL主从复制模式

异步复制:MySQL默认就是异步复制,性能最好,但主从复制的数据不⼀致性概率最⼤
同步复制:当客户端发过来⼀个请求后,只有当所有的从库都写到Relay Log中,才回复给前端事
务完成,性能最差,但⼀致性很强
半同步复制:⾄少⼀个从库完成Relay Log写⼊后就返回事务完成给前端

主从上都要安装
mysql> install plugin rpl_semi_sync_master soname='semisync_master.so'
rpl_semi_sync_master_enabled
rpl_semi_sync_master_timeout #单位是毫秒,如果主库等待从库回复超过这个时间就⾃动切换
为异步

到此这篇关于MySQL数据库⾼可⽤HA实现的文章就介绍到这了,更多相关MySQL数据库⾼可⽤HA内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL学习总结-基础架构概述
Apr 05 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL CHAR和VARCHAR该如何选择
May 31 MySQL
MySQL中的布尔值,怎么存储false或true
Jun 04 MySQL
MySQL系列之十五 MySQL常用配置和性能压力测试
Jul 02 MySQL
MySql子查询IN的执行和优化的实现
Aug 02 MySQL
MySQL中datetime时间字段的四舍五入操作
Oct 05 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
MySQL 计算连续登录天数
May 11 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
DQL数据查询语句使用示例
Dec 24 MySQL
MySQL数据管理操作示例讲解
Dec 24 MySQL
weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
Jan 22 #MySQL
解决Mysql多行子查询的使用及空值问题
Jan 22 #MySQL
如何避免mysql启动时错误及sock文件作用分析
Jan 22 #MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 #MySQL
彻底解决MySQL使用中文乱码的方法
Jan 22 #MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 #MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 #MySQL
You might like
PHP 采集心得技巧
2009/05/15 PHP
如何用php获取文件名后缀
2013/06/09 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP count_chars()函数讲解
2019/02/14 PHP
AngularJS 路由详解和简单实例
2016/07/28 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
JS判断form内所有表单是否为空的简单实例
2016/09/09 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
jQuery延迟执行的实现方法
2016/12/21 Javascript
简单实现jQuery弹幕效果
2017/05/06 jQuery
vue实现表格数据的增删改查
2017/07/10 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
详解vue axios用post提交的数据格式
2018/08/07 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
2018/12/02 Javascript
Vue 的双向绑定原理与用法揭秘
2020/05/06 Javascript
jQuery--遍历操作实例小结【后代、同胞及过滤】
2020/05/22 jQuery
JavaScript实现点击出现子菜单效果
2021/02/08 Javascript
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Pyinstaller 打包exe教程及问题解决
2019/08/16 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
使用Python爬虫库requests发送请求、传递URL参数、定制headers
2020/01/25 Python
tensorboard 可以显示graph,却不能显示scalar的解决方式
2020/02/15 Python
python_mask_array的用法
2020/02/18 Python
Python 列表中的修改、添加和删除元素的实现
2020/06/11 Python
linux mint中搜狗输入法导致pycharm卡死的问题
2020/10/28 Python
python 对象真假值的实例(哪些视为False)
2020/12/11 Python
大学生励志演讲稿
2014/04/25 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
2015应届毕业生自荐信范文
2015/03/05 职场文书
2015年医院工作总结范文
2015/04/09 职场文书
白银帝国观后感
2015/06/17 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书