MySQL高可用性实践指南

news2024/9/25 9:29:10

一 、Mysql 在服务器中的部署方法

1、安装依赖性

yum install libtirpc-devel-0.2.4-0.16.el7.x86_64.rpm -y
yum install ncurses-devel.x86_64 -y
yum install gcc-c++ -y
yum install openssl-devel -y
yum install cmake -y

2、下载并解压源码包

tar zxf mysql-boost-5.7.44.tar.gz

3、源码编译安装mysql

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_EXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_unicode_ci -DWITH_BOOST=/root/mysql-5.7.44/boost/boost_1_59_0/

make -j2

make install

4、部署mysql

生成启动脚本、

mkdir /data/mysql -p
useradd -s /sbin/nologin -M mysql
chown mysql.mysql -R /data/mysql
cd /usr/local/mysql/support-files/
cp mysql.server /etc/init.d/mysqld

生成配置文件

vim /etc/my.cnf

修改环境变量 

vim ~/.bash_profile

数据库初始化建立mysql基本数据

mysqld --initialize --user=mysql

/etc/init.d/mysqld start
chkconfig mysqld on

数据库安全初始化

 mysql_secure_installation

测试:

mysql -uroot -p

mysql> show databases;

二 mysql的组从复制

1、配置mastesr

vim /etc/my.cnf

/etc/init.d/mysqld restart

mysql -p123

配置用户权限

2、配置salve

vim /etc/my.cnf

/etc/init.d/mysqld restart
mysql> change master to MASTER_HOST='172.25.254.10',MASTER_USER='repl',MASTER_PASSWORD='123',MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=154;

mysql> start slave;
mysql> show slave status\G;

测试:

在master中创建数据库

在slave中查看

注:master  :  172.25.254.10   mysql-node1

       slave1   :  172.25.254.20   mysql-node2

       slave2   :  172.25.254.30   mysql-node3

3、当有数据时添加slave2

vim /etc/my.cnf

从master节点备份数据

 mysqldump -uroot -p hao > hao.sql

scp hao.sql root@172.25.254.30:/mnt/

利用master节点中备份出来的hao.sql在slave2中拉平数据

mysql -uroot -p -e "create database hao"
mysql -uroot -p hao < hao.sql

配置slave2的slave功能

先查看master的状态

mysql> change master to master_host='172.25.254.10',master_user='repl',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=797;
mysql> start slave;
mysql> show slave status\G;

在master添加用户

mysql> insert into hao.userlist values ('user','666');

在slave2中查看

 mysql> select * from hao.userlist;

4、延迟复制

当master端误操作,可以在slave端进行数据备份

mysql> stop slave sql_thread;
mysql> change master to master_delay=60;
mysql> start slave sql_thread;
mysql> show slave status\G;

5、慢查询日志

开启慢查询日志

mysql> set global slow_query_log=on;
mysql> show variables like "slow%";

测试慢查询:

mysql> select sleep (10);
cat /data/mysql/localhost-slow.log

6、mysql的并行复制

查看slave中的线程信息

默认情况下slave中使用的是sql单线程回放

mysql> show processlist;

 vim /etc/my.cnf

 /etc/init.d/mysqld restart
mysql> show processlist;

三 半同步模式

MySQL 的半同步复制(Semi-Synchronous Replication)是一种介于异步和全同步复制之间的复制模式。它提供了一种平衡点,使得主从复制的延迟时间得以降低,同时提高了数据的一致性。

1、半同步复制的工作原理

  • 主库写入: 在半同步模式下,当主库执行写操作(如INSERTUPDATEDELETE)时,它会在本地提交事务到存储引擎,但不会立即返回给客户端。

  • 从库确认: 主库会等待至少一个半同步模式下的从库接收到该事务,并将其写入到从库的relay log中。然后,从库会向主库发送确认(ACK)。

  • 主库响应: 收到至少一个从库的确认后,主库才会将事务提交结果返回给客户端。

2、半同步的特点

  • 数据一致性: 通过这种模式,可以确保在主库提交事务之前,至少有一个从库持有该事务的副本,从而增强数据的安全性和一致性。

  • 性能折中: 由于主库在等待从库确认的过程中会有短暂的延迟,因此半同步模式下的性能可能会比异步模式略低。

  • 故障恢复: 在主库发生故障时,从库已经有了最新的事务日志,切换到从库作为新主库时,数据丢失的风险会降低。

