文章目录
- 介绍
- GTID和Binlog的关系
- GTID(Global Transaction ID)
- Binlog(二进制日志)
- MySQL5.7基于yum搭建
- 安装 MySQL
- 初始化并设置远程登录密码
- 配置基于GTID的复制模式
- 第一台主服务器配置
- 主服务器配置
- 启动从服务
- 第二台主服务器配置
- 主服务器配置
- 启动从服务
介绍
GTID和Binlog的关系
GTID 和 Binlog 是互补的技术。GTID 提供了更高级的事务跟踪和管理机制,而 Binlog 则是底层的日志记录机制。在 GTID 模式下,每个事务在写入 binlog 时都会附带一个 GTID,从而实现更加可靠和简化的复制管理。
- GTID 用于全局唯一标识事务,简化复制管理和故障恢复。
- Binlog 用于记录数据更改事件,是数据恢复和复制的基础。
在许多高可用方案中,GTID 和 Binlog 是结合使用的。GTID 为每个事务提供唯一标识符,简化了复制和故障恢复,而 Binlog 依然是底层的变更日志机制。
GTID(Global Transaction ID)
-
定义:
GTID 是一个全局唯一的事务标识符。它由 MySQL 5.6 引入,用于跟踪和标识服务器上的每个事务。 -
组成:
GTID 由 source_id:transaction_id 组成,其中 source_id 通常是服务器的 UUID,transaction_id 是事务在该服务器上的序号。 -
用途:
- 用于主从复制:GTID 确保每个事务在主服务器和从服务器上都有唯一的标识,有助于简化复制和故障恢复。
- 自动故障切换:在 GTID 模式下,复制的管理变得更加简单和自动化,有助于自动故障切换。
-
优势:
- 自动化:GTID 模式下,可以实现更自动化的故障恢复和复制管理。
- 去重:避免了事务重复应用的问题。、
- 灵活性:在主从切换和故障恢复中更加灵活。、
Binlog(二进制日志)
-
定义:
Binlog 是 MySQL 用于记录所有更改数据的 SQL 语句的日志文件。它记录所有导致数据更改的事件(如插入、更新、删除操作)。 -
组成:
Binlog 文件由一系列事件组成,每个事件记录了某个数据更改操作。 -
用途:
- 数据恢复:通过重放 binlog,可以恢复数据库到特定的时间点。
- 主从复制:从服务器可以读取主服务器的 binlog 并重放其中的事件,从而实现数据同步。
-
优势:
- 数据恢复:通过 binlog,可以将数据库恢复到特定时间点。
- 复制:Binlog 是 MySQL 主从复制的基础,确保从服务器可以同步主服务器的数据变化。
MySQL5.7基于yum搭建
安装 MySQL
# 下载MySQL yum 包
wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
# 查看是否有mariadb
rpm -qa |grep mariadb
# 删除mariadb依赖
yum remove -y mariadb-libs.x86_64
# 安装密钥
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
# 安装 MySQL 源
rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
# 安装 MySQL 服务器
yum install -y mysql-community-server
# 启动服务
systemctl start mysqld
systemctl enable mysqld
# 防火墙开放端口
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
初始化并设置远程登录密码
查看密码
[root@mysql1 ~]# grep 'temporary password' /var/log/mysqld.log
2024-08-05T02:26:48.667443Z 1 [Note] A temporary password is generated for root@localhost: y7XtM-u9dVwt
登录MySQL
[root@mysql mysql]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.35
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
初始化密码(密码有复杂度,数字大小写和符号)
mysql> ALTER USER USER() IDENTIFIED BY 'Gdh%Y4C4BMyH';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
支持root用户允许远程连接mysql数据库
mysql> grant all privileges on *.* to 'root'@'%' identified by 'Gdh%Y4C4BMyH' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
配置基于GTID的复制模式
GTID(全局事务标识符)是 MySQL 提供的一种新型复制方式,它简化了主从复制的配置和管理,确保数据的一致性和完整性。在配置 MySQL 双主复制之前,我们需要确保两台主服务器都启用了 GTID 模式。
在2台MySQL服务器上创建拥有复制权限的用户
# 创建拥有复制权限的用户
grant replication slave on *.* to 'synchronize'@'%' identified by 'Abc-1234';
# 刷新权限使其生效
flush privileges;
第一台主服务器配置
主服务器配置
修改第一台主服务器的配置文件 /etc/my.cnf,添加以下内容:
server-id = 100 # 设置服务器的唯一标识符。
log_bin = mysql-bin # 启用二进制日志记录。
gtid_mode = ON # 启用 GTID 模式。
enforce_gtid_consistency = true # 强制 GTID 一致性。
修改完配置文件后,重启 MySQL 服务使配置生效:
systemctl restart mysqld
启动从服务
在创建好用户之后,进入 MySQL 数据库执行以下命令,将第二台服务器配置为从服务器:
进入 MySQL数据库
mysql -u root -p
执行以下命令
change master to
master_host="172.25.14.12",
master_user="synchronize",
master_password="Abc-1234",
master_auto_position=1;
启动从服务:
start slave;
第二台主服务器配置
主服务器配置
在第二台主服务器上,同样需要修改配置文件 /etc/my.cnf,添加以下内容:
server-id = 101 # 设置服务器的唯一标识符。
log_bin = mysql-bin # 启用二进制日志记录。
gtid_mode = ON # 启用 GTID 模式。
enforce_gtid_consistency = true # 强制 GTID 一致性。
修改完配置文件后,重启 MySQL 服务使配置生效:
systemctl restart mysqld
启动从服务
进入 MySQL 数据库执行以下命令,将第一台主服务器配置为从服务器:
进入 MySQL数据库
mysql -u root -p
执行以下命令
change master to
master_host="172.25.14.11",
master_user="synchronize",
master_password="Abc-1234",
master_auto_position=1;
启动从服务:
start slave;
查看是否成功同步
show slave status\G;
参考文档:
Centos7.0 安装 MYSQL5.7
Linux中MySQL 双主复制(互为主从)