在MySQL 8.0中设置主从同步,并启用GTID(全局事务标识符),可以按照以下详细步骤进行:
编辑MySQL配置文件(通常是my.cnf
或my.ini
):
[mysqld]
server-id = 1
log_bin = mysql-bin
binlog_format = row
gtid_mode = ON
enforce_gtid_consistency = ON
server-id
:为主服务器设置一个唯一的ID。log_bin
:启用二进制日志。binlog_format = row
:使用行格式的二进制日志。gtid_mode = ON
:启用GTID模式。enforce_gtid_consistency = ON
:确保所有事务都与GTID模式兼容。重启MySQL服务:重启MySQL以使配置生效。
创建复制用户:
CREATE USER 'replica'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'%';
记录当前的GTID位置:使用以下命令:
SHOW MASTER STATUS;
File
和Position
,以便在从服务器上使用。编辑MySQL配置文件:
[mysqld]
server-id = 2
relay_log = mysql-relay-bin
read_only = ON
gtid_mode = ON
enforce_gtid_consistency = ON
server-id
:为从服务器设置一个唯一的ID,不同于主服务器。重启MySQL服务:重启MySQL以使配置生效。
在从服务器上配置复制:
CHANGE MASTER TO
MASTER_HOST='master_ip',
MASTER_USER='replica',
MASTER_PASSWORD='password',
MASTER_AUTO_POSITION = 1;
MASTER_AUTO_POSITION = 1
来启用基于GTID的复制。master_ip
、replica
和password
为实际的值。启动复制进程:
START SLAVE;
检查复制状态:
SHOW SLAVE STATUS\G
Slave_IO_Running
和Slave_SQL_Running
都是Yes
。完成以上步骤后,你将成功在MySQL 8.0中设置主从同步,并启用了GTID。这样的设置可以提供更稳定和可靠的数据复制机制。
您提到的非常正确。在使用GTID进行MySQL主从同步时,SHOW MASTER STATUS;
的结果确实不像在传统的基于二进制日志位置的复制中那样重要。在GTID模式下,主要关注点是GTID集合,而不是特定的二进制日志文件和位置。
在GTID模式下设置主从复制时,从服务器自动选择正确的事务来复制,而不需要手动指定二进制日志文件和位置。这是因为每个事务都有一个全局唯一的标识符(GTID),从服务器可以使用这些标识符来确定哪些事务需要被复制。
SHOW MASTER STATUS;
的作用在GTID模式下,执行SHOW MASTER STATUS;
仍然会显示一些有用的信息,如当前的二进制日志文件名和位置,但这些信息在设置和维护GTID复制时不是必须的。主要的目的可能是为了监控和日志管理,而不是复制设置。
在GTID模式下,关键步骤在于确保GTID模式被正确开启并在从服务器上配置CHANGE MASTER TO命令时使用MASTER_AUTO_POSITION = 1;
。这告诉从服务器自动根据GTID定位并同步数据,而无需手动指定日志文件和位置。
因此,确实,按照GTID模式进行复制时,SHOW MASTER STATUS;
命令的作用并不像在传统复制中那样关键。主要关注点转移到了确保GTID的正确配置和使用上。
如果您希望MySQL的从服务器仅用于读取操作,确保它不会接收写入(插入、更新或删除等)操作,可以通过以下步骤实现:
read_only
参数在从服务器的MySQL配置文件中(通常是my.cnf
或my.ini
),设置read_only
为ON
。这样做会阻止非超级用户(如root)对数据库进行写操作。只有具有SUPER
权限的用户可以进行写操作。
[mysqld]
read_only = ON
重启MySQL服务以使更改生效。
在配置了read_only
后,任何具有SUPER
权限的账户仍然能够进行写操作。因此,要确保只有受信任的用户拥有此权限,并且在日常操作中避免使用具有SUPER
权限的账户进行数据库操作。
通过上述设置,您的从服务器将作为一个只读实例运行,适用于查询操作、报告生成或者作为主服务器的热备份。这有助于提高读取性能,同时保持数据的一致性和完整性。