一文带你实现MySQL8主从复制配(保姆级)

一文带你实现MySQL8主从复制配置

1.主从复制是什么

MySQL主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能。就是一台或多台MySQL数据库(slave,即从库)从另一台MySQL数据库(master,即主库)进行日志的复制然后再解析日志并应用到自身,最终实现从库的数据和主库的数据保持一致。MySQL主从复制是MySQL数据库自带功能。

主从过程大致有3个步骤:
1)主设备将更改操作记录到binlog里;
2)从将主设备的binlog事件(sql语句)同步到从本机上并记录在relaylog里;
3)从根据relaylog里面的sql语句按顺序执行。

主设备上有一个log dump线程,用来和从的I/O线程传递binlog。从设备上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句执行。
a

2.配置前置条件

提前准备好两台服务器,我这边安装的是mysql8
主库Master 192.168.1.11
从库slave 192.168.1.106

3.配置Master库(192.168.1.11)

第一步:修改Mysq1数据库的配置文件/etc/my.cnf

[mysqld]
log-bin=mysql-bin #[必须]启用二进制日志,数据间复制必不可少
server-id=11 #[必须]服务器唯一ID
binlog-do-db=way_ktv #这里表示你需要同步哪一个库多个用“,”隔开

第二步:重启Mysql服务 systemctl restart mysqld
使用docker安装的mysql使用docker restart mysql 重启

第三步:登录Mysql数据库,执行下面SQL(我这边登录统一用root)

//mysql8授权用户需要先创建,创建和授权同一条语句的话会报错,mysql8默认使用的是sha256_password我这里是修改了加密插件为mysql_native_password
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'Abcd1234';
//再授权
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%'WITH GRANT OPTION;
//刷新
flush privileges;

注:上面SQL的作用是创建一个用户slave,密码为Abcd1234,并且给slave用户授予REPLICATION SLAVE权限。常用于建立复制时所需要用到的用户权限,可以理解为slave必须被master授权具有该权限的用户,才能通过该用户复制。

第四步:执行下面SQL,记录下结果中File和Position的值(记下来很重要)

show master status;

在这里插入图片描述

4.配置-从库Slave(192.168.1.106)

第一步:修改Mysq1数据库的配置文件/etc/my.cnf

[mysqld]
server-id=106 #[必须]服务器唯一ID

第二步:重启Mysql服务systemctl restart mysqld

第三步:登录Slave数据库,执行下面SQL

//执行前先停下slave
stop slave;

//清空信息
reset slave all;

//这是从库和主库连接的关键一步,host是主库的ip,user是前面创建的slave用户,file和pos是主库show master status的信息
change master to
master_host='192.168.1.11',master_user='slave',master_password='Abcd1234',
master_log_file='mysql-bin.000002',master_log_pos=1806;

//执行后启动slave
start slave;


第四步:登录slave数据库,执行下面SQL,查看从数据库的状态(我这边登录统一用root)

show slave status;

在这里插入图片描述
两个yes则表示成功配置主从复制,Connection和No都是配置有问题

5.同步不了,如何排错?

1.如果主从数据库同步不了,就从库执行下 show slave status\G;如果是Slave_IO_Running: No,那么,很可能是主从库server-id重复了,或者是防火墙端口没开通;
如果是 Slave_SQL_Running: No,那么我们可以通过跳过错误和手动同步来解决。

解决办法:跳过这个错误,

 stop slave ;
 set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
 start slave ;

2.如果主库一直在写入,导致主库的Position一直在变化
解决办法:锁库只读(Master)

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值