MySQL主从架构

1 主从架构解决了什么问题

随着业务的持续增长,单体数据库满足不了业务的需求,可能会出现负载过重,操作数据库速度变慢的情况。为了解决这个问题,数据库一般采用一主一从、一主多从的架构。

为了操作提高效率,减轻压力,采用读写分离:

• 主数据库只负责写

• 从数据库只负责读

2 主从复制的原理

  1. MySQL的主从复制基于主数据库的二进制日志(binlog)中记录所有对数据库的更改操作,所以主数据库需要开启二进制日志。

  2. 每个从数据库和主数据库进行配置连接。在主数据库上进行的任何更新操作都会同步给从数据库,从数据库接收主数据库的二进制日志。从数据库根据二进制日志进行数据操作。

  3. 从数据库执行的数据操作不会对主数据库造成干扰。即从数据库在备份数据过程中,主数据库可继续处理数据更新操作。

3 主从复制配置实战

主数据库的搭建请参考之前的文章:【揭秘】Docker安装MySQL8.0大公开,你知道吗?

3.1 使用docker启动从数据库

sql 复制代码
docker run -p 3307:3306 -e MYSQL_ROOT_PSSWORD=123456 --name mysql-slaver -v /root/mysql2/conf/my.cnf:/etc/mysql/my.cnf -v /root/mysql2/logs:/var/log/mysql -v /root/mysql2/data:/var/lib/mysql -v /root/mysql2/mysql-files:/var/lib/mysql-files -d mysql:8.0

3.2 修改server_id

修改my.cnf配置文件,修改主数据库的server_id为1,从服的server_id为2,修改后重启数据库。

bash 复制代码
[root@VM-24-10-centos conf]# 
cat my.cnf 
[mysqld]
lower_case_table_names=1
server-id=1
#skip-grant-tables

使用MySQL命令查看是否设置成功,查询server_id是否可配置文件中一致

bash 复制代码
show variables like 'server_id';

3.3 修改server-uuid

修改data目录下的auto.cnf中的server-uuid,主从的server-uuid不能一致,否则会有报错(#Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.)

bash 复制代码
[root@VM-24-10-centos data]# cat auto.cnf 
[auto]
server-uuid=60a0cb5e-1a2f-11ee-8244-0242ac110003

3.4 在主数据库上新增用户

在主数据库上新增用户用于从数据库同步数据时,连接使用

1、创建新用户

create user 'slave'@'%' identified by 'slave12345';

2、刷新权限

flush privileges;

3、赋予权限,%标识不限制主机

grant replication slave on . to 'slave'@'%';

4、刷新权限

flush privileges;

5、查看用户

select host,user,plugin,authentication_string from mysql.user;

3.5 在主数据库上查看Master状态

查询Master状态,并记录 File 和 Position 的值

show master status;

3.6 在从数据库上获取主数据库的密钥

否则会报错(# error connecting to master 'slave@10.0.24.10:3306' - retry-time: 60 retries: 51 message: Authentication plugin 'caching_sha2_password' reported error: Authentication requires secure connection.)

mysql -u slave -pslave12345 -h 10.0.24.10 -P 3306 --get-server-public-key

3.7 在从数据库上设置同步

设置主数据库参数

bash 复制代码
change master to master_host ='10.0.24.10', master_port =3306, master_user ='slave', master_password ='slave12345', master_log_file ='binlog.000007', master_log_pos =156;
  • master_host 为主数据库的ip
  • master_port为主数据库的端口号
  • master_user,master_password为主数据库新建的同步数据使用的用户名和密码
  • master_log_files为查询主数据库状态时的File
  • master_log_pos为查询主数据库状态时的Position

3.8 同步命令

开始同步

bash 复制代码
start slave;

当出现问题时,停止同步# 停止同步
stop slave;
reset slave;

3.9 查看设置是否成功

在从数据库上使用show slave status查看同步状态:

bash 复制代码
show slave status;

如上显示即为主从数据库搭建成功。


关注我,我们一起学习

相关推荐
数据库小学妹1 小时前
国产数据库怎么选?兼容、迁移、核心案例与融合架构四道关
数据库·架构·国产数据库·数据库迁移·融合数据库
霸道流氓气质1 小时前
Serverless 架构入门与实战:FaaS/BaaS 模型、Spring Cloud Function 适配与 AI 推理冷启动优化的 Java 全栈指南
spring cloud·架构·serverless
IvorySQL2 小时前
PostgreSQL 日报| PgBouncer 修复三个 CVE 漏洞(10 月 15 日)
数据库·postgresql·区块链
饺子大魔王的男人2 小时前
后台表格、查询、流程总在重复写?我用ToolJet把PostgreSQL直接做成可远程访问的业务系统
数据库·postgresql
Gauss松鼠会2 小时前
高斯数据库(openGauss)的物理存储结构
运维·服务器·数据库·sql·opengauss·经验总结
杨云龙UP3 小时前
PostgreSQL 18.4 数据库整库迁移实战:pg_dump 备份与 pg_restore 恢复完整操作手册
运维·服务器·数据库·postgresql·pg_dump·pg_restore
AOI小白新手上路3 小时前
autodl常用的tar 打包下载(数据集)命令手册:逐段拆解与套用模板
java·大数据·数据库
凯歌的博客4 小时前
DuckDB 是一款进程内的分析型数据库
数据库·ai编程
dishugj4 小时前
Oracle物理体系结构
数据库·oracle