MySQL数据库高可用HA实现小结
本篇文章向大家介绍《MySQL数据库高可用HA实现小结》,主要包括高可用、MySQL数据库、HA,具有一定的参考价值,需要的朋友可以参考一下。
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⽇志中

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的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《MySQL数据库高可用HA实现小结》文章吧,也可关注golang学习网公众号了解相关技术文章。
MYSQL数据库如何设置主从同步
- 上一篇
- MYSQL数据库如何设置主从同步
- 下一篇
- weblogic服务建立数据源连接测试更新mysql驱动包的问题及解决方法
-
- 数据库 · MySQL | 1天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3164次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3376次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3405次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4509次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3785次使用
-
- Go实现分布式系统高可用限流器实战
- 2022-12-28 317浏览
-
- MySQL数据库的触发器的使用
- 2023-01-09 162浏览
-
- 容器化 | 基于 Kubernetes 的新一代 MySQL 高可用架构实现方案
- 2023-02-25 495浏览
-
- Mysql在项目中相关使用方法指南(简单操作数据库)
- 2022-12-30 188浏览
-
- MySQL数据库存储引擎介绍及数据库的操作详解
- 2023-01-07 182浏览

