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

Yii2 實現 MySQL 主從讀寫分離配置指南

     編輯:MySQL 綜合教學

Yii2 實現 MySQL 主從讀寫分離配置指南

Yii2 框架內建支援讀寫分離,僅需在配置文件中聲明主從數據庫組件即可自動路由:寫操作(INSERT/UPDATE/DELETE)走 Master,讀操作(SELECT)走 Slave。本文演示最小化配置與驗證方法。

核心原理

  • Master:處理事務性寫操作(INSERT、UPDATE、DELETE、DDL)
  • Slave:處理 SELECT 查詢,分擔讀壓力
  • 好處:備份容災、讀寫分壓、支撐更高併發

配置實戰:db.php

return [
    'class' => 'yii\db\Connection',
    // 主庫配置
    'dsn' => 'mysql:host=127.0.0.1;dbname=master_db',
    'username' => 'root',
    'password' => 'master_pass',
    'charset' => 'utf8mb4',
    
    // 從庫配置(可配置多個,自動負載均衡)
    'slaveConfig' => [
        'username' => 'root',
        'password' => 'slave_pass',
        'charset' => 'utf8mb4',
    ],
    'slaves' => [
        ['dsn' => 'mysql:host=127.0.0.1;dbname=slave_db'],
        // 可添加更多 slave
    ],
];

驗證測試

1. 準備數據

  • Master 庫:INSERT INTO user (id, username) VALUES (1, 'master');
  • Slave 庫:INSERT INTO user (id, username) VALUES (1, 'slave');

2. 執行查詢

$user = User::findOne(1);
var_dump($user->username);

3. 結果驗證

輸出:string(5) "slave"

說明:SELECT 自動路由至 Slave 庫,讀取到 'slave' 值。若執行 $user->save() 則會路由至 Master。

進階配置選項

多從庫負載均衡

'slaves' => [
    ['dsn' => 'mysql:host=192.168.1.10;dbname=slave_db'],
    ['dsn' => 'mysql:host=192.168.1.11;dbname=slave_db'],
    ['dsn' => 'mysql:host=192.168.1.12;dbname=slave_db'],
],
// Yii2 會隨機選擇一個 Slave 連接

強制指定連接(特殊場景)

// 強制使用 Master 讀取(如讀寫分離延遲導致讀不到剛寫入的數據)
$user = User::find()->useMaster()->where(['id' => 1])->one();

// 強制使用 Slave 寫入(極少見,僅特殊邏輯)
$db->useSlave()->createCommand()->insert(...)->execute();

主從同步延遲應對

  1. 關鍵業務強制 Master 讀:useMaster()
  2. 半同步複寫:rpl_semi_sync_master=ON
  3. GTID 複寫:MySQL 5.6+ 標準,故障切換更可靠
  4. 監控延遲:SHOW SLAVE STATUS\G 關注 Seconds_Behind_Master

生產環境檢查清單

  • [ ] Master/Slave 獨立物理機/雲主機
  • [ ] 專用複賬號:GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'xxx';
  • [ ] binlog 格式:binlog_format=ROW
  • [ ] 防火牆僅開放內網 3306
  • [ ] 監控:主從延遲、Slave_IO/Running 狀態、磁碟空間
  • [ ] 定期驗證:pt-table-checksum 數據一致性校驗

Yii2 的讀寫分離實現極其簡潔,核心在於正確配置主從拓撲與應對同步延遲。配合資料庫層面的高可用架構(MHA/Orchestrator/GTID),可構建企業級穩定的數據庫訪問層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數說明預設值
slaveConfig從庫共用配置(用戶、密碼、charset 等)[]
slaves從庫 DSN 列表,支援多台[]
enableSlaves是否啟用讀寫分離true
shuffleMasters多主時是否隨機打散false