Redhat7.4部署MySQL-5.7.17搭建双主互为主从

news2025/1/15 6:39:47
一、准备工作

需要先准备已经搭建好的两台数据库,并且保证服务器之间网络是通的,3306端口可以相互访问。

二、修改两台数据库my.cnf 配置文件,将下列内容添加进去,放在 [mysqld] 下

我们暂定两台服务器为A服务和B服务,A服务IP:192.168.116.133  B服务IP:192.168.116.134

2.1、修改A服务my.cnf  注意 server-id参数两台服务不可一致,A服务设置为 1 B服务设置为2
vi /etc/my.cnf

#服务器唯一ID,每个server-id在复制环境中的所有MySQL服务器中必须是唯一的
server-id=1
#忽略 mysql 数据库中的所有表,这些表不会被复制到从服务器。
replicate-wild-ignore-table = mysql.%
#忽略 information_schema 数据库中的所有表,这些表也不会被复制到从服务器。
replicate-wild-ignore-table = information_schema.%
#这个选项开启GTID模式,这是一个在复制中用来唯一标识事务的方式。
gtid-mode=ON
#当开启GTID模式时,这个选项确保只允许可以安全地记录在GTID模式下的事务执行。
enforce_gtid_consistency=on
#这使从服务器将复制的事务写入自己的二进制日志中,这对级联复制或备份非常有用。
log-slave-updates=true
#设置复制主服务器信息存储在表中,而不是文件。
master-info-repository=TABLE
#设置中继日志信息存储在表中,而不是文件。
relay-log-info-repository=TABLE
#指定中继日志的路径。
relay_log = /usr/local/mysql/relay.log
#指定中继日志索引文件的路径。
relay_log_index = /usr/local/mysql/relay_log.index
#设置MySQL复制从服务器应当向主服务器报告的端口号。
report-port = 3306
#使从服务器同步写入其当前的主服务器信息到其磁盘上。
sync-master-info=1
#设置在从服务器上并行复制的线程数。
slave_parallel_workers=5
#开启二进制日志的校验和,使用CRC32校验算法。
binlog-checksum=CRC32
#使主服务器在发送事件之前验证二进制日志事件的校验和。
master-verify-checksum=1
#使从服务器在执行二进制日志事件前验证事件校验和。
slave-sql-verify-checksum=1
#在二进制日志中记录与行变更相关的事件。
binlog-rows-query-log_events=1
#在自增字段上,增加值的步长设置为2。
auto-increment-increment = 2
#主1从2, 在自增字段上,起始偏移量设置为2,当与increment一起使用时,可以帮助避免在复制设置中的自增ID冲突。
auto-increment-offset = 2
#从服务器在复制过程中遇到错误时将跳过所有错误,这是一个危险的做法,通常不推荐在生产环境中使用,因为它可能导致数据不一致。
#slave-skip-errors = all
#防止复制随着mysql启动而自动启动, 防止在MySQL服务器启动时自动启动复制进程。
skip-slave-start = 1
#设置从服务器的并行复制类型为基于逻辑时钟的并行复制。
slave-parallel-type = LOGICAL_CLOCK
2.2、修改B服务my.cnf  
vi /etc/my.cnf

#服务器唯一ID,每个server-id在复制环境中的所有MySQL服务器中必须是唯一的
server-id=2
#忽略 mysql 数据库中的所有表,这些表不会被复制到从服务器。
replicate-wild-ignore-table = mysql.%
#忽略 information_schema 数据库中的所有表,这些表也不会被复制到从服务器。
replicate-wild-ignore-table = information_schema.%
#这个选项开启GTID模式,这是一个在复制中用来唯一标识事务的方式。
gtid-mode=ON
#当开启GTID模式时,这个选项确保只允许可以安全地记录在GTID模式下的事务执行。
enforce_gtid_consistency=on
#这使从服务器将复制的事务写入自己的二进制日志中,这对级联复制或备份非常有用。
log-slave-updates=true
#设置复制主服务器信息存储在表中,而不是文件。
master-info-repository=TABLE
#设置中继日志信息存储在表中,而不是文件。
relay-log-info-repository=TABLE
#指定中继日志的路径。
relay_log = /usr/local/mysql/relay.log
#指定中继日志索引文件的路径。
relay_log_index = /usr/local/mysql/relay_log.index
#设置MySQL复制从服务器应当向主服务器报告的端口号。
report-port = 3306
#使从服务器同步写入其当前的主服务器信息到其磁盘上。
sync-master-info=1
#设置在从服务器上并行复制的线程数。
slave_parallel_workers=5
#开启二进制日志的校验和,使用CRC32校验算法。
binlog-checksum=CRC32
#使主服务器在发送事件之前验证二进制日志事件的校验和。
master-verify-checksum=1
#使从服务器在执行二进制日志事件前验证事件校验和。
slave-sql-verify-checksum=1
#在二进制日志中记录与行变更相关的事件。
binlog-rows-query-log_events=1
#在自增字段上,增加值的步长设置为2。
auto-increment-increment = 2
#主1从2, 在自增字段上,起始偏移量设置为2,当与increment一起使用时,可以帮助避免在复制设置中的自增ID冲突。
auto-increment-offset = 2
#从服务器在复制过程中遇到错误时将跳过所有错误,这是一个危险的做法,通常不推荐在生产环境中使用,因为它可能导致数据不一致。
#slave-skip-errors = all
#防止复制随着mysql启动而自动启动, 防止在MySQL服务器启动时自动启动复制进程。
skip-slave-start = 1
#设置从服务器的并行复制类型为基于逻辑时钟的并行复制。
slave-parallel-type = LOGICAL_CLOCK
三、重启A/B服务MySQL
3.1 重启A服务MySQL
sh /etc/init.d/mysql restart

