首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 讀寫分離實戰部署:mysql-proxy 與 mysqlnd_ms 兩大方案完整配置指南

     編輯:MySQL 綜合教學

MySQL 讀寫分離實戰部署:mysql-proxy 與 mysqlnd_ms 兩大方案完整配置指南

讀寫分離將寫操作路由至 Master,讀操作分發至 Slave,大幅降低主庫壓力。本文詳解中間件 mysql-proxy(Lua 腳本路由)與 PHP 擴展 mysqlnd_ms(驅動層路由)的安裝配置全流程。

方案一:mysql-proxy(通用中間件)

1. 安裝

下載二進制包解壓:

tar -zxvf mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit.tar.gz
mv mysql-proxy-0.8.3-linux-glibc2.3-x86-64bit /usr/local/mysql-proxy

依賴:libevent 2.x、lua 5.1.x、glibc 2.6+、pkg-config、libtool 1.5+。

2. 前置:搭建主從復制

Master: 192.168.216.133:3306
Slave:  192.168.216.132:3306

3. 配置 mysql-proxy.conf

[mysql-proxy]
daemon=true
keepalive=true
log-level=debug
log-file=/var/log/mysql-proxy.log
basedir=/usr/local/mysql-proxy
proxy-address=192.168.216.132:4040
proxy-backend-addresses=192.168.216.133:3306        # Master (讀寫)
proxy-read-only-backend-addresses=192.168.216.132:3306 # Slave (唯讀)
proxy-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua
admin-address=192.168.216.132:4041
admin-username=admin
admin-password=admin
admin-lua-script=/usr/local/mysql-proxy/share/doc/mysql-proxy/admin.lua

權限 chmod 600 mysql-proxy.conf,確保 Lua 腳本存在。

4. 啟動與測試

/usr/local/mysql-proxy/bin/mysql-proxy \
  --plugins=proxy --plugins=admin \
  --defaults-file=mysql-proxy.conf

管理端檢查後端狀態:

mysql -uadmin -padmin -h192.168.216.132 -P4041
SELECT * FROM backends;

需在後端 MySQL 授權 proxy 連接用戶。自定義 admin.lua 實現管理介面。
常見問題:連接數不足調整 min_idle_connections/max_idle_connections;亂碼設置 skip-character-set-client-handshake、init-connect='SET NAMES utf8'。

方案二:mysqlnd_ms(PHP 驅動層原生支持)

需 PHP 編譯時 --with-mysqlnd,無需本地 MySQL 客戶端庫。

1. 安裝擴展

tar -zxvf mysqlnd_ms-1.5.2.tgz
cd mysqlnd_ms-1.5.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install

記錄生成的 .so 路徑。

2. 配置 php.ini

extension = /path/to/mysqlnd_ms.so
mysqlnd_ms.enable = On
mysqlnd_ms.config_file = /usr/local/php/etc/mysqlnd_ms_plugin.ini

3. 編寫 mysqlnd_ms_plugin.ini

{
  "myapp": {
    "master": {
      "master_0": { "host": "192.168.6.135", "socket": "/tmp/mysql.sock" }
    },
    "slave": {
      "slave_0": { "host": "192.168.6.136", "port": "3306" },
      "slave_1": { "host": "192.168.6.137", "port": "3306" }
    },
    "filters": { "random": { "sticky": "1" } }
  }
}

sticky=1 保證同一請求內讀操作固定路由到同一 Slave,避免複製延遲導致讀舊數據。

4. 應用接入

以 WordPress 為例,修改 wp-config.php:

define('DB_HOST', 'myapp');

驅動自動識別 SELECT 路由至 Slave,寫操作路由至 Master。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved