MySQL Replication using Binary Log File Position 与 Global Transaction Identifiers(GTID) 不同,它使用二进制日志、中继日志和索引文件来跟踪主从数据库之间的事件进度。GTID 可以与二进制/中继日志一起使用,但是,从了解二进制日志文件位置开始是有益的。这里显示的是设置新的主服务器和从服务器的步骤,包括如何记录主日志位置以与从配置一起使用;导致主服务器和从服务器之间的数据一致。
这是使用二进制日志文件位置的 MySQL 复制设置过程的概述。作为参考以下提供的配置步骤的简化指南:https://dev.mysql.com/doc/refman/5.7/en/replication-configuration.html
操作系统和 MySQL 版本
CentOS 7
MySQL 5.7
MySQL 定义
与 MySQL 复制一起使用的关键字/文件名
- Master – 主数据库服务器数据从
- 从站——一个或多个数据库服务器数据被复制到
- 二进制日志文件——包含作为事件写入的数据库更新和更改
- 中继日志文件——包含从主服务器的二进制日志读取并由从 I/O 线程写入的数据库事件
- 索引文件——包含所有使用的二进制日志或中继日志文件的名称
- 主日志信息文件——包含主配置信息,包括用户、主机、密码、日志文件、主日志位置。在奴隶上找到
- 中继日志信息文件——包含复制状态信息。在奴隶上找到
- 全局事务标识符(GTID) - 跟踪复制位置的替代方法,不需要在从属上启用二进制日志(不与二进制日志文件位置一起使用)
1.设置MySQL
最新的存储库(MySQL 8.1)包括以前版本的 MySQL。添加存储库后,使用 yum-config-manager 禁用 mysql80-community 并启用 mysql57-community;或直接编辑 /etc/yum.repos.d/mysql-community.repo。
- 添加 MySQL Yum 存储库
shell> sudo rpm -Uvh mysql80-community-release-el7-1.noarch.rpm
- 安装 MySQL 5.7
shell> sudo yum-config-manager --disable mysql80-community
shell> sudo yum-config-manager --enable mysql57-community
shell> sudo yum install mysql-community-server
shell> sudo systemctl start mysqld.service
- 重置 MySQL 根密码
shell> sudo grep 'temporary password' /var/log/mysqld.log
shell> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
2.设置主服务器
- 将以下内容添加到 /etc/my.cnf 的 [mysqld] 部分
[mysqld]
log-bin=mysql-bin
server-id=1
log-bin – 二进制日志文件名,默认存储在 MySQL 数据目录 /var/lib/mysql 中。
server-id=1 – 服务器的唯一标识符。如果未声明,则默认为 0。如果设置为 0,与从服务器的连接将被拒绝。
重启 MySQL
shell> sudo systemctl restart mysqld.service
- 创建 MySQL 复制用户
mysql> CREATE USER 'replication'@'%.example.com' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%.example.com';
- 记录从属配置的Master二进制日志位置
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;
mysql> UNLOCK TABLES;
3.设置从服务器
- 将以下内容添加到 /etc/my.cnf 的 [mysqld] 部分
[mysqld]
log-bin=mysql-bin
server-id=2
log-bin – 二进制日志文件名,默认存储在 MySQL 数据目录 /var/lib/mysql 中。
server-id=2 – 服务器的唯一标识符。如果未声明,则默认为 0。如果设置为 0,与从服务器的连接将被拒绝。
- 使用步骤2c中记录的主服务器复制位置信息进行配置。
mysql> 将主控更改为
-> MASTER_HOST='master_host_name',
-> MASTER_USER='replication_user_name',
-> MASTER_PASSWORD='replication_password',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS=recorded_log_position;
- 启动 Slave 复制进程并查看状态。
mysql> STOP SLAVE;
mysql> SHOW SLAVE STATUS\G;
结论
按照这些步骤,从服务器应该与主日志位置同步。这可以在 SHOW SLAVE STATUS\G 中读取;输出,这将在下一篇博文中讨论。此外,有关 MySQL Replication GTID 设置、变量配置和维护的更多信息将成为后续博客文章的主题。