3、设置gtid

在master端开启gtid模式

 vim /etc/my.cnf

 /etc/init.d/mysqld restart

开启slave端的gtid

 vim /etc/my.cnf

mysql> change master to master_host='172.25.254.10',
    -> master_user='repl',
    -> master_password='123',
    -> master_auto_position=1;

注:重置从服务器的复制状态

mysql> RESET SLAVE ALL;

4、启用半同步模式

在master端配置启用半同步模式

vim /etc/my.cnf

安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

查看插件情况

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';

查看半同步功能状态

mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

在slave端开启半同步功能

vim /etc/my.cnf

安装半同步插件

mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
mysql> SET GLOBAL rpl_semi_sync_slave_enabled =1;
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';

测试:

在slave端

mysql> stop slave io_thread;

在master端写入数据

mysql> insert into hao.userlist values ('user4','123');

mysql> start slave IO_THREAD;

四 mysql高可用之组复制 (MGR)

1、组复制的概述

MySQL 高可用的组复制(MySQL Group Replication, MGR)是一种官方的高可用解决方案,允许在多个 MySQL 实例之间实现数据的自动复制和故障转移,从而确保系统的高可用性和数据一致性。

组复制的基本概念

  • 组成员 (Group Members):每个参与组复制的 MySQL 实例称为一个组成员。所有成员之间相互通信,共享数据变更。
  • 主备模式 (Single-Primary Mode):在这种模式下,组中只有一个主节点,负责所有的写操作。其余节点为备份节点,负责读取操作并从主节点复制数据。
  • 多主模式 (Multi-Primary Mode):在这种模式下,组中所有节点都可以进行写操作,数据会在所有节点间同步。

组复制的特点

  • 自动故障转移:如果组中某个节点发生故障,其他节点会自动接管其任务,确保服务的连续性。
  • 强一致性:组复制支持两种一致性模型,强一致性和最终一致性。强一致性通过 quorum 机制确保所有写操作的持久化。
  • 数据冲突处理:在多主模式下,组复制通过冲突检测和处理机制来解决并发写入冲突。

2、实现mysql组复制

在master中

rm -fr /data/mysql/
vim /etc/my.cnf

mysqld --user=mysql --initialize
/etc/init.d/mysqld start
mysql> alter user root@localhost identified by '123';

 3、创建复制用户

mysql> create user rpl_user@'%' identified by 'hao';
mysql> grant replication slave on *.* to rpl_user@'%';
mysql> flush privileges;


 配置并启动组复制

mysql> change master to master_user='rpl_user', master_password='hao' for channel'group_replication_recovery';  
mysql> set global group_replication_bootstrap_group=on;  
mysql> start group_replication;

禁用组复制的引导模式

mysql> set global group_replication_bootstrap_group=off;  

查询组复制成员的信息

mysql> select * from performance_schema.replication_group_members;

复制配置文件到slave

scp /etc/my.cnf root@172.25.254.20:/etc/my.cnf
scp /etc/my.cnf root@172.25.254.30:/etc/my.cnf

修改slave中的配置文件

 vim /etc/my.cnf

mysqld --user=mysql --initialize
/etc/init.d/mysqld start

mysql> alter user root@localhost identified by '123';

 创建复制用户, 配置并启动组复制,查询组复制成员的信息

mysql> select * from performance_schema.replication_group_members;

测试:

master中

mysql> create database hao;
mysql> create table hao.userlist(
    -> username varchar(10) primary key not null,
    -> password varchar(50) not null
    -> );
mysql> insert into hao.userlist values ('user1','111');
mysql> select * from hao.userlist;

salve1中

mysql> insert into hao.userlist values ('user2','222');
mysql> select * from hao.userlist;

salve2中

mysql> insert into hao.userlist values ('user3','333');
mysql> select * from hao.userlist;

注:vim /etc/hosts

五 mysql-router(mysql路由)

1、mysql-router概述

MySQL Router 是一个对应用程序透明的InnoDB Cluster连接路由服务,提供负载均衡、应用连接故障转移和客户端路 由。 利用路由器的连接路由特性,用户可以编写应用程序来连接到路由器,并令路由器使用相应的路由策略 来处理连接,使其连接到正确的MySQL数据库服务器。

2、Mysql route的部署方式

