当前位置:首页 > PHP

php实现主从分离

2026-02-15 22:26:10PHP

实现 MySQL 主从分离的 PHP 方案

主从分离(读写分离)是数据库优化的常见手段,通过将读操作分发到从库,写操作定向到主库,减轻主库压力。以下是 PHP 实现主从分离的几种方法:

php实现主从分离

使用 PDO 或 MySQLi 手动分离

创建两个数据库连接对象,分别指向主库和从库,在代码中根据操作类型选择连接:

php实现主从分离

// 主库连接(写操作)
$master = new PDO('mysql:host=master_host;dbname=db', 'user', 'password');

// 从库连接(读操作)
$slave = new PDO('mysql:host=slave_host;dbname=db', 'user', 'password');

// 写操作示例
$master->query("INSERT INTO users (name) VALUES ('John')");

// 读操作示例
$result = $slave->query("SELECT * FROM users");

使用中间件代理

通过中间件(如 ProxySQL、MySQL Router)自动路由读写请求,PHP 只需连接代理地址:

// 统一连接代理地址
$db = new PDO('mysql:host=proxy_host;dbname=db', 'user', 'password');

// 代理自动路由读写
$db->query("INSERT INTO logs (message) VALUES ('test')"); // 写操作到主库
$db->query("SELECT * FROM logs"); // 读操作到从库

框架内置支持

部分 PHP 框架(如 Laravel、ThinkPHP)内置读写分离配置。以 Laravel 为例:

// config/database.php 配置
'mysql' => [
    'write' => [
        'host' => 'master_host',
    ],
    'read' => [
        'host' => 'slave_host',
    ],
    'sticky' => true, // 同一请求内读写保持一致性
];

// 代码中无需显式区分
DB::table('users')->insert(['name' => 'Jane']); // 自动写主库
DB::table('users')->get(); // 自动读从库

注意事项

  • 主从延迟:从库同步可能存在延迟,对实时性要求高的查询可强制读主库。
  • 连接池管理:高并发场景建议使用连接池(如 Swoole 的数据库连接池)。
  • 故障转移:需监控从库状态,异常时自动降级到主库。

性能优化建议

  1. 使用预处理语句减少 SQL 解析开销
  2. 对从库配置多个读副本实现负载均衡
  3. 对高频查询考虑引入缓存层(如 Redis)

标签: 主从php
分享给朋友:

相关文章

php实现打印功能

php实现打印功能

PHP实现打印功能的方法 在PHP中实现打印功能可以通过多种方式完成,包括直接输出到浏览器、生成PDF文件、调用打印机接口等。以下是几种常见的方法: 直接输出HTML内容 PHP可以通过echo或…

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php购物车实现

php购物车实现

PHP购物车实现方法 使用PHP实现购物车功能可以通过多种方式完成,以下是几种常见的实现方法: Session存储购物车数据 利用PHP的$_SESSION超全局变量存储购物车数据是最简单的方法。用…

php实现一个

php实现一个

PHP 实现一个简单的计算器 创建一个基本的计算器,支持加、减、乘、除运算。以下是一个完整的实现代码示例: <?php $result = ""; if ($_SERVER["REQUEST…