首页 > 数据库 >MySQL数据库MHA实现

MySQL数据库MHA实现

时间:2024-07-20 20:30:39浏览次数:12  
标签:-- 数据库 mysql mha fan MySQL MHA mysql80

前提:
关闭所有机器的防火墙
关闭selinux

1、主库54 从库52/53

三台服务器环境mysql8.0.25
配置文件:
cat > /fan/etc/mysql80/my.cnf <<EOF
[mysqld]
server_id=54
binlog_format=row
datadir=/fan/data/mysql80/
basedir=/fan/softwares/mysql80/
port=3308
socket=/tmp/mysql3308.sock
mysqlx_port=33080
mysqlx_socket=/tmp/mysqlx33080.sock
log-bin=/fan/logs/mysql80/binlog/binary-log #配置MySQL数据库二进制文件存放位置

gtid-mode=on					#开启gtid
enforce-gtid-consistency=true	#开启gtid必须开启此参数
log-slave-updates=1 			#指定从库在复制源过程中记录到自己的二进制日志中

EOF

2、初始化数据库(3台数据库同样的操作)
配置数据库数据、二进制日志和日志存放位置(都可以自定义目录)

pkill mysqld
install -o mysql -g  mysql -d /fan/logs/mysql80/{redolog,binlog,doublewrite,errlog,undo}
rm -rf /fan/logs/mysql80/{redolog,binlog,doublewrite,errlog,undo}/*
rm -rf /fan/data/mysql80/*
ll /fan/data/mysql80/


初始化数据库
/fan/software/mysql80/bin/mysqld  --defaults-file=/fan/etc/mysql80/my.cnf --initialize-insecure --user=mysql --basedir=/fan/software/mysql80  --datadir=/fan/data/mysql80 


启动数据库
/fan/software/mysql80/bin/mysqld_safe  --defaults-file=/fan/etc/mysql80/my.cnf  >/dev/null  &

3、主库(54)操作

创建用户:
CREATE USER copy@'%' IDENTIFIED WITH mysql_native_password by '123';
GRANT REPLICATION SLAVE ON *.* to copy@'%';


从库(53、52)配置主从复制:

CHANGE REPLICATION SOURCE TO 
	SOURCE_HOST='192.168.15.54', #主库ip
	SOURCE_USER='copy',			 #复制用户
	SOURCE_PASSWORD='123',
	SOURCE_PORT=3308,
	SOURCE_AUTO_POSITION=1;		 #基于gtid的主从复制	
开启主从复制	
START REPLICA;

检查从库主从复制是否正常
SHOW SLAVE STATUS\G;
	 Slave_IO_Running: Yes  #两种为yes状态正常
	 Slave_SQL_Running: Yes

如果主从复制配置失败,请依次执行"STOP SLAVE;"和"RESET SLAVE ALL;"

4、部署MHA基础环境:

MHA下载:
	 https://github.com/yoshinorim/mha4mysql-manager/releases
	 
配置MHA关键程序软连接
ln -sv /fan/software/mysql80/bin/mysqlbinlog /usr/bin/mysqlbinlog
ln -sv /fan/software/mysql80/bin/mysql /usr/bin/mysql


配置54、53和52节点免密登录
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa -q

ssh-copy-id 192.168.15.54
ssh-copy-id 192.168.15.53
ssh-copy-id 192.168.15.52

将密钥下发到集群的所有节点,集群公用同一套密钥
for host in `seq 52 54`;do scp -rp ~/.ssh/  192.168.15.${host}:~ ; done
 
免密登录验证:
略



MHA Manager(管理节点)部署在54虚拟机上(也可以选择其他机器)
curl  -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
yum -y localinstall mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
yum -y localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm

MHA Node(子节点)52和53虚拟机
yum -y localinstall mha4mysql-node-0.58-0.el7.centos.noarch.rpm


主库(54)操作
	mkdir /fan/mha/{etc,logs,data} -pv
	
	主库创建MHA用户
	CREATE USER mha IDENTIFIED WITH mysql_native_password BY '123';
	GRANT ALL PRIVILEGES ON *.* to mha;
	
	准备MHA配置文件
	cat > /fan/mha/etc/mha.cnf <<EOF
	[server default]
	manager_log=/fan/mha/logs/manager          #指定MHA的manager组件的日志存储路径。 
	manager_workdir=/fan/mha/data/mha_manager  #指定MHA的manager组件的工作目录。
	master_binlog_dir=/fan/logs/mysql80/binlog/#指定主库的二进制日志的存储路径。  
	user=mha       				               #指定管理mha的用户             
	password=123                               #指定管理mha的用户密码。
	ping_interval=2							   #指定ping的间隔时间,即指定心跳的间隔时间
	repl_password=123						   #指定复制密码
	repl_user=copy  						   #指定复制的密码
	ssh_user=root 							   #指定各节点互信的用户
								  
	[server1]                                   
	hostname=192.168.15.53
	port=3308     
	candidate_master=1						  #指定候选的主库

	[server2]            
	hostname=192.168.15.52
	port=3308

	[server3]
	hostname=192.168.15.54
	port=3308

	EOF		

	mha的基础环境互信检查
	masterha_check_ssh /fan/mha/etc/mha.cnf
	都为ok为正常
	
	mha的基础环境主从状态检查
	masterha_check_repl /fan/mha/etc/mha.cnf

	启动MHA环境
	nohup masterha_manager --conf=/fan/mha/etc/mha.cnf --remove_dead_master_conf --ignore_last_failover  < /dev/null > /fan/mha/logs/manager.log   2>&1 &

	查看MHA状态
	masterha_check_status --conf=/fan/mha/etc/mha.cnf

标签:--,数据库,mysql,mha,fan,MySQL,MHA,mysql80
From: https://www.cnblogs.com/lifeiLinux/p/18313719

相关文章

  • Spring boot + Mybatis 实现数据库的增删改查(CRUD)操作
    Springboot+Mybatis实现数据库的增删改查(CRUD)操作利用Springboot,我们可以快速构建Spring框架应用。利用Mybatis为Springboot提供的依赖,我们可以快捷地连接到MySQL,实现web项目对数据库的CRUD操作。一、创建项目在IDEA中新建maven项目,并在pom.xml......
  • idea内置数据库DataGrip + 事务
    --事务的四大特性:--原子性:事务是不可分割的最小单元,要么全部成功,要么全部失败--一致性:事务完成时,必须所有的数据都保持一致性--隔离性:数据库系统提供的隔离机制(在事务未提交commit时,表中数据不变。一般不调整这里)--持久性:事务一段提交或者回归,它对数据库中的数据的改变就是......
  • SQL Server中的数据守护者:实现数据库的自定义触发器
    SQLServer中的数据守护者:实现数据库的自定义触发器在SQLServer的数据处理中,触发器是一种特殊的存储过程,它在特定数据库操作(如INSERT、UPDATE、DELETE)发生时自动执行。自定义触发器允许开发者根据特定需求自动执行业务逻辑,确保数据的完整性和一致性。本文将详细介绍如何在......
  • Day44.MySQL配置文件修改
    1.MySQL配置文件修改_编码问题导致需要修改配置2.MySQL配置文件修改_创建my.ini文件并查看用户登录MySQL是否会执行该文件内容3.MySQL配置文件修改_在my.ini中加入mysql编码配置后,重启mysql服务编码统一即可生效4.MySQL配置文件修改_在my.ini中加入管理员和密码,重启mysql服......
  • MySQL高阶(六)——存储过程
    文章目录6.MySQL高阶——存储过程存储过程数据准备变量定义局部变量实例会话变量-用户变量实例:全局变量实例:会话变量-系统变量实例:存出过程传参存储过程传参-in实例:存储过程传参-out实例:存储过程传参-inout实例:流程控制—判断if判断语句实例:加强case判断实例:......
  • kettle从入门到精通 第七十九课 ETL之kettle kettle读取数据库BLOB字段转换为文件
     上一课我们讲解了如何将文件以二进制流的方式写入数据库,本节课我们一起学习下如何将二进制数据读取为文件。 1、将二进制流转换为文件这里主要用到了步骤【文本文件输出】。表输入步骤从表中读取blob字段,java代码定义二进制流转换为文件的全路径,文本文件输出步骤根据全路径和......
  • idea内置数据库DataGrip + 多表操作sql语句 -- 逻辑外键建表 + 案例联系
    逻辑外键建表+案例联系--=====================================多表设计================================---------------------一对多职位与员工--员工子表createtabletb_emp(idintunsignedprimarykeyauto_incrementcomment'id',user......
  • kettle从入门到精通 第七十八课 ETL之kettle kettle将文件写入数据库BLOB字段
    前些日子一个小伙伴私聊我咨询如何将数据库中的BLOB字段读取为文件。帮他顺利读取文件之后我在想kettle肯定支持将文件写入数据库BLOB字段。今天先来一起学习下如何将文件以二进制流的方式写进数据库。 1、创建数据表,脚本如下:CREATETABLE`file`(`id`bigintNOTNULLA......
  • SQL Server中的定制视野:实现数据库的自定义视图
    SQLServer中的定制视野:实现数据库的自定义视图在SQLServer的数据处理和分析中,视图(View)是一种虚拟的表,其内容由SQL查询定义。自定义视图允许用户根据需要创建个性化的数据展示,可以简化复杂的查询,同时提供数据的逻辑封装和安全性控制。本文将详细介绍如何在SQLServer中实......
  • Linux安装MySQL
    一、MySQL安装对于MySQL数据库的安装,我们将要使用第二种安装方式rpm进行安装。那么首先我们了解一下什么是RPM?RPM:全称为Red-HatPackageManager,RPM软件包管理器,是红帽Linux用于管理和安装软件的工具。MySQL数据库的安装,主要的步骤如下:......