一、主从版本选择
MySQL 官方建议主库的版本应等于或低于从库版本:
- MySQL 5.7 主库 → MySQL 8.0 从库 ✅ 允许
- MySQL 8.0 主库 → MySQL 5.7 从库 ❌ 不支持
二、主库设置
1、找到mysql是配置文件my.ini,一般这个文件都是在Data的安装目录下,比如C:\ProgramData\MySQL\MySQL Server 8.0,有的电脑这个ProgramData文件夹是隐藏起来的。
2、打开my.ini文件,查找server-id,这里默认都是1,主从设置的时候,需要把这个设置成唯一的,如果都是同一个网段,建议使用ip地址的最后的那段

3、确定一下log-bin参数是否存在,比如5.7版本的就没有,如果没有,补上,这个参数是日志的名称前缀,格式是:计算机名称-bin。添加binlog-format参数,binlog-format = ROW是MySQL二进制日志的基于行的复制格式。当设置为ROW格式时,MySQL不会记录执行的SQL语句本身,而是记录每行数据的具体变更内容。


4、打开cmd命令行,重启一下mysql,这样配置才生效,需要使用管理员权限,否则有报错

MySQL80 是 MySQL 8.0 版本在 Windows 系统中安装时使用的**默认服务名称,**执行以下命令,查看下服务名称
sc queryex type= service state= all | findstr /i "mysql"

停止mysql
net stop MySQL80
启动mysql
net start MySQL80

如果my.ini配置文件修改错误,这里是启动失败的
5、使用navicat连接你的数据库
6、查看server_id是否配置成功
SHOW VARIABLES LIKE 'server_id'

7、查看日志是否启动,注意这两个参数,后边从数据库配置的时候需要使用,这时候不要对数据库进行写入和修改,否则后边同步的时候,会报错
SHOW MASTER STATUS;

8、使用navicat连接数据库,然后把主库的数据库备份一下。在需要备份的数据库上右键,转储SQL文件->结构和数据。

三、从库设置
1、把上一步保存出来的数据文件复制到从库电脑上。先建立一个数据库名称,如果你多个主数据库的数据库名称都不一样,就可以设置一样的,如果是主库的数据库名称一样,那么就可以自己选一个数据库名称,比如db1,然后选择数据文件,还原一下数据库。

3、mysql8.0默认是有四个通道的,可以执行以下命令确认一下
SHOW VARIABLES LIKE 'slave_parallel_workers';

4、执行以下命令,这里的ip,还有账号密码,按照实际的来填写,这里的账号,注意他的权限,是要可以远程访问的。MASTER_LOG_FILE就是主库设置第七步那里查询出来的,就是当前使用的日志文件名称,MASTER_LOG_POS就是位置,要跟主库的对应的上。FOR CHANNEL 'master1';就是把这个数据库放到master1这个通道上。
CHANGE MASTER TO
MASTER_HOST='192.168.0.57',
MASTER_USER='admin',
MASTER_PASSWORD='admin',
MASTER_LOG_FILE='DESKTOP-LRVOV97-bin.000010',
MASTER_LOG_POS=197
FOR CHANNEL 'master1';
5、如果你有多个主库,而且主库的数据库名称都一致,那么你还需要设置一下数据库名称映射。这里的test就是主库的数据库名称,db1是我们从库上设置的数据库名称,master1是通道1
CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((test, db1)) FOR CHANNEL 'master1';
6、执行下以下命令,查看下从库的状态
SHOW SLAVE STATUS;

我这里设置了两个从库,所以我这里有两个信息。可以仔细看下这里有很多参数。比如以上这个图,就可以看到主库的ip地址,登录的账号名称,端口号,以及日志文件和位置

这里有两个重要参数,Slave_IO_Running和Slave_SQL_Running,这两个字段都要是Yes,否则就是有设置不正确的,无法进行同步。

这里有两个参数,前边的是我们之前做的数据库名称映射,后边参数是通道
7、启动一下从库
START SLAVE;
8、修改主库,从库上的数据会同步变更
四、命令
1、停止通道1的复制线程
STOP SLAVE FOR CHANNEL 'master1';
2、启动通道1的复制线程
START SLAVE FOR CHANNEL 'master1';
3、重置通道配置(清空这个配置)
RESET SLAVE ALL FOR CHANNEL 'master1'
4、显示master1通道状态
SHOW SLAVE STATUS FOR CHANNEL 'master1';