3.2 重启B服务MySQL
sh /etc/init.d/mysql restart

四、进入A服务MySQL客户端进行配置主节点
#进入MySQL部署目录
cd /usr/local/mysql/bin/

#进入MySQL客户端
./mysql -uroot -p123456 

#授权从服务访问权限
# GRANT:授权命令。
# Replication Slave:授予的权限类型,允许用户作为复制从属服务器。
# *.*:表示所有数据库和所有表。
# 'root'@'192.168.116.134':用户名和允许连接的IP地址。这里的用户名是root,允许从192.168.116.134这个IP地址连接。
# Identified By '123456':设置用户的密码为123456。

Grant replication slave on *.* to 'root'@'192.168.116.134' identified by '123456';

#刷新MySQL的权限表,使得新的权限设置立即生效。
flush privileges;

五、进入B服务MySQL客户端配置从节点
#进入MySQL部署目录
cd /usr/local/mysql/bin/

#进入MySQL客户端
./mysql -uroot -p123456 

#CHANGE MASTER TO:这是MySQL的一个命令,用于更改从服务器连接到主服务器的配置。
#MASTER_HOST='master_ip':指定主服务器的IP地址。你需要将 'master_ip' 替换为实际的主服务器IP地址。
#MASTER_USER='replication_user':指定用于复制的用户名。这个用户必须已经在主服务器上创建,并且具有复制权限。
#MASTER_PASSWORD='password':指定复制用户的密码。你需要将 'password' 替换为实际的密码。
#MASTER_AUTO_POSITION = 1:这个参数是使用GTID进行复制的关键。它告诉从服务器使用GTID自动定位复制开始的位置,而不是依赖于传统的二进制日志文件名和位置。这简化了复制过程,因为不需要手动确定和设置复制开始的确切位置。

CHANGE MASTER TO
 MASTER_HOST = '192.168.116.133',
 MASTER_PORT = 3306,
 MASTER_USER = 'root',
 MASTER_PASSWORD = '123456',
 MASTER_AUTO_POSITION = 1;


启动从节点

start slave ;

查看主从同步状态

show slave status\G;

查看Slave_IO_Running状态是否为yes

查看Slave_SQL_Running状态是否为yes

查看Last_SQL_Error是否为空

以上检查无误的话B服务MySQL已经可以同步A服务MySQL的数据了


六、验证数据同步
6.1、下面验证下,在A服务创建一个testMysql的数据库,然后查询B服务是否存在,
#创建数据库testMysql
CREATE DATABASE `testMysql` ;

#查看数据库
show databases ;

6.2、查看B服务是否存在testMysql数据库
#查看数据库
show databases ;

此时可以看到,B服务MySQL已经将testMysql同步成功,此时一主一从搭建成功。

七、因为我们现在是需要搭建双主互为主从,这样的话还需要将B服务MySQL作为主,A服务MySQL作为从
7.1、进入B服务MySQL,配置主节点,授权A服务访问
#授权从服务访问权限
# GRANT:授权命令。
# Replication Slave:授予的权限类型,允许用户作为复制从属服务器。
# *.*:表示所有数据库和所有表。
# 'root'@'192.168.116.133':用户名和允许连接的IP地址。这里的用户名是root,允许从192.168.116.133这个IP地址连接。
# Identified By '123456':设置用户的密码为123456。

Grant replication slave on *.* to 'root'@'192.168.116.133' identified by '123456';

#刷新MySQL的权限表,使得新的权限设置立即生效。
flush privileges;

