数据库主从配置

news/2025/3/20 9:26:10/文章来源:https://www.cnblogs.com/sanqiyi/p/18782342

一、环境准备

服务器规划

 
角色IP 地址说明
MySQL 主库 192.168.1.10 负责写入操作
MySQL 从库 192.168.1.11 负责只读操作
Hyperf 应用 192.168.1.12 业务服务(连接主从库)

软件版本

  • MySQL: 8.0+(主从版本需一致)

  • Hyperf: 3.0+

  • 操作系统: Linux(Ubuntu/CentOS)

二、MySQL 主从复制配置

1. 主库配置(192.168.1.10)

步骤 1:修改 MySQL 配置文件
编辑 /etc/mysql/my.cnf(路径可能因安装方式不同而变化):

[mysqld]
server-id = 1                # 唯一ID,主从不能重复
log_bin = mysql-bin          # 开启二进制日志
binlog_format = ROW          # 推荐使用 ROW 格式
expire_logs_days = 7         # 日志保留天数
max_binlog_size = 100M       # 单个日志文件大小
binlog_do_db = your_db       # 同步的数据库(可选,不配置则同步所有库)

步骤 2:重启 MySQL 服务

systemctl restart mysql

步骤 3:创建主从同步账户
登录 MySQL 执行:

CREATE USER 'repl'@'192.168.1.11' IDENTIFIED BY 'repl_password';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.1.11';
FLUSH PRIVILEGES;

步骤 4:获取主库状态
记录 File 和 Position 值(从库配置需要):

SHOW MASTER STATUS;

输出示例:

+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 756      | your_db      |                  |
+------------------+----------+--------------+------------------+

2. 从库配置(192.168.1.11)

步骤 1:修改 MySQL 配置文件
编辑 /etc/mysql/my.cnf

[mysqld]
server-id = 2                # 唯一ID,不同于主库
relay_log = mysql-relay-bin  # 中继日志
read_only = 1                # 从库只读(超级用户可写)

步骤 2:重启 MySQL 服务

systemctl restart mysql

步骤 3:配置主从复制链路
登录 MySQL 执行:

CHANGE MASTER TO
MASTER_HOST = '192.168.1.10',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'repl_password',
MASTER_LOG_FILE = 'mysql-bin.000001', -- 替换为主库的 File 值
MASTER_LOG_POS = 756;                 -- 替换为主库的 Position 值

步骤 4:启动复制进程

START SLAVE;

步骤 5:检查复制状态
确认 Slave_IO_Running 和 Slave_SQL_Running 均为 Yes

SHOW SLAVE STATUS\G

三、Hyperf 读写分离配置

1. 修改 Hyperf 数据库配置

编辑 config/autoload/databases.php