rpm -ivh mysql-router-community-8.4.0-1.el7.x86_64.rpm
/etc/init.d/mysqld stop
vim /etc/mysqlrouter/mysqlrouter.conf

 systemctl start mysqlrouter.service

测试:

在其他mysql中建立测试用户

mysql> create user root@'%' identified by 'hao';
mysql> grant all on *.* to root@'%';

mysql-router中

mysql -uroot -phao -h172.25.254.30 -P7001

重新登录

六 mysql高可用之MHA

1、MHA概述

MHA(Master High Availability)是一款专为MySQL设计的开源高可用解决方案,主要用于实现MySQL数据库的故障转移和主从复制管理,从而提高数据库服务的可靠性与可用性。

MHA 的组成

  • MHA由两部分组成:MHAManager (管理节点) MHA Node (数据库节点),
  • MHA Manager 可以单独部署在一台独立的机器上管理多个master-slave集群,也可以部署在一台 slave 节点上。
  • MHA Manager 会定时探测集群中的 master 节点。
  • 当 master 出现故障时,它可以自动将最新数据的 slave 提升为新的 master, 然后将所有其他的 slave 重新指向新的 master。

MHA 的特点

  • 自动故障切换过程中,MHA从宕机的主服务器上保存二进制日志,最大程度的保证数据不丢失
  • 使用半同步复制,可以大大降低数据丢失的风险,如果只有一个slave已经收到了最新的二进制日 志,MHA可以将最新的二进制日志应用于其他所有的slave服务器上,因此可以保证所有节点的数 据一致性
  • 目前MHA支持一主多从架构,最少三台服务,即一主两从

2、MHA部署实施

2.1、搭建主两从架构