7.2、进入A服务MySQL,配置从节点,并启动从节点
#CHANGE MASTER TO:这是MySQL的一个命令,用于更改从服务器连接到主服务器的配置。
#MASTER_HOST='master_ip':指定主服务器的IP地址。你需要将 'master_ip' 替换为实际的主服务器IP地址。
#MASTER_USER='replication_user':指定用于复制的用户名。这个用户必须已经在主服务器上创建,并且具有复制权限。
#MASTER_PASSWORD='password':指定复制用户的密码。你需要将 'password' 替换为实际的密码。
#MASTER_AUTO_POSITION = 1:这个参数是使用GTID进行复制的关键。它告诉从服务器使用GTID自动定位复制开始的位置,而不是依赖于传统的二进制日志文件名和位置。这简化了复制过程,因为不需要手动确定和设置复制开始的确切位置。

CHANGE MASTER TO
 MASTER_HOST = '192.168.116.134',
 MASTER_PORT = 3306,
 MASTER_USER = 'root',
 MASTER_PASSWORD = '123456',
 MASTER_AUTO_POSITION = 1;

#启动从节点
start slave ;

7.3、查看从节点A服务MySQL同步状态

show slave status\G ;

查看Slave_IO_Running状态是否为yes

查看Slave_SQL_Running状态是否为yes

查看Last_SQL_Error是否为空

以上检查无误的话A服务MySQL已经可以同步B服务MySQL的数据了

7.3、验证数据同步

在B服务的testMysql数据库下创建一个test表,查看A服务MySQL是否同步过来

#先查看下所有数据库
show databases;

#进入testmysq数据库
use testmysql;

#查看testmysq数据库的表
show tables;