return ['default' => ['driver' => Hyperf\DB\DB::class,'host' => env('DB_HOST', 'localhost'),'database' => env('DB_DATABASE', 'your_db'),'username' => env('DB_USERNAME', 'root'),'password' => env('DB_PASSWORD', ''),'charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','pool' => ['min_connections' => 1,'max_connections' => 32,'connect_timeout' => 10.0,'wait_timeout' => 3.0,],'read' => [  // 从库列表(读操作)'host' => ['192.168.1.11'],],'write' => [ // 主库列表(写操作)'host' => ['192.168.1.10'],],'mode' => MODE_READ_WRITE, // 读写分离模式'load_balancer' => 'random', // 负载均衡策略(random/round-robin)
    ],
];

2. 验证读写分离

代码测试

// 写入操作(应路由到主库)
Db::table('users')->insert(['name' => 'Hyperf']);
// 读取操作(应路由到从库)
$users = Db::table('users')->get();

日志验证

  • 查看主库的 general_log 确认写入操作:

  • SET GLOBAL general_log = 'ON';
    SHOW VARIABLES LIKE 'general_log%';
  • 查看从库日志确认读取操作。

 

四、常见问题排查

1. 主从同步失败

  • 检查网络:确保主从服务器之间的 3306 端口互通。

  • 账户权限:确认 repl 用户权限是否正确。

  • 日志位置:主库的 File 和 Position 是否与从库配置一致。

2. Hyperf 未正确路由

  • 配置检查:确认 databases.php 中的 read 和 write 配置。

  • 负载均衡策略:若使用多个从库,检查 load_balancer 策略。


五、总结

  • MySQL 主从配置:通过二进制日志实现数据异步复制,需确保主从 server-id 唯一。

  • Hyperf 读写分离:通过 read 和 write 配置自动路由请求,提升读性能。

  • 验证要点

    • 主从数据一致性(手动插入验证)。

    • Hyperf 读写操作是否按预期路由。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/901879.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20242942 2024-2025-2 《网络攻防实践》实验二

一、实验内容 1.网络踩点 攻击者通过公开或半公开的渠道收集目标网络的基本信息。这一阶段的目标是尽可能多地了解目标网络的结构、范围和潜在漏洞,而不会直接与目标系统交互。目的是确定目标网络的IP地址范围;了解目标网络的域名和子域名以及获取目标组织的网络拓扑结构。  …

利用ACE开发时所遇到的问题

1、利用控制台程序开发ACE例程时无法解析的外部符号通过添加main函数的形参解决,如,main()修正为int main(int argc, char* argv[]) 2、关于ACE_SOCK_Dgram的recv方法能接收到数据,但是返回值是-1的问题(另一种现象是发送端发送小于特定长度的数据时,接收正常,当超出特定长…

ASE10N40-ASEMI开关电源专用ASE10N40

ASE10N40-ASEMI开关电源专用ASE10N40编辑:LL ASE10N40-ASEMI开关电源专用ASE10N40 型号:ASE10N40 品牌:ASEMI 封装:TO-220 最大漏源电流:10A 漏源击穿电压:400V 批号:最新 RDS(ON)Max:0.55Ω 引脚数量:3 沟道类型:N沟道MOS管 封装尺寸:如图 特性:MOS管、N沟道MO…

文件安全传输网关,如何防止威胁入侵,助力企业文件安全传输?

金融企业包含大量客户个人信息,如身份信息、金融资产、交易记录等数据。这些数据一旦泄露或被滥用,将严重侵犯客户隐私,可能导致身份盗用、财产损失等问题。同时数据安全事件会严重损害金融企业的声誉和客户的信任度。因此,金融企业需要高度重视数据安全工作,建立完善的数…

通过Ollama如何本地部署DeepSeek R1

1.首先我们到Ollama官网去下载安装包,此处我们下载的是Windows版本的安装包,2、安装Ollama 双击安装会默认安装到C盘,不推荐这个, 可以用命令行安装,自定义安装目录 以管理员身份运行CMD,并定位到OllamaSetup.exe所在的目录(假设OllamaSetup.exe在D:\Temp目录下),然后…

JOKER可视化开发工具迎来重大更新

JOKER可视化开发工具迎来重大更新,共更新和修复了12项问题,并完成了前后端项目的数据关联!为紧跟行业前沿趋势,满足开发者日益增长的需求,我们于2025年3月13日对平台开展了全方位升级。此次更新聚焦前端交互的便捷性、服务端功能的强大性以及通用操作的流畅性,在多方面进…

数字华容道 | 数学益智游戏③

依托国产的 AI 豆包完成的网页端的数字华容道益智游戏。前情概要 使用 AI 辅助设计了三款数学益智游戏,这是第三款数字华容道游戏。 数字华容道body1{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background-color:#f4f4f9;display:flex;justify-content:center;a…

Windows11安装wsl2(适用于 Linux 的 Windows 子系统)

在Windows11系统运行Docker desktop需要安装wsl2,此博客为Windows11安装wsl2(适用于 Linux 的 Windows 子系统)的教程需求:在Windows11系统运行Docker desktop需要安装wsl2 方法一:离线安装(推荐) 进入网址:https://github.com/microsoft/WSL/releases ,下载wsl.2.4.12.…

【一步步开发AI运动APP】二、跨平台APP AI运动识别方案介绍

之前我们为您分享了【一步步开发AI运动小程序】开发系列博文,通过该系列博文,很多开发者开发出了很多精美的AI健身、线上运动赛事、AI学生体测、美体、康复锻炼等应用场景的AI运动小程序;为了帮助开发者继续深耕AI运动领域市场,今天开始我们将为您分享新系列【一步步开发AI…

修改windows用户名

1、首先重命名系统盘的用户文档:【如何更改Windows电脑的本地账户用户名?】 https://www.bilibili.com/video/BV1b2421L7cR/?share_source=copy_web&vd_source=8c2fd9ec8bef74a8517070eaa3b47916 (注意:• 如果出现“XXXXXX桌面不可用。如果该位置位于这台电脑上,…

解析Collections工具类主要功能

Collections 是 JDK 提供的一个工具类,位于 java.util 包下,提供了一系列的静态方法,方便我们对集合进行各种操作,算是集合框架的一个大管家。 大致看一下方法名和参数就能知道这个方法是干嘛的:排序操作reverse(List list):反转顺序 shuffle(List list):洗牌,将顺序打乱…

微服务配置相关

​ 微服务某商城模块,进行购物车结算时提示订单生成失败,后台无错误,打开f12检查,有数据进入,但报错503,猜测是服务器方面的问题,排查后发现是配置Nacos时,明明不规范无法识别 修改前: ​​​​ 修改后:修改完成后不再出现问题,问题解决 ​