MySQL数据库主从配置
本文详细介绍了MySQL主从数据库的配置方法。主要内容包括:主从复制原理(二进制日志、中继日志、数据重放),通过Docker部署主从服务器的步骤,以及主备库状态检查。针对常见的Slave_IO_Running错误,提供了启用RSA公钥交换的解决方案。最后通过创建数据库、表和插入数据验证了主从同步的有效性。该配置可实现数据库备份和读写分离,提高系统并发能力。配置时需注意主备服务器版本一致性和SSL连
系列文章目录
文章目录
前言
本文将讲解mysql数据库的主从配置方法,mysql数据库进行主从配置后,可以实现数据库的备份、同时应用也可以实现读写分离,提高应用的并发量。
提示:本次MySQL主从配置需要准备两台服务器,并分别部署主备数据库,数据库通过docker部署,尽量保证主备数据库主备版本一致
一、MySQL数据库主从原理
1.1 主要有有三大步骤:
- 主库上修改数据的记录到二进制日志中,简称为“二进制日志事件”;
- 备库通过IO线程复制主库的二进制日志事件到自己的中继日志中;
- 备库通过sq线程读取中继日志,并将数据重放。
二、部署数据库
2.1 主服务器部署主库
修改对应的数据库密码
docker run -d --name mysql-master \
-v ~/mysql-ssl:/etc/mysql/ssl \
-e MYSQL_ROOT_PASSWORD=your_root_pass \
-p 3306:3306 \
mysql:8.3.0 \
--server-id=1 \
--log-bin=binlog \
--ssl-ca=/etc/mysql/ssl/ca.pem \
--ssl-cert=/etc/mysql/ssl/server-cert.pem \
--ssl-key=/etc/mysql/ssl/server-key.pem
2.2 备服务器部署备库
docker run -d --name mysql-slave \
-v ~/mysql-ssl:/etc/mysql/ssl \
-e MYSQL_ROOT_PASSWORD=your_root_pass \
-p 3307:3306 \
mysql:8.3.0 \
--server-id=2 \
--relay-log=slave-relay-bin
三、配置主、备库
3.1 查看主库的状态
#进入主数据库
docker exec -it mysql-master /bin/bash
#查看状态
show master status\G;
3.2 查看备库的状态
注意:Slave_IO_Running和Slave_SQL_Running的状态都为Yes时,说明从库配置成功。
#进入备数据库
docker exec -it mysql-slave /bin/bash
#查看状态
show slave status\G;
发现Slave_IO_Running=no,IO线程无法启动,导致备库无法通过IO线程复制主库的二进制日志事件到自己的中继日志中,试了网上很多方法都无法解决,最后根据Last_IO_Error报错:Error connecting to source ‘root@10.10.10.65:3306’. This was attempt 5/10, with a delay of 60 seconds between attempts. Message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection.
表明MySQL主从复制连接失败,主要原因是使用caching_sha2_password认证插件但未建立安全连接
四、修复报错
4.1 备库操作:启用 RSA 公钥交换(推荐,简单有效)
#进入数据库
docker exec -it mysql-slave -u root -p
-- 停止复制
STOP SLAVE;
-- 启用 RSA 公钥交换
CHANGE MASTER TO GET_MASTER_PUBLIC_KEY = 1;
-- 重新启动复制
START SLAVE;
4.2 查看备库
SHOW SLAVE STATUS\G
Slave_IO_Running、Slave_SQL_Running的状态都为Yes,主从配置成功
五、验证主从是否生效
5.1 在主库上创建数据库
create schema zcsjk;
5.2 在主库上创建comm_config表
#修改数据库
use zcsjk;
#创建表结构
CREATE TABLE comm_config (configId varchar(200) NOT NULL ,configValue varchar(1024) DEFAULT NULL ,description varchar(2000) DEFAULT NULL ,PRIMARY KEY (configId)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
5.3 在主库上往comm_config表中写入记录
insert into comm_config(configId, configValue, description) values('name', '三少', '今天天气怎么样');
5.4 在备库查看数据是否复制成功

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)