#创建test表
CREATE TABLE `test` (
	`id` INT NULL,
	`name` VARCHAR(50) NULL
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB; 

#查看表
show tables ;

此时可以看到B服务的test表已经创建成功了,此时我们看下A服务MySQL是否同步

通过验证可以看到A同步B,B同步A,已经全部同步成功,双主互为主从已经搭建完成。

八、如果想清除主从状态,可以使用下面命令:

#停止从节点,这个命令用于停止从服务器上的复制进程。在更改复制设置之前,通常需要先停止复制
stop slave;

#这个命令用于重置从服务器上的复制设置,包括清除所有复制信息和配置。执行此命令后,从服务器将不再知道主服务器的信息,需要重新配置。
reset slave all;

#这个命令用于重置主服务器上的二进制日志文件,删除所有现有的二进制日志,并创建一个新的日志文件。这个命令通常在主服务器上执行,以清除所有旧的日志记录。
reset master;

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

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

相关文章

分享一个用AI降本的思路,不懂代码也能上手

如何用AI解决实际的业务问题? 生财圈友我来利用ChatGPT做算法建模,每年为公司省下6万元。 今天他将分享通过ChatGPT进行数据分析的思路,从最开始定义问题到最终数据论证。 上手的实操过程门槛并不高,但可以实现把官方电商平台的…

ts 字符串不能做索引异常提示 type because expression of type ‘string‘

Element implicitly has an any type because expression of type string cant be used to index type 例子 let a{b:"1",c:"1" } var b"b"; let ca[b] let ca[b]就会爆这个错误,因为在编译器看来b是一个未知的东西,它不…

生物识别技术存在的问题及需要考虑的关键事项

微信关注公众号网络研究观获取更多。 对数字身份验证不太了解的人通常认为生物识别技术是我们所有身份验证问题的答案。 许多人认为身份验证的终极是面部识别,甚至可能是 DNA 分析。 生物识别技术(例如指纹、面部、虹膜、视网膜、静脉、几何、语音、…

148.【Windows DOS命令脚本文件】

Window待处理脚本 (一)、批处理编程初步体验1.什么是批处理程序?(1).批处理程序的定义(2).如何编辑批处理程序 2.批处理程序可以做什么?(1).匹配规则删除文件(2).新建文件,日志等(3).创建计算机病毒等 3.一个基本的批处理文件(1).带盘符的输出…

Java_多线程

有了多线程,我们就可以让程序同时做多件事情 作用: 提高效率 应用场景: 只要想让多个事情同时运行就需要用到多线程 比如:软件中的耗时操作、所有的聊天软件、所有的服务器... 并发和并行 并发:在同一时刻&#xff0…

一文详解逻辑越权漏洞

1. 逻辑越权 1.1. 漏洞原理 逻辑越权漏洞就是当用户跳过自己的权限限制,去操作同等级用户或者上级用户。正常的情况下,当一个用户去访问某个资源的时候,首先需要去登录验证自己的权限,其次是对数据的查询,最后返回数…

2024年学浪视频怎么下载到手机相册

随着2024年的到来,学浪平台继续为广大学习者提供优质的在线教育资源。然而,如何将这些宝贵的视频内容下载到手机相册,方便随时离线观看呢?无论您是想在旅途中学习,还是希望在没有网络的情况下复习课程,本文…

Linux之单机项目部署

1、虚拟机(VMware)创建Linux系统 1.1、创建虚拟机 1.2、配置虚拟机IOS映射文件 1.3、虚拟机内部相关配置 等待加载即可,加载完后会弹出图形化界面,如图: 注意:一般我们做为管理员使用ROOT账号来操作&#x…

Java之SpringSecurity使用心得

文章目录 一、内存身份认证二、jdbc身份认证三、自定义登录页 一、内存身份认证 添加pom依赖 <!-- Spring Security提供的安全管理依赖启动器 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-s…

串口服务器在工业控制领域的应用:深度解析与前沿实践

在工业控制领域&#xff0c;随着技术的不断发展&#xff0c;传统的串口通信方式已经难以满足现代工业系统对高效、稳定、安全通信的需求。此时&#xff0c;串口服务器作为一种先进的通信技术解决方案&#xff0c;正在逐步改变工业控制领域的通信格局。本文将深度解析串口服务器…

第十届水利、土木工程国际学术会议暨工程安全与防灾论坛 (ICHCE ESDP 2024)

文章目录 一、会议详情二、重要信息三、会议简介四、组织单位五、出席嘉宾六、大会议程七、咨询 一、会议详情 二、重要信息 会议官网&#xff1a;www.ichce.org 大会时间&#xff1a;2024年8月9-11日 最后一轮截稿时间&#xff1a;2024年6月30日 报名截止时间&#xff1a;2…

得物小程序逆向+qt可视化(不含sku)

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01;wx a15018601872 本文章未…

linux-配置服务器之间 ssh免密登录

前言 在管理多台Linux服务器时,为了方便操作和自动化任务,实现服务器之间的SSH免密登录是非常有必要的。SSH免密登录可以避免每次远程连接时输入密码,大大提高效率。本文将详细介绍SSH免密登录的原理和实现步骤。 一、原理解释 SSH免密登录的实现依赖于SSH密钥对,主要是利用…

为什么手机冬天续航短 – 锂电池的温度特性曲线

原文出自微信公众号【小小的电子之路】 相信大家都有这样的经历&#xff1a;手机的续航能力在寒冷的冬天会有一定程度的降低&#xff0c;有些手机甚至充不进去电。在这种情况下&#xff0c;有些人可能会在手机上贴一个暖宝宝。其实这个问题不止出现在手机上&#xff0c;大家如果…

Mybatis Cache(一)MybatisCache+Redis

前面提到了&#xff0c;使用mybatis cache&#xff0c;一般是结合redis使用。 一、demo 1、数据表 create table demo.t_address (id int auto_incrementprimary key,address_name varchar(200) null,address_code varchar(20) null,address_type int n…

Java进阶学习笔记4——Static应用知识:代码块

代码块&#xff1a; 代码块是类的五大成员之一&#xff08;成员变量、构造器、方法、代码块、内部类&#xff09;。 Java类生命周期&#xff1a;加载、验证、准备、初始化、卸载。 代码块分为两种&#xff1a; 静态代码块&#xff1a; 格式&#xff1a;static {} 特点&…

Linux--网络通信(一)概述

网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间的通信&#xff0c;属于 IPC 的一种&#xff0c; 通常称为 socket IPC。所以网络通信是为了解决在网络环境中&#xff0c;不同主机上的应用程序之间的通信问题。 大概可以分为三个层…

物联网应用开发--STM32与机智云通信(ESP8266 Wi-Fi+手机APP+LED+蜂鸣器+SHT20温湿度传感器)

实现目标 1、熟悉机智云平台&#xff0c;会下载APP 2、熟悉新云平台创建产品&#xff0c;项目虚拟调试 3、掌握云平台生成MCU代码&#xff0c;并移植。机智云透传固件的下载 4、具体目标&#xff1a;&#xff08;1&#xff09;注册机智云平台&#xff1b;&#xff08;2&…

转行3年涨薪300%,我总结了一套产品经理快速入门指南!

想转行的产品小白&#xff0c;初期一定会遇到这个问题——我要如何 0 基础转行产品经理&#xff1f; 要想 0 基础快速转行产品经理&#xff0c;我通过个人实践总结了 5 个关键点&#xff0c;可以参考。 一、熟悉产品经理的工作全流程 转行的产品小白&#xff0c;首先要建立产…

mninst数据集图片下载

//不需要在官网下载&#xff0c;直接通过python代码&#xff0c;利用pytorch下载即可 from icecream import ic from torchvision import datasets from tqdm import tqdm import ostrain_data datasets.MNIST(root"./data/", trainTrue, downloadTrue) test_data …