mysql主从搭建(gtid)

本文详细描述了如何在三台主机上搭建MySQL主从架构,包括修改主机名、配置hosts、关闭防火墙和SELinux、安装MySQL服务、编辑my.cnf文件以启用GTID一致性、配置主从同步用户,以及设置两个slave节点。
摘要由CSDN通过智能技术生成

一、前言

MySQL GTID(Global Transaction Identifier)主从复制原理是MySQL replication的一个进步,它使得复制配置变得更简单,并提供了更高的数据一致性,GTID是全局唯一的事务ID,由两个部分组成:<server_uuid>:<transaction_id>,用来标识主库上执行的每个事务。当一个事务在主库上提交时,对应的GTID会发送到从库上,从库使用该GTID来确保只应用一次相应的事务,从而避免重复执行,在所有节点的日志文件中,同一个event的gtid值都是一致的

server_uuid:服务器的唯一标识符,用于标识事务最初在哪个服务器上生成

transaction_id:事务的编号,在每个服务器上是连续递增的

工作流程

1.master节点一个事务被执行并提交,提交时,事务被赋予一个唯一的GTID,该事务及其GTID被记录在master节点的binlog中

2.slave节点的io线程获取master节点的binlog,写入到relaylog中,读取值根据gitd_next变量决定slave下一个执行哪个gtid事务

3.slave节点的SQL线程读取relaylog中的事务,通过slave节点的binlog检查事务的GTID是否有记录

4.如果该GTID在从服务器上未被应用过,从服务器就执行该事务并将其记录到binlog

5.如果该GTID已经被应用过,则跳过该事务,避免重复执行

搭建mysql主从使用三台主机,主机信息如下

ip端口主机名角色
10.1.60.803306rabbitmq04salve
10.1.60.1143306rabbitmq01slave
10.1.60.1153306rabbitmq02master

二、部署

为每台主机修改主机名并配置hosts

hostnamectl set-hostname rabbitmq04

vi /etc/hosts

10.1.60.114 rabbitmq01
10.1.60.115 rabbitmq02
10.1.60.80 rabbitmq04

关闭防火墙与selinux

systemctl stop firewalld&&systemctl disable firewalld

setenforce 0

每台主机安装mysql服务

参考:yum安装mysql 5.7_yum安装mysql5.7_Apex Predator的博客-CSDN博客

 编辑配置文件

vi /etc/my.cnf

gtid_mode=on      #开启gtid
enforce-gtid-consistency=on  #当启用此选项时,MySQL 强制执行 GTID 一致性,确保从服务器不会执行未在主服务器上存在的事务。这有助于防止数据不一致
log_slave_updates=on  #当启用此选项时,从服务器将其接收到的更改记录到自己的二进制日志中,这允许从服务器充当其他从服务器的主服务器。这在构建链式主从复制拓扑时非常有用
relay_log_purge=0  #当设置为 0 时,从服务器不会自动删除中继日志。这意味着中继日志将一直保留,直到管理员手动删除它们。这可以用于调试和数据恢复的目的
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid  
server_id=2          #需要每个都不一样id
log_bin=mysql-bin
binlog_format=mixed
expire_logs_days=7
max_binlog_size=1g

重启mysql服务

systemctl restart mysqld

查看gtid服务是否生效

mysql -u root -p

show variables like '%gtid%';

每台主机配置相同的用于主从同步的用户

GRANT SELECT, RELOAD, PROCESS, SUPER, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'orchestrator'@'%' identified by '11111111';

flush privileges;

配置两个slave主机的mysql数据库,此处跟binlog主从配置不一样,不需要知道binlog文件号和pos值

CHANGE MASTER TO MASTER_HOST='rabbitmq02',

MASTER_USER='orchestrator',

MASTER_PASSWORD='11111111',

MASTER_PORT=3306,

master_auto_position=1;

start slave;

show slave status\G

也可以查看master库的状态

show master status; 

 至此gtid主从数据库配置完成

MySQL主从复制是指将一个MySQL数据库的变化同步到另一个MySQL数据库上,从而实现数据的备份、负载均衡、读写分离等功能。下面我们来介绍一下MySQL主从复制的搭建过程。 1. 配置主服务器 首先需要在主服务器上配置一些参数。打开MySQL配置文件my.cnf,在[mysqld]下添加以下内容: ``` server-id=1 #服务器唯一ID log-bin=mysql-bin #启用二进制日志 binlog-do-db=testdb #指定需要复制的数据库名 ``` 然后重启MySQL服务。 2. 配置从服务器 接着需要在从服务器上配置一些参数。打开MySQL配置文件my.cnf,在[mysqld]下添加以下内容: ``` server-id=2 #服务器唯一ID,要保证与主服务器不同 ``` 然后重启MySQL服务。 3. 创建复制用户并授权 在主服务器上创建一个用于复制的用户,并授权给从服务器使用。在MySQL命令行中输入以下命令: ``` CREATE USER 'replication'@'%' IDENTIFIED BY 'password'; #创建用户 GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%'; #授权 ``` 其中,'password'是复制用户的密码。 4. 获取主服务器状态信息 在主服务器上执行以下命令,获取主服务器的状态信息: ``` SHOW MASTER STATUS; ``` 会显示出如下信息: ``` +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 120 | testdb | | | +------------------+----------+--------------+------------------+-------------------+ ``` 其中,File列和Position列的值会在后面的步骤中用到。 5. 配置从服务器复制信息 在从服务器上执行以下命令,配置从服务器的复制信息: ``` CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='replication', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', #主服务器的File值 MASTER_LOG_POS=120; #主服务器的Position值 ``` 其中,master_ip是主服务器的IP地址,'password'是复制用户的密码,mysql-bin.000001和120分别是主服务器的File值和Position值。 6. 开启从服务器复制 在从服务器上执行以下命令,开启从服务器的复制: ``` START SLAVE; ``` 执行成功后,可以使用以下命令查看从服务器的状态: ``` SHOW SLAVE STATUS\G; ``` 如果看到“Slave_IO_Running”和“Slave_SQL_Running”两项都为“YES”,则说明从服务器复制已经正常启动。 至此,MySQL主从复制搭建完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值