MySQL主从同步(MySQL Replication)是MySQL服务器的一个常用特性,它能够将MySQL服务器数据自动同步到其他MySQL服务器上,从而实现数据备份和负载均衡的功能。在实际应用中,MySQL主从同步可以用于实现高可用、灾备转移、读写分离等。
# log-bin 开启binlog 日志,master-log 为记录日志的文件前准名字
log-bin=master-log
# master 的服务节点唯一id
server-id=1
# 可选参数配置哪些数据库是需要被同步的
binlog-do-db=rep
binlog-do-db=user
# 可选参数配置哪些数据库是不需要被同步的
binlog-ignore-db=mysql
binlog-ignore-db=test
# 此处演示使用配置使用旧的密码方式进行数据传输,因为mysql8 默认已经按照ssl 进行加密传输了
default_authentication_plugin=mysql_native_password
server-id=2
default_authentication_plugin=mysql_native_password
配置完成记得重启master和slave mysql 的服务
-- 创建slave_rep 用户,密码是123456,可以被连接的ip 段是192.168.75
CREATE USER 'slave_rep'@'192.168.75.%' IDENTIFIED BY '123456';
-- 对创建的用户赋予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'slave_rep'@'192.168.75.%';
show master status;
change master to master_host='192.168.75.128',master_user='slave_rep',master_password='123456', master_port=3306,
master_log_file='master-log.000002', master_log_pos=340
其中,master_ip_address是主服务器的IP地址,username和password是用于同步的用户名和密码,master-log.000002和340是主服务器上二进制日志文件的名称和位置,需要根据实际情况修改。
start slave;
show slave status ;
如果发现 Slave_IO_Running和Slave_SQL_Running都显示为Yes,说明配置MySQL主从成功。 但凡有一个不是Yes,是什么Connecting,No之类的,说明没配置成功。
对于已经存在的主从同步 节点,现在如果要在增加一个slave 从节点;
server-id=3
default_authentication_plugin=mysql_native_password
配置完成记得重启 mysql 服务
注意和master节点中要同步的数据库名称保持一致
将master 下要同步得数据数据全量备份后,还原到slave 节点的对应的数据库中
步骤同 2.3 mysql slave 节点开启数据复制:相同
binlog 记录了对于数据操作的ddl 和dml 语句,这些语句是可以直接执行;
在 MySQL 8 中,binlog-format
参数已经被弃用,被 default_binlog_format
参数所取代。在 MySQL 8 中,如果未显式指定二进制日志的格式,default_binlog_format
参数将控制 MySQL 记录二进制日志的格式。
default_binlog_format
参数有以下可选值:
ROW
:记录行级别别更改。在 MySQL 8 中,这是默认的二进制日志格式。STATEMENT
:记录每个需要记录的 SQL 语句。MIXED
:混合使用 ROW 和 STATEMENT 两种格式,选择使用哪一种格式取决于具体的 SQL 语句。基于语句级别的复制(statement-based replication,SBR):这种方式是最初的复制方式,将主服务器上执行的修改数据的SQL语句记录到二进制日志文件中,然后将这些SQL语句发送到从服务器,从服务器再执行这些SQL语句完成数据同步。此方法的优点是复制过程中只传输SQL语句,网络传输量小;缺点是可能会有一些数据不一致的情况出现,例如在主服务器上执行的一些非确定性函数(如 uuid,date 等),或者在从服务器上存在不存在的表或数据行。
基于行级别的复制(row-based replication,RBR):这种方式是在SBR基础上发展而来,它直接将修改数据的二进制数据发送到从服务器,然后在从服务器上执行相同的二进制数据完成数据同步。此方法的优点是能够保证数据一致性,能够处理一些复杂的SQL语句;缺点是对于大量的操作,可能会产生大数据量传输。
基于混合复制(mixed-based replication,MBR):它是综合了SBR和RBR两种方式的优点,即在不同的情况下选择不同的方式。例如,对于不涉及大量数据变更的SQL语句使用语句级别的方式,对于大量数据变更的SQL语句使用行级别方式。该方式比较灵活,能够平衡性能和数据一致性的关系。
需要注意的是,建议在配置主从复制时明确指定二进制日志的格式,以避免误解和不必要的问题。在一致性设置和数据同步方面,明确定义二进制日志格式可以提高主从数据同步的效率和稳定性。
Mysql 主从同步主要是通过master 节点开启binlog 日志,然后slave 节点消费binlog 日志的数据,将数据更新到各自的库中。