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

一、准备工作

需要先准备已经搭建好的两台数据库,并且保证服务器之间网络是通的,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;
  • 12
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Male晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值