1、准备两个服务器或者虚拟机

这里使用的VM虚拟机的Centos、MySQL版本是8.0.26、使用FinalShell进行远程操作。

2、主库配置

  1. 修改MySQL配置文件(/etc/my.cnf)
#启用二进制日志
log-bin=mysql-bin
#服务器唯一id(不能重复)
server-id=100

MySQL8.0主从复制实现及遇到的个人问题-LMLPHP

  1. 重启mysql服务
    linux命令:systemctl restart mysqld
  2. 登录MySQL
  3. 创建用户并分配权限
    因为我的MySQL版本是8.0,必须要创建用户和分配用户权限分开操作。
# 已经不再使用
GRANT REPLICATION SLAVE ON *.* TO 'mengting'@'%' identified by '123456';
# 先创建用户,在赋予权限
# 在创建用户的时候,必须设置密码的等级  不然会创建失败(根据自己的设置进行决定)
set global validate_password.policy = 0;
set global validate_password.length = 10;

CREATE USER 'mengting'@'%' IDENTIFIED BY '1111111111';
GRANT REPLICATION SLAVE ON *.* TO 'mengting'@'%';
  1. 执行show命令并记录File和Position(非常重要)
show master status;
# 执行完就不要进行操作了

MySQL8.0主从复制实现及遇到的个人问题-LMLPHP

3、从库配置

  1. 测试:是否能在从数据库使用上面创建的用户访问主数据库
# -u后面是账号,-p后面是密码,ip是主数据库的ip地址
mysql -h 192.168.110.110 -umengting -p1111111111
# 如果可以连接成功证明端口都是可以正常连接的
# 如果不能连通可以查看一下是否是防火墙的原因(可以暂时关闭防火墙)
  1. 修改MySQL配置文件(/etc/my.cnf)
#不要重复即可
server-id=101

MySQL8.0主从复制实现及遇到的个人问题-LMLPHP
3. 重启MySQL服务

#重启MySQL服务
systemctl restart mysqld
  1. 执行sql
#刚才记录的File和Position在这里要使用
#将master_log_file与master_log_pos修改为自己对应的值
change master to master_host='192.168.110.110',
master_user='mengting',master_password='1111111111',
master_log_file='mysql-bin.000001',master_log_pos=439;
  1. 查看从机状态
show slave status \G;

MySQL8.0主从复制实现及遇到的个人问题-LMLPHP
看到两个Yes代表配置成功了,可以进行测试了。

4、配置过程中使用到的命令

  1. linux命令:
--查看ip地址
ifconfig或ip addr
--暂时关闭防火墙
systemctl stop firewalld
--查看防火墙状态
systemctl status firewalld
--紧张开机启动防火墙
systemctl disable firewalld
--重启mysql服务
systemctl restart mysqld
--查看mysql服务状态
systemctl status mysqld
--启动mysql服务
systemctl start mysqld
--停止mysql服务
systemctl stop mysqld
--查看mysql错误日志
vim /var/log/mysql.log
--查看自动生成的root密码
grep 'temporary password' /var/log/mysqld.log
--查看是否开启某个端口
netstat -an|grep 3306
  1. mysql命令:
--远程登录
mysql -h 192.168.110.110 -uroot -p123456
--停止复制进程
stop slave;

--重置复制状态(常用)
--RESET SLAVE命令用于重置复制状态。当你执行这个命令时,
--从服务器会删除所有复制相关的状态信息,包括二进制日志文件和位置、
--错误日志、中继日志等。这相当于重新初始化从服务器的复制状态,
--以便重新开始从主服务器同步数据。
--注意,这个命令需要具有足够权限的管理员或用户才能执行。
reset slave;
--开启复制进程
start slave;

--设置密码等级
set global validate_password.policy = 0;
--设置密码长度
set global validate_password.length = 4;
--创建用户
create user 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
--分配用户权限(全部权限)
grant all on *.* to 'root'@'%';
--在主服务器创建从机数据库用户(用于主从复制)
CREATE USER 'mengting'@'%' IDENTIFIED BY '0123456789';
GRANT REPLICATION SLAVE ON *.* TO 'mengting'@'%';

--从机服务器进行主从复制
change master to master_host='192.168.110.110',
master_user='mengting',master_password='1111111111',
master_log_file='mysql-bin.000001',master_log_pos=156;
--查看主机(主数据库)状态
show master status;
--查看从机
show slave status;

5、遇到的问题

  1. Slave_IO_Running显示NO
    Slave_SQL_Running显示NO
    检查配置文件是否出错、检查是否成功开启主从复制SQL语句、检查服务器端口是否开放、检查是否可以在从机服务器连接到主机数据库(重要)

  2. Slave_IO_Running显示Connection
    Slave_SQL_Running显示NO
    检查网络是否连接,如果网络没有问题可以等待一会(比较慢)

01-04 11:07