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分库分表与分区的入门指南
Apr 22 MySQL
MySQL COUNT函数的使用与优化
May 10 MySQL
MySQL触发器的使用
May 24 MySQL
正确使用MySQL INSERT INTO语句
May 26 MySQL
SQL实现LeetCode(180.连续的数字)
Aug 04 MySQL
MySQL 如何限制一张表的记录数
Sep 14 MySQL
Mysql忘记密码解决方法
Feb 12 MySQL
MySQL慢查询优化解决问题
Mar 17 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 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面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP动态创建Web站点的方法
2011/08/14 PHP
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php读取文件内容的几种方法详解
2013/06/26 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP学习笔记之session
2018/05/06 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
Js切换功能的简单方法
2010/11/23 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
JS实现的用来对比两个用指定分隔符分割的字符串是否相同
2014/09/19 Javascript
JQuery实现防止退格键返回的方法
2015/02/12 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
2015/09/05 Javascript
JavaScript作用域示例详解
2016/07/07 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
各式各样的导航条效果css3结合jquery代码实现
2016/09/17 Javascript
不使用script导入js文件的几种方法
2016/10/27 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
小程序图片长按识别功能的实现方法
2018/08/30 Javascript
nodeJS与MySQL实现分页数据以及倒序数据
2020/06/05 NodeJs
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
python利用正则表达式搜索单词示例代码
2017/09/24 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
详解python中sort排序使用
2019/03/23 Python
详解Python3定时器任务代码
2019/09/23 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
孕妇装中的著名品牌:Isabella Oliver(伊莎贝拉·奥利弗)
2016/10/31 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
Herve Leger官网:标志性绷带连衣裙等
2018/12/26 全球购物
中层竞聘演讲稿
2014/01/09 职场文书
法学函授自我鉴定
2014/02/06 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
村主任“四风”问题个人整改措施
2014/10/04 职场文书
文明倡议书
2015/01/19 职场文书
《赵州桥》教学反思
2016/02/17 职场文书
Spring Boot 的创建和运行示例代码详解
2022/07/23 Java/Android