作者介绍:简历上没有一个精通的运维工程师,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

数据库是一个系统(应用)最重要的资产之一,所以我们的数据库将从以下几个数据库来进行介绍。
MySQL(本章节)
PostgreSQL
Redis
Etcd
GTID(Global Transaction Identifier)是 MySQL 5.6 版本引入的全局事务标识符,它为复制环境中的每个事务分配一个全局唯一的标识符。
GTID = source_id:transaction_id#示例
3E11FA47-71CA-11E1-9E33-C80AA9429562:1
3E11FA47-71CA-11E1-9E33-C80AA9429562:2
3E11FA47-71CA-11E1-9E33-C80AA9429562:31. 主库执行事务
2. 为事务生成 GTID
3. 将 GTID 和事务写入二进制日志
4. 从库读取 GTID 和事务
5. 从库应用事务并记录已执行的 GTID
-- 传统基于位置的复制
CHANGE MASTER TO
MASTER_HOST='master1',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=107;
-- 基于 GTID 的复制
CHANGE MASTER TO
MASTER_HOST='master1',
MASTER_AUTO_POSITION=1;# my.cnf 配置
[mysqld]
# 启用 GTID
gtid_mode=ON
# 强制 GTID 一致性
enforce_gtid_consistency=ON
# 服务器 ID
server_id=1
# 二进制日志配置
log_bin=mysql-bin
binlog_format=ROW-- 检查 GTID 模式
SHOW VARIABLES LIKE 'gtid_mode';
-- 检查 GTID 一致性
SHOW VARIABLES LIKE 'enforce_gtid_consistency';mysql> SELECT @@GLOBAL.gtid_executed;
+----------------------------------------+
| @@GLOBAL.gtid_executed |
+----------------------------------------+
| a3558952-9176-11f0-b428-5254007ccb52:1 |
+----------------------------------------+
1 row in set (0.00 sec)
mysql> create database abcde;
Query OK, 1 row affected (0.07 sec)
mysql> SELECT @@GLOBAL.gtid_executed;
+------------------------------------------+
| @@GLOBAL.gtid_executed |
+------------------------------------------+
| a3558952-9176-11f0-b428-5254007ccb52:1-2 |
+------------------------------------------+
1 row in set (0.00 sec)六.主从配置
6.1 创建主从账号
-- 创建同步账号(用户名建议使用 repl,密码自定义,例如:Repl@123456)
CREATE USER 'repl'@'192.168.31.181' IDENTIFIED BY 'Repl@123456';
-- 授予复制权限(GTID 模式下需包含 REPLICATION SLAVE 和 REPLICATION CLIENT 权限)
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.31.181';
-- 刷新权限
FLUSH PRIVILEGES;6.2 从库配置(主库参考上面配置)
[mysqld]
# 启用 GTID
gtid_mode = ON
enforce_gtid_consistency = ON
# 其他必要配置
server-id = 181 # 从库唯一 ID(与主库区分)
relay_log = /var/log/mysql-relay-bin.log # 中继日志路径
read_only = ON # 从库设为只读(可选,增强安全性)6.3 从库连接主库
-- 停止从库进程(若已配置过)
STOP SLAVE;
-- 重置从库配置(首次配置可忽略,若需重新配置则执行)
RESET SLAVE ALL;
-- 配置主库信息(GTID 模式)
CHANGE MASTER TO
MASTER_HOST = '192.168.31.180', # 主库 IP
MASTER_USER = 'repl', # 同步账号用户名
MASTER_PASSWORD = 'Repl@123456', # 同步账号密码
MASTER_PORT = 3306, # 主库 MySQL 端口(默认 3306)
MASTER_AUTO_POSITION = 1; # 启用 GTID 自动定位(无需指定日志文件名和位置)
-- 启动从库进程
START SLAVE;如果主服务器开从一开始就启用了GTID,哪们无论是开始就配置主从或者中途配置主从,都不需要手工备份数据和记录Binglog位置。它会自动同步其中的数据。