/etc/init.d/mysqld stop
rm -fr /data/mysql/*
vim /etc/my.cnf

mysqld --user mysql --initialize
/etc/init.d/mysqld start
mysql_secure_installation

master中

mysql> create user 'repl'@'%' identified by 'hao';
mysql> grant replication slave on *.* to 'repl'@'%';
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;

mysql> show variables like 'rpl_semi_sync%';

mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';

slave中

mysql> change master to master_host='172.25.254.10',master_user='repl',master_password='hao',master_auto_position=1;
mysql> start slave;
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> set global rpl_semi_sync_master_enabled = 1;
mysql> show status like 'rpl_semi_sync%';

2.2、安装MHA所需要的软件

新建虚拟机

unzip MHA-7.zip

 ssh-keygen

ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.10
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.20
ssh-copy-id -i /root/.ssh/id_rsa.pub root@172.25.254.30
cd /root/.ssh/
scp id_rsa root@172.25.254.10:/root/.ssh/
scp id_rsa root@172.25.254.20:/root/.ssh/
scp id_rsa root@172.25.254.30:/root/.ssh/

yum install *.rpm -y

scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.10:/root
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.20:/root
scp mha4mysql-node-0.58-0.el7.centos.noarch.rpm root@172.25.254.30:/root

mysql-node中

mysql> create user root@'%' identified by 'hao';
mysql> grant all on *.* to root@'%';
yum install mha4mysql-node-0.58-0.el7.centos.noarch.rpm -y

2.3、配置MHA 的管理环境

2.3.1、生成配置目录和配置文件
mkdir /etc/masterha
tar zxf mha4mysql-manager-0.58.tar.gz

cat masterha_default.cnf app1.cnf > /etc/masterha/app1.cnf

vim /etc/masterha/app1.cnf

2.3.2、检测配置

检测网络及ssh免密

masterha_check_ssh --conf=/etc/masterha/app1.cnf

masterha_check_repl --conf=/etc/masterha/app1.cnf

2.4、MHA的故障切换

master未出现故障手动切换

masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.20 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

查看:

2.5、为MHA添加VIP功能

上传脚本

cp master_ip_failover master_ip_online_change /usr/local/bin/
chmod +x /usr/local/bin/master_ip_*

修改脚本中的vip

vim /usr/local/bin/master_ip_failover

vim /usr/local/bin/master_ip_online_change

vim /etc/masterha/app1.cnf

masterha_check_repl --conf=/etc/masterha/app1.cnf

启动监控程序

masterha_manager --conf=/etc/masterha/app1.cnf

在master中添加VIP

ip a a 172.25.254.100/24 dev eth0

模拟故障:

关闭主节点服务

/etc/init.d/mysqld stop

mha中

cat /etc/masterha/manager.log

查看vip变化

恢复故障主机

/etc/init.d/mysqld start
mysql> CHANGE MASTER TO MASTER_HOST='172.25.254.20',MASTER_USER='repl',MASTER_PASSWORD='hao',MASTER_AUTO_POSITION=1;

mha中手动切换后查看vip变化

rm -rf app1.failover.complete manager.log
masterha_master_switch --conf=/etc/masterha/app1.cnf --master_state=alive --new_master_host=172.25.254.10 --new_master_port=3306 --orig_master_is_new_slave --running_updates_limit=10000

查看:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2084025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

十年热爱,小鹏汽车开启AI新篇章

“每一台小鹏汽车&#xff0c;都是同级别智能的天花板。”在8月27日的小鹏10年热爱之夜暨小鹏MONA M03上市发布会上&#xff0c;小鹏汽车董事长、CEO何小鹏不无自豪地表示。 对于小鹏汽车来说&#xff0c;此次发布会有着非凡的意义&#xff0c;因为它不仅是对小鹏汽车过去十年辉…

前端用js发送邮箱 前端发送邮箱

前端发送邮箱 安装包依赖邮箱授权码demo eg:picture页面发送内容有效接受效果 code参考别人写的code 说明 安装包依赖 yarn add nodemailernodemailer官网 邮箱授权码 邮箱授权码: 邮箱授权码需要开通&#xff0c;以QQ邮箱为例&#xff0c;其它大同小异 demo eg: picture…

ROCm Code Object Tooling

ROCm&#xff08;Radeon Open Compute&#xff09;提供了一系列的工具&#xff0c;用于检查和提取编译器生成的代码对象&#xff0c;包括可执行文件、目标文件和共享对象库。 一、roc-obj roc-obj 是 ROCm&#xff08;Radeon Open Compute&#xff09;提供的一个高层级工具&a…

【软件文档】需求规格说明书编制模板

1 范围 1.1 系统概述 1.2 文档概述 1.3 术语及缩略语 2 引用文档 3 需求 3.1 要求的状态和方式 3.2 系统能力需求 3.3 系统外部接口需求 3.3.1 管理接口 3.3.2 业务接口 3.4 系统内部接口需求 3.5 系统内部数据需求 3.6 适应性需求 3.7 安全性需求 3.8 保密性需求 3.9 环境需求…

数据结构(邓俊辉)学习笔记】串 14——BM_GS算法:构造gs表

以下&#xff0c;就来简要地介绍 gs 表的具体构造算法。算法为了便于理解其原理&#xff0c;这里将整个算法划分为若干的层次&#xff0c;并逐层递进、逐层细化。 我们首先需要引入 MS 子串与 ss 表的概念。实际上&#xff0c;相对于模式串中的任何一个字符 P[j] &#xff0c…

RP2040 C SDK开发串口的使用

RP2040 C SDK开发串口的使用 &#x1f4cd;环境搭建部署篇《RP2040 VSCode C/C开发环境快速部署》&#x1f516;RP2040 有硬件串口资源有2个。&#x1f33f;参考RP2040 C SDK Hardware APIS&#xff1a;https://www.raspberrypi.com/documentation/pico-sdk/hardware.html#grou…

安卓APK重签名并查看MD5值-2024最新版

重签名 命令行运行&#xff1a; apksigner sign --ks your_keystore.jks --out output.apk input.apk在这个命令中&#xff1a; –ks 或 --keystore 参数后面是你的keystore文件路径。 your_keystore.jks 是你的keystore文件。 –out 参数后面是输出的签名后的APK文件名。 out…

发布npm包到GitLab教程

之前在研究如何搭建UI组件库&#xff08;内部使用&#xff09;&#xff0c;其中重要的一步就是发布npm包到GitLab。中间踩了很多坑&#xff0c;在这里记录一下整个流程方便大家快速上手。不足之处欢迎指出&#x1f64f; 1. 获取Token 在gitlab中打开access tokens申请页面&am…

鲲鹏服务器之ARM探知

什么叫arm架构 ARM架构过去称作进阶精简指令集机器&#xff08;Advanced RISC Machine&#xff0c;更早称作&#xff1a;Acorn RISC Machine&#xff09;&#xff0c;是一个32位精简指令集&#xff08;RISC&#xff09;处理器架构&#xff0c;其广泛地使用在许多嵌入式系统设计…

CSS系列之详解overflow(四)

一、什么是溢出 CSS 的 overflow 属性用于控制元素内容溢出时的表现方式。当元素的内容超出其指定的尺寸范围时&#xff0c;就会出现溢出现象。比如&#xff0c;一个元素的高度设置是 80px&#xff0c;但内容高度不只是 80px&#xff0c;内容此时就叫做溢出了。 那需要注意的…

【QT学习】1-2 Liunx环境下QT5.12.9软件安装1——VMware17.0.0虚拟机安装

注意&#xff1a;如果电脑已经安装低版本的VMware&#xff0c;千万不要卸载&#xff0c;直接覆盖安装&#xff0c;更新到新的安装版本 1.点击.exe文件&#xff0c;右键以管理员身份运行&#xff0c;点击下一步&#xff0c;下一步 2.选择软件安装位置后&#xff0c;点击下一步。…

Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)task3

批量归一化 其实归一化简单一点理解就类似于我们学过的数学中的每个数值减去平均值除以标准差。 神经网络中的批量归一化&#xff08;Batch Normalization&#xff0c;BN&#xff09;就是其中一个“把山铲平”的想法。不要小看优化这个问题&#xff0c;有时候就算误差表面是凸…

面试基本内容

1.类加载器 类加载器加载过程: 加载:&#xff08;将字节码文件加载到运行时数据区的方法区中/元空间&#xff09; 链接:&#xff08;验证:检查字节码文件是否合法—>准备:静态类变量赋值为默认值&#xff0c;不会实例变量分配初始化—>解析:将常量池引用&#xff0c;转化…

Java | Leetcode Java题解之第382题链表随机节点

题目&#xff1a; 题解&#xff1a; class Solution {ListNode head;Random random;public Solution(ListNode head) {this.head head;random new Random();}public int getRandom() {int i 1, ans 0;for (ListNode node head; node ! null; node node.next) {if (rando…

14.神经网络的基本骨架 - nn.Module 的使用

神经网络的基本骨架 - nn.Module 的使用 Pytorch官网左侧&#xff1a;Python API&#xff08;相当于package&#xff0c;提供了一些不同的工具&#xff09; 关于神经网络的工具主要在torch.nn里 网站地址&#xff1a;torch.nn — PyTorch 1.8.1 documentation Containers C…

【Linux】CodeServer:云IDE部署

Code-server 是一个开源项目&#xff0c;它允许你在任何地方通过浏览器访问 Visual Studio Code&#xff08;VS Code&#xff09;编辑器。这意味着你可以在远程服务器或云端运行 VS Code&#xff0c;并通过浏览器进行编码、调试和开发&#xff0c;而不需要在本地安装 VS Code。…

EtherCAT 转 ModbusTCP 网关

设备简介 本产品是 EtherCAT 和 Modbus TCP 网关&#xff0c;使用数据映射方式工作。 本产品在 EtherCAT 侧作为 EtherCAT 从站&#xff0c;接 TwinCAT 、 CodeSYS 、 PLC等&#xff1b;在 ModbusTCP 侧做为 ModbusTCP 主站&#xff08; Client &#xff09;或从站…

<数据集>无人机识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;9229张 标注数量(xml文件个数)&#xff1a;9229 标注数量(txt文件个数)&#xff1a;9229 标注类别数&#xff1a;1 标注类别名称&#xff1a;[UAV] 使用标注工具&#xff1a;labelImg 标注规则&#xff1a;对类别…

我如何解决 java.lang.ClassNotFoundException:javax.xml.bind.DatatypeConverter

优质博文&#xff1a;IT-BLOG-CN 问题 我如何解决java.lang.ClassNotFoundException&#xff1a;javax.xml.bind.DatatypeConverter 2024-08-25T02:31:25.46202:00 ERROR 21868 --- [fintonic-oauth] [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet…

springAI框架学习总结

springAI 1.springAI基本介绍 springAI是一个AI工程应用框架&#xff0c;其目标是将 Spring 生态系统设计原则&#xff08;例如可移植性和模块化设计&#xff09;应用于 AI 领域&#xff0c;并推广使用 POJO 作为 AI 领域应用程序的构建块。 2.特性 灵活的AIP支持chat,text…