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

目录
  • MySQL数据库⾼可⽤HA实现
    • 1、 数据库⾼可⽤分析
    • 2、MySQL主从复制的容灾处理
  • 1. 什么是数据库⾼可⽤
    • 1.1. 什么是⾼可⽤集群
    • 1.2. ⾼可⽤集群的衡量标准
    • 1.3. 实现⾼可⽤的三种⽅式
    • 1.4. MySQL数据的⾼可⽤实现
      • 1.4.1. 主从⽅式(⾮对称)
      • 1.4.2. 配置主从服务步骤
  • Master服务器配置
  • Slave服务器配置
  • 主库授权
  • 初始化数据
  • 创建复制链路
  • 从库的binlog是否写⼊?
  • 问题:只同步其中三个表
  • 1.4.2.1. GTID的⽅式来进⾏主从复制
  • 2. 数据主从复制⽅式的容灾处理
    • 2.1. MySQL⽀持的复制格式
      • 2.1.1. 基于语句的复制(statement)
      • 2.1.2. 基于⾏复制(row)
      • 2.1.3. 混合类型的复制(MIXED)
  • 2.1. MySQL主从复制模式

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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MYSQL数据库中常用函数介绍

    目录 1 基本函数 2 三角函数 3 进制转换函数 4 字符串函数 5 日期和时间 6 指数和对数 7 流程控制函数 8 加密与解密函数 9 MYSQL信息函数 总结 1 基本函数 2 三角函数 2.1 角度与弧度的换算 3 进制转换函数 4 字符串函数 5 日期和时间 5.1 获取日期和时间 5.2 日期与时间戳的转换 5.3 获取月份.星期.天数 6 指数和对数 7 流程控制函数 8 加密与解密函数 -- 不可逆 SELECT MD5( 'MYSQL' ), SHA( 'MYSQL' ) F

  • MySQL数据库索引以及失效场景详解

    目录 1. MySQL索引概述 1.1 索引的概念 1.2 索引的特点 1.3 索引的分类 1.4 索引的使用场景 2. 索引失效场景 2.1 索引失效9种场景 2.2 索引失效场景总结 3. 索引失效验证 3.1 全值匹配 3.2 最佳左前缀 3.3 索引计算 3.4 索引范围:索引列上不能有范围查询 3.5 索引覆盖:尽量使用覆盖索引 3.6 不等: 使用不等于(!= 或者 <>)的时候 3.7 null:字段的is not null 与is null 3.8 like:like的前后模糊

  • MySQL数据库JDBC编程详解流程

    目录 一.数据库编程的必备条件 二.Java的数据库编程:JDBC 三.JDBC工作原理 四.JDBC开发步骤 五.JDBC操作步骤 六.优化JDBC的部分代码 1.获取数据库连接对象 2.操作命令对象Statement 3.ResultSet对象 4.总结 一.数据库编程的必备条件 编程语言: 如Java.C++.C.Python等 数据库: 如Oracle.MySQL.SQL Server等 数据库驱动包: 不同的数据库,要使用编程语言来操作时,就需要使用该数据库厂商提供的数据库驱动包. 如

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

    目录 MySQL数据库⾼可⽤HA实现 1. 数据库⾼可⽤分析 2.MySQL主从复制的容灾处理 1. 什么是数据库⾼可⽤ 1.1. 什么是⾼可⽤集群 1.2. ⾼可⽤集群的衡量标准 1.3. 实现⾼可⽤的三种⽅式 1.4. MySQL数据的⾼可⽤实现 1.4.1. 主从⽅式(⾮对称) 1.4.2. 配置主从服务步骤 Master服务器配置 Slave服务器配置 主库授权 初始化数据 创建复制链路 从库的binlog是否写⼊? 问题:只同步其中三个表 1.4.2.1. GTID的⽅式来进⾏主从复制

  • MySql数据库中Select用法小结

    一.条件筛选 1.数字筛选:sql = "Select * from [sheet1$] Where 销售单价 > 100" 2.字符条件:sql = "Select * from [sheet1$] Where 物品名称 ='挡泥板'" 3.日期条件:sql = "Select * from [sheet1$] Where 物品名称 ='挡泥板'" 4.区间条件:sql = "Select * from [sheet1$] Wh

  • MySQL数据库操作常用命令小结

    创建数据库 最简单的方式: 复制代码 代码如下: CREATE DATABASE  my_db; 或者是: 复制代码 代码如下: CREATE DATABASE IF NOT EXISTS my_db; 创建utf8编码的数据库: 复制代码 代码如下: CREATE DATABASE IF NOT EXISTS my_db default character set utf8 COLLATE utf8_general_ci; 那么在这个数据库下创建的所有数据表的默认字符集都会是utf8了,注意后

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

    目录 MySQL数据库高可用HA实现 1. 数据库高可用分析 2.MySQL主从复制的容灾处理 1. 什么是数据库高可用 1.1. 什么是高可用集群 1.2. 高可用集群的衡量标准 1.3. 实现高可用的三种方式 1.4. MySQL数据的高可用实现 1.4.1. 主从方式(⾮对称) 1.4.2. 配置主从服务步骤 Master服务器配置 Slave服务器配置 主库授权 初始化数据 创建复制链路 从库的binlog是否写⼊? 问题:只同步其中三个表 1.4.2.1. GTID的⽅式来进⾏主从复制

  • C++连接mysql数据库的两种方法小结

    现在正做一个接口,通过不同的连接字符串操作不同的数据库.要用到mysql数据库,以前没用过这个数据库,用access和sql server比较多.通过网上的一些资料和自己的摸索,大致清楚了C++连接mysql的方法.可以通过2种方法实现. 第一种方法是利用ADO连接, 第二种方法是利用mysql自己的api函数进行连接. 第一种方法可以实现我当前的需求,通过连接不同的字符串来连接不同的数据库.暂时只连接了mysql,sqlserver,oracle,access.对于access,因为它创建表的

  • MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)--MySQL 数据库 like 语句通配符模糊查询小结 前言 今天在使用MySQL语句执行增删改查操作时,控制台报出了以下错误:Parameter index out of range (1 > number of parameters, which is 0).翻译过来意思就是:查到结果数据为1,真实值应为0,参数越界,产生错误.如此也就明

  • MySQL 数据库的监控方式小结

    目录 1.连接数(Connects) 2.缓存(bufferCache) 3.锁(lock) 4.慢SQL 5.statement 6.吞吐(Database throughputs) 7.数据库参数(serverconfig) 8.慢 SQL排查步骤 9.总结 对于当前数据库的监控方式有很多,分为数据库自带.商用.开源三大类,每一种都有各自的特色: 而对于 mysql 数据库由于其有很高的社区活跃度,监控方式更是多种多样,不管哪种监控方式最核心的就是监控数据,获取得到全面的监控数据后就是灵活的

  • 六条比较有用的MySQL数据库操作的SQL语句小结

    在MySQL数据库操作中,我们常常编写一些SQL语句来实现自己想要的功能.但是对于初学MySQL数据库的人来说这似乎又有一定的难度.本文我们总结了六条比较有用的SQL语句,初学者可以套用下面的格式,接下来就让我们一起来了解一下这部分内容. 1.计算年数 如果您想通过生日来计算这个人的年龄,可以用以下的语句来实现: SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(now()) - TO_DAYS(@dateofbirth)), '%Y') + 0; 2.两个时间的差 取得

  • MySQL数据库备份和还原的常用命令小结

    备份MySQL数据库的命令 mysqldump -hhostname -uusername -ppassword databasename > backupfile.sql 备份MySQL数据库为带删除表的格式备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库. mysqldump ---add-drop-table -uusername -ppassword databasename > backupfile.sql 直接将MySQL数据库压缩备份 m

  • 命令行模式下备份、还原 MySQL 数据库的语句小结

    为了安全起见,需要经常对数据库作备份,或者还原.对于 MySQL 而言,最方便的方法可能就是用 phpMyAdmin 的导出.导入功能了,但如果你的数据库体积比较大,作为 Web 应用的 phpMyAdmin 可能会遭遇"超时"而操作失败.所以,学会在命令行模式下备份.还原数据库,还是很有必要的. 1.备份数据库 在 Linux 命令行模式下备份 MySQL 数据库,用的是 mysqldump 命令: 复制代码 代码如下: mysqldump -u mysqluser -p test_

随机推荐