我们提供安全,免费的手游软件下载!
在进行MySQL主从复制架构设置之前,需要准备3、4、5台虚拟机,并在每台虚拟机上安装MySQL 8.0。
主从架构通常包括“一主多从”和“级联复制”两种模式。它们都依赖于binlog日志文件进行同步,其中binlog日志记录DDL和部分DDL语句。在同步过程中,从库将重新执行这些语句以实现主从同步。
首先,需要配置主/从服务器的
server_id
。如果不清楚MySQL服务器的
server_id
,可以使用命令:
SHOW VARIABLES LIKE 'server_id';
来查询。值得注意的是,
server_id
的值并没有严格的规定,只需要确保全局唯一即可。默认情况下,
server_id
的值为1。
对于Debian服务器,编辑命令如下:nano /etc/mysql/my.conf,并加入以下节点。假设主库设置为1,从库设置为2,保存后重启数据库:
systemctl restart mysql
[mysqld]
server-id=1 #主库配置加入
[mysqld]
server-id=2 #从库配置加入
步骤2(非必要):
在主机上执行
show master status;
命令以显示最新的日志文件和当前位置。
File表示当前正在写入的二进制日志文件名。Position表示当前二进制日志文件的偏移量,即下一个要写入的位置。Binlog_Do_DB表示主服务器上配置的需要记录到二进制日志中的数据库。Binlog_Ignore_DB表示主服务器上配置的不需要记录到二进制日志中的数据库。Executed_Gtid_Set在GTID模式下,该属性表示已经执行过的全局事务标识符的集合。
步骤3:
在从服务器上连接主服务器进行主从同步,执行以下代码:
CHANGE REPLICATION SOURCE to
SOURCE_HOST='192.168.3.107',
SOURCE_USER='root',
SOURCE_PASSWORD='1234',
SOURCE_LOG_FILE='binlog.000009',
SOURCE_LOG_POS=0;
其中,SOURCE_HOST表示主库的连接地址,SOURCE_USER表示账号,SOURCE_PASSWORD表示密码,SOURCE_LOG_FILE表示主库当前的二进制文件名,SOURCE_LOG_POS表示当前二进制日志文件的偏移量。
执行完上述步骤后,可以通过
show REPLICA status;
命令查看复制集群状态。通过
start REPLICA;
、
stop REPLICA;
和
RESET REPLICA ALL;
命令可以启动、暂停或删除集群。
通过设置SOURCE_HOST地址连接主库或从库,就可以轻松实现一主多从或一主一从一从的链式架构。
GTID模式(推荐)
MySQL主从复制中提供了一种GTID模式。使用
SHOW GLOBAL VARIABLES LIKE 'gtid_mode';
命令查看GTID模式的状态。GTID是一种新的日志格式,每个事务都有一个唯一的GTID,保证了事务在整个复制拓扑中的唯一性。与传统日志格式相比,GTID是以事务为单位,而传统日志是基于日志位置。
执行
RESET MASTER;
命令可以重置主库的binlog日志。需要注意的是,一旦重置了日志,将丢失所有的日志数据,新的日志将从00001开始。编辑
nano /etc/mysql/my.cnf
文件,按1-5的顺序对各个数据库的
server_id
进行配置,主库和从库都需要进行配置。
[mysqld]
server-id=1
gtid_mode=on
enforce_gtid_consistency=true
其中,gtid_mode表示开启GTID模式,enforce_gtid_consistency表示强制GTID一致性,有助于提高数据的可靠性和一致性,防止数据丢失或损坏。
从库执行以下代码:
CHANGE REPLICATION SOURCE to
SOURCE_HOST='192.168.3.107',
SOURCE_USER='root',
SOURCE_PASSWORD='123',
SOURCE_AUTO_POSITION=1;
可以发现,此时不再需要填写SOURCE_LOG_FILE和SOURCE_LOG_POS,因为GTID的一个好处是自动定位日志文件和位置,减少了配置的复杂性。其它的集群管理与传统的命令一致。
#主库常用命令
show master status #查看主库状态
reset master; #重置主库binlog日志
#从库常用命令
show replica status; #查看从库状态
start replica; #开始同步
stop replica; #暂停同步
reset replica all; #重置(删除)全部同步
select * from performance_schema.replication_applier_status_by_worker; #查看同步线程的信息(主要用于查看具体报错信息)
#其它
show variables like 'server_id'; #查看server_id
show global variables like 'gtid_mode'; #查看gtid状态
热门资讯