原理:

mysql主从复制 配置 mysql8主从复制配置_mysql主从复制 配置

前提:

  1. 两个虚拟机(保证其里面的mysql数据都相同,可通过克隆虚拟机实现)
  2. mysql 8.0.16
  3. Master_IP:192.168.202.147
  4. Slave_IP:192.168.202.151

步骤:

1. mysql版本号一致,方便学习测试,修改网卡配置文件,重新设置IP,并关闭防火墙

2. 两个虚拟机结构中的server_uuid得保证不一样(需手动修改)

  • 在数据库中查看server_uuid


show variables like'%server_uuid%';

mysql主从复制 配置 mysql8主从复制配置_服务器_02

  • 修改uuid:
vi /var/lib/mysql/auto.cnf`

修改里面的值即可

  • 重启MySQL服务
systemctl restart mysqld.service

3. 配置主从服务器

  • 主服务器Master
vim /etc/my.cnf

mysql主从复制 配置 mysql8主从复制配置_mysql主从复制 配置_03

开启二进制日志 binlog

[mysqld]
 log-bin=mysql-bin
 server-id=47

配置唯一的server_id server-id=28 建议使用IP地址后两位

  • 从服务器Slave
    开启中继日志
[mysqld]
     relay-log=mysql-relay
    server-id=51

配置唯一的server-id

mysql 启动slave服务 :

start slave
  • 重启MySQL服务
systemctl restart mysqld.service

4. 在主机上建立账户并授权slave

create user 'copy'@'%' identified with mysql_native_password by 'Nebula@123';

   GRANT REPLICATION SLAVE ON *.* TO ‘copy'@'%';

重新加载权限表:

flush privileges;

5. 查询master状态:show master status\G (进入数据库中执行)

记录上图结果中File和Position的值

注意:执行完此步骤后不要再操作主服务器MySQL,防止主服务器状态发生状态值变化。

mysql主从复制 配置 mysql8主从复制配置_centos_04

6. 告知从服务器二进制文件名与位置(从服务器操作)

CHANGE MASTER TO
master_host = ‘192.168.202.147’, #主库的IP地址
master_user = ‘copy’, #在主库上创建的复制账号
master_password = ‘Nebula@123’, #在主库上创建的复制账号密码
master_log_file = ‘mysql-bin.000001’, #开始复制的二进制文件名(从主库查询结果中获取)
master_log_pos = 826; #开始复制的二进制文件位置(从主库查询结果中获取)
注意826 左右无引号

mysql主从复制 配置 mysql8主从复制配置_centos_05


当看到上图红色三个才表明状态正常。mysql 主从数据不一致,提示:Slave SQL Running:No的解决办法

显示如下情况表示slave不同步

mysql主从复制 配置 mysql8主从复制配置_centos_06

解决方法

7. 先停掉slave:mysql> stop slave;
8. 跳过错误步骤,后面步数可变:mysql> set global sql_slave_skip_counter=1;
9. 在启动slave:mysql> start slave
10. 查看同步状态:mysql> show slave status\G

mysql主从复制 配置 mysql8主从复制配置_linux_07

测试主从复制是否成功

Master中和Slave中执行SQL:
SHOW DATABASES
在Master中创建数据库并创建数据表并插入一条数据:

create database test;
use test;
create table tab1(id int auto_increment,name varchar(10),primary key(id));
insert into tab1(id,name) values (1,'why');

在Slave中查询这条数据是否同步过来

常用语句

show master status: 查看master的状态,尤其是当前的日志及位置 show slave status 查看slave的状
态
reset slave 重置slave状态
start slave 启动slave状态
stop slave 暂停状态