Mysql 一主一从配置
环境信息
ip地址 | 主机信息 | 角色 | mysql版本 |
---|---|---|---|
192.168.1.19 | S600 | 主 | 8.0.40-0ubuntu0.20.04.1 |
192.168.1.20 | H840 | 从 | 8.0.40-0ubuntu0.20.04.1 |
本环境已完成2台Mysql单机安装,Mysql单机安装操作文档
具体操作
Mysql主机配置
配置文件修改
- 修改配置Master
配置/etc/mysql/mysql.cnf, mysql的文件/etc/mysql/my.cnf最终指向/etc/mysql/mysql.cnf
增加配置
[mysqld]
server_id=1
log_bin=master
binlog-format=ROW
binlog-format=ROW
:采用行级日志格式,减少数据不一致的可能性
- 重启主mysql
systemctl restart mysql
配置主从复制用户及权限
- 以root用户登录主机mysql,并配置复制用户权限
create user 'repluser'@'%' IDENTIFIED by '123456';
grant replication slave on *.* to 'repluser'@'%';
FLUSH PRIVILEGES;
- 验证repluser用户权限
导出主库数据
- 锁定Master机器主库的表
FLUSH TABLES WITH READ LOCK;
- 将主库数据同步到从库
sudo mysqldump -uroot -p123456 --all-databases > /data01/tmp/all.sql
- 解锁表
UNLOCK TABLES;
- 将sql文件传到从库机器
scp ./all.sql lichao@192.168.1.20:/data01/tmp
Mysql从机配
初始化从库数据
将Msql主机导出的数据脚本放到从库执行,会同步主机的数据库,但从机原来不同名的数据库会保留,所以需要将从库多余的数据库同步到主库或者删除。保证主从数据库一致
lichao@HP-840G5:/data01/tmp$ mysql -u root -p < ./all.sql
修改配置文件
- 增加配置
[mysqld]
server_id=2
read_only=ON
super_read_only=ON
read-only=ON
:限制除复制线程和具有 SUPER 权限用户外的所有写操作。
super_read_only=ON
:进一步限制具有 SUPER
权限的用户写入操作,确保从库真正只读。
- 重启mysql
systemctl restart mysql
在Myql从库指定主库信息
- 在Mysql主机查询Master机器的File和Position的值
- 进入MySQL服务,指定主服务器信息
- MASTER_LOG_FILE和MASTER_LOG_POS的值按照Msql主机查询到的值填写
CHANGE MASTER TOMASTER_HOST='192.168.1.19',MASTER_USER='repluser',MASTER_PASSWORD='123456',MASTER_LOG_FILE='master.000002',MASTER_LOG_POS=157;
- 配置主从复制完成后,启动复制流程
start slave;
检查复制状态
-
在执行
START SLAVE
后,可以使用以下命令检查从库的复制状态:-
Slave_IO_Running
:显示 I/O 线程是否正在运行(Yes
表示运行)。 -
Slave_SQL_Running
:显示 SQL 线程是否正在运行。 -
Seconds_Behind_Master
:从库滞后主库的时间(以秒为单位)。
-
SHOW SLAVE STATUS\G
FAQ
1.Error connecting to source 'repluser@192.168.1.19:3306'. This was attempt 5/86400, with a delay of 60 seconds between attempts. Message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.
表示 MySQL 用户使用了 caching_sha2_password
插件,但当前连接未使用安全连接(如 SSL/TLS),因此无法完成身份验证。
在Mysql主机用户repluser的用户插件修改为mysql_native_password临时规避
ALTER USER 'repluser'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;
2.Got fatal error 1236 from source when reading data from binary log: 'Could not find first log file name in binary log index file'
经检查,从库配置主库信息时,二进制文件名配置错误,经修改后重新保证主从库一致性后,再进行同步操作。
停止同步命令:STOP SLAVE;
参考
- MySql一主多从同步结构配置