在这里插入图片描述

系列文章目录

前言

本文将讲解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 在备库查看数据是否复制成功

在这里插入图片描述

Logo

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

更多推荐