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
是我的主数据库、mysqlds1
是我的从数据库。具体操作:根据属性找到MySQL
的安装地址,重新复制一份原先的MySQL
安装文件。
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)新增从库
[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
文件,并将其删除:
然后在分别重新启动主从数据库,可以直接在服务那里重启:
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
中的user
表:
其中的命令SHOW MASTER STATUS;可以查询当前的日志文件名以及位点,可以用于从库进行同步数据:
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
之后,可以看到如下信息:
这里都为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_passwor
d是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:从库无法启动
错误提示:
某些服务在未由其他服务或程序使用时将自动停止
解决办法:
我是删除了从库,又重复操作了一遍,就可以了,建议反复试几次