Mysql8.0以上的版本实现主从同步

  • 1. 修改my.ini文件
  • 1.1 找到本地计算机,右击管理进来
  • 1.2 分别修改主从对应的my.ini文件
  • 2. 中间步骤(uuid问题)
  • 3. 授权主从复制专用账号
  • 4. 设置从库向主库同步数据
  • 5. 问题总结
  • 5.1 问题1:无法连接主库
  • 5.2 问题2:从库无法启动



)

1. 修改my.ini文件

1.1 找到本地计算机,右击管理进来

mysql一段时间会自动关闭 重启后数据丢失_主从同步

找到对应的MySQL服务:MySQL是我的主数据库、mysqlds1是我的从数据库。具体操作:根据属性找到MySQL的安装地址,重新复制一份原先的MySQL安装文件。

mysql一段时间会自动关闭 重启后数据丢失_MySQL_02

1.2 分别修改主从对应的my.ini文件

(1)修改主库

[mysqld]
basedir=D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64
datadir=D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64\data
port=3306

# 开启日志
log-bin=mysql-bin
# 设置服务id,主从不能一致
server-id=1
# 设置需要同步的数据库
binlog-do-db=user_db
#屏蔽系统库同步
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema

(2)新增从库

mysql一段时间会自动关闭 重启后数据丢失_Java_03

[mysqld]
basedir=D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64-s1
datadir=D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64-s1\data
port=3307

log-bin=mysql-bin
server-id=2
replicate_wild_do-table=user_db.%

replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%

注意:在新增从库之后,要执行以下命令,将从库安装为windows服务:

D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64-s1\bin\mysqld install mysqlds1 --defualts-file="D:\Program Files (x86)\mysql-8.0.32-winx64\mysql-8.0.32-winx64-s1\my.ini"

2. 中间步骤(uuid问题)

由于我们是直接将原先的MySQL安装文件复制了一份,导致这两个主从数据库有相同的uuid,这个在后面配置主从同步时就是出错,导致Slave_on_Running的结果为No。因此,这里先进行修改:
找到从数据库中,查找auto.cnf文件,并将其删除:

mysql一段时间会自动关闭 重启后数据丢失_主从同步_04


然后在分别重新启动主从数据库,可以直接在服务那里重启:

mysql一段时间会自动关闭 重启后数据丢失_服务器_05

3. 授权主从复制专用账号

因为我使用的是MySQL8.0以上,语法与MySQL5.7有些不同了,执行以下命令,完成授权

#创建用户并设置密码:
SELECT USER, HOST FROM mysql.user WHERE USER = 'db_sync';

#授予复制从库权限:
ALTER USER 'db_sync' IDENTIFIED WITH 'mysql_native_password' BY 'db_sync'; 

# 权限刷新
FLUSH PRIVILEGES;

# 确认位点,记录下文件名以及位点
SHOW MASTER STATUS;

我们可以通过查询语句来检查 user 表中的用户:

SELECT User, Host FROM mysql.user WHERE User = 'db_sync';

mysql一段时间会自动关闭 重启后数据丢失_MySQL_06

或者直接找到主库中的系统数据库mysql中的user表:

mysql一段时间会自动关闭 重启后数据丢失_mysql_07


其中的命令SHOW MASTER STATUS;可以查询当前的日志文件名以及位点,可以用于从库进行同步数据:

mysql一段时间会自动关闭 重启后数据丢失_mysql_08

4. 设置从库向主库同步数据

执行以下命令:

#停止从服务器的复制进程
STOP SLAVE;

CHANGE MASTER TO
#开始更改主服务器的配置信息。
MASTER_HOST='localhost',
MASTER_USER='db_sync',
MASTER_PASSWORD='db_sync',
MASTER_LOG_FILE='mysql-bin.000004',#指定从哪个二进制日志文件开始复制。
MASTER_LOG_POS=854;#指定从二进制日志文件的哪个位置开始复制。
#启动从服务器的复制进程,开始从主服务器复制数据
START SLAVE;


    #显示从服务器的复制状态信息。
    #这个命令返回的信息非常详细,包括复制是否正在运行、错误消息、复制延迟等。
    #通过查看这些信息,你可以了解复制的健康状态和任何潜在的问题。

SHOW SLAVE STATUS

执行show slave status之后,可以看到如下信息:

mysql一段时间会自动关闭 重启后数据丢失_MySQL_09

这里都为Yes说明主从同步配置成功。因为我配置的是user_db数据库的主从同步,可以修改主库中的user_db下的user表数据,可以发现从库中对应的数据也相应的更新。

5. 问题总结

5.1 问题1:无法连接主库

2024-04-22T06:42:51.521449Z 27 [ERROR] [MY-010584] [Repl] Slave I/O for channel '': error connecting to master 'db_sync@localhost:3306' - retry-time: 60 retries: 6 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection. Error_code: MY-002061

错误代码MY-002061通常与MySQL的身份验证要求有关,特别是当使用caching_sha2_password插件时。caching_sha2_password是MySQL 8.0的默认身份验证插件,它比早期版本的默认插件mysql_native_password更加安全,因为它要求使用加密的连接。

解决方法:

更改主库的身份验证插件:

ALTER USER 'db_sync'@'localhost' IDENTIFIED WITH 'mysql_native_password' BY 'db_sync';  
FLUSH PRIVILEGES;

然后,在重新设置从库的数据同步即可连接成功

STOP SLAVE;

CHANGE MASTER TO
MASTER_HOST='localhost',
MASTER_USER='db_sync',
MASTER_PASSWORD='db_sync',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=854;

START SLAVE;

SHOW SLAVE STATUS

5.2 问题2:从库无法启动

错误提示:
某些服务在未由其他服务或程序使用时将自动停止
解决办法:
我是删除了从库,又重复操作了一遍,就可以了,建议反复试几次