主从复制模式包括异步复制、半同步复制、增强半同步复制、同步复制和组复制等。主从复制的前提至少两台同版本的数据库实例,具有不同的server_id 和 server_uuid,时间同步,主库开启 binlog 日志,从库开启relaylog 日志。
1、异步复制
MYSQL 默认的复制方式,就是主库写入binlog日志后即可成功返回客户端,无须等待binlog日志传递给从库的过程。但这样一旦主库发生宕机,从库就有可能出现数据丢失的情况。
搭建过程:
1.1 主从环境
数据库主 master:
-
数据库版本:8.0.24
-
IP:192.168.3.105
-
server_id=1
-
binlog 日志
数据库从 slave:
-
数据库版本:8.0.24
-
IP:192.168.3.104
-
server_id=2
-
relaylog 日志
1.2 数据库主 master 配置
my.cnf 配置文件
[mysql@dbs-master ~]$ more .my.cnf
[mysqld]
server_id=1
log_bin=/opt/mysql/binlog/mysql-bin
binlog_format=row
创建复制用户
mysql> create user repl@'%' identified with mysql_native_password by 'repl';
mysql> grant replication slave on *.* to repl@'%';
查看master记录的binlog日志文件和position
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 659 | | | |
+------------------+----------+--------------+------------------+-------------------+
1.3 数据库从 slave 配置
my.cnf 配置文件
server_id=2
relay_log=/opt/mysql/relaylog/mysql-relay
log_bin=/opt/mysql/binlog/mysql-bin
binlog_format=row
# 1、从库只开启log-bin功能,不添加log-slave-updates参数,从库从主库复制的数据不会写入log-bin日志文件里。
# 2、直接向从库写入数据时,是会写入log-bin日志的。
# 3、开启log-slave-updates参数后,从库从主库复制的数据会写入log-bin日志文件里。这也是该参数的功能。
log_slave_updates=1
从主库导入数据到从库,方法可参照数据备份恢复
启动主从复制
mysql> change master to master_host='192.168.3.105',master_user='repl',master_password='repl',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=659,master_connect_retry=10;
mysql> start slave;
mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
1.4 测试验证
在主库进行DDL和DML操作,在从库上验证数据是否同步