返回顶部
首页 > 资讯 > 数据库 >MySQL数据库高可用HA实现小结
  • 290
分享到

MySQL数据库高可用HA实现小结

2024-04-02 19:04:59 290人浏览 独家记忆
摘要

目录Mysql数据库高可用HA实现1、 数据库高可用分析2、mysql主从复制的容灾处理1. 什么是数据库高可用1.1. 什么是高可用集群1.2. 高可用集群的衡量标准1.3. 实现

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数据库高可用HA实现的文章就介绍到这了,更多相关MySQL数据库高可用HA内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL数据库高可用HA实现小结

本文链接: https://lsjlt.com/news/163314.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL数据库高可用HA实现小结
    目录MySQL数据库高可用HA实现1、 数据库高可用分析2、MySQL主从复制的容灾处理1. 什么是数据库高可用1.1. 什么是高可用集群1.2. 高可用集群的衡量标准1.3. 实现...
    99+
    2024-04-02
  • MySQL数据库⾼可⽤HA怎么实现
    小编给大家分享一下MySQL数据库⾼可⽤HA怎么实现,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!MySQL数据库⾼可⽤HA实现1、 数据库⾼可⽤分析⾼可⽤的衡量...
    99+
    2023-06-28
  • Mysql数据库高可用
    Mysql数据库高可用Mysql(5.7.19)+keepalive(1.3.0)    +RHEL6.5Mysql下载地址https://cdn.mysql.com//Dow...
    99+
    2024-04-02
  • MySQL数据库实现高可用架构之MHA的实战
    目录一、MySQLMHA介绍1.1什么是MHA1.2MHA的组成1.3MHA的特点二、MySQLMHA搭建1.MHA架构部分2.故障模拟部分3.实验环境三、实验步骤1、关闭防火墙和S...
    99+
    2024-04-02
  • mysql、heartbeat、drbd如何实现数据库高可用群集
    下面一起来了解下mysql、heartbeat、drbd如何实现数据库高可用群集,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql、heartbeat、drbd如何实现数据库高可用群集这篇短内容是...
    99+
    2024-04-02
  • 基于MHA+semi sync实现mysql数据库的高可用
    一、实验原理: 1、拓扑结构图如下: 2、工作原理: 从宕机崩溃的master保存二进制日志事件(binlog events) 识别含有最新更新的slave 应用差异的中继日志(relay ...
    99+
    2024-04-02
  • 如何在MySQL数据库中实现MHA高可用配置
    本篇文章给大家分享的是有关如何在MySQL数据库中实现MHA高可用配置,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、MHA介绍(一)、什么是MHAMHA(MasterHig...
    99+
    2023-06-06
  • MySQL数据库常用命令小结
    目录1.对数据库常用命令2.数据库中对表的命令插入数据数据查询常用函数模糊查询多表连接查询1.对数据库常用命令 1.连接数据库mysql -u用户名 -p密码2.显示已有数据库sho...
    99+
    2023-01-12
    MySQL数据库命令 MySQL命令
  • 如何在MySQL中实现数据库复制和高可用性
    要在MySQL中实现数据库复制和高可用性,可以采用以下方法: MySQL复制:MySQL提供了内置的复制功能,可以使用主从复制或...
    99+
    2024-03-06
    MySQL
  • linux系统mysql数据库MHA高可用
    原文地址:...
    99+
    2018-05-17
    linux系统mysql数据库MHA高可用 数据库入门 数据库基础教程 数据库 mysql
  • MySQL数据库之MHA高可用群集
    MHA概述 日本DeNA公司youshimaton (现就职于Facebook公司) 开发一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件 MHA的组成 MHA Manager (...
    99+
    2024-04-02
  • PHP如何实现MySQL数据库可用性
    本文小编为大家详细介绍“PHP如何实现MySQL数据库可用性”,内容详细,步骤清晰,细节处理妥当,希望这篇“PHP如何实现MySQL数据库可用性”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。监控数据库的运行状况通...
    99+
    2023-07-06
  • 怎么在MySQL数据库中实现MMM高可用群集架构
    这篇文章给大家介绍怎么在MySQL数据库中实现MMM高可用群集架构,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。MMM高可用架构说明mmm_mond:监控进程,负责所有的监控工作,决定...
    99+
    2024-04-02
  • 如何在Aurora数据库中实现高可用性
    在Aurora数据库中实现高可用性可以采取以下措施: 使用Aurora的自动故障恢复功能:Aurora数据库提供了自动故障检测和...
    99+
    2024-04-02
  • Mysql数据库函数之函数的用法小结
    目录函数的使用一. 单行函数:可以理解为向函数传入一个参数,返回一个值。单行函数1.字符串函数(String,StringBuilder)2.数值函数(Math)3.日期和时间函数4.流程函数(IF SWITCH)5.j...
    99+
    2024-04-02
  • MySQL数据库--主主复制+keepalived高可用
                  MySQL数据库--主主复制+keepalived高可用之前我们有学习过mysql的主从复制,主要...
    99+
    2024-04-02
  • 【MySQL】数据库基本知识小结
    哈喽大家好,我是阿Q,今天我们来总结一下【MySQL】 入门的必备知识点吧~ 文章目录 数据库的基本概念什么是元组, 码, 候选码, 主码, 外码, 主属性, 非主属性?主键和外键有什么区别为...
    99+
    2023-09-07
    数据库 mysql java 范式 ER图
  • PHP实现MySQL数据库可用性的方法
    PHP作为一种常用的Web编程语言,经常用于开发和管理数据库。当涉及到MySQL数据库可用性的问题时,PHP提供了一些方法来确保数据库的稳定性和正常运行。在本文中,将详细介绍如何使用PHP实现MySQL数据库的可用性。监控数据库的运行状况通...
    99+
    2023-05-15
    PHP 可用性 mysql数据库
  • 数据库高可用方案
    方案一:双机高可用方案1.数据库架构图 2.特点    一台机器A作为读写库,另一台B作为备份库;A库故障后B库作为读写库;A库恢复后A作为备库。3.开发说...
    99+
    2024-04-02
  • MySQL - MMM 实现 MySQL 高可用
    MMM (Master-Master replication manager for MySQL,MySQL 主主复制管理器)是一套支持双主故障切换和双主日常管理的脚本程序。MMM 使用 Perl 语...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作