MySQL-主从复制

发布时间 2023-04-08 20:01:41作者: 原来是你~~~

主从复制模式包括异步复制、半同步复制、增强半同步复制、同步复制和组复制等。主从复制的前提至少两台同版本的数据库实例,具有不同的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操作,在从库上验证数据是否同步

2、半同步复制