項目想要數據庫讀寫分離,需要配置兩個方面,一個是數據庫配置,另一個是ThinkPHP5配置,前面寫過一篇關於MySQL讀寫分離配置的文章MySQL主從同步及讀寫分離,這篇介紹ThinkPHP5里怎么運用
主服務器ip:192.168.8.102,從服務器ip:192.168.8.103
一、修改TP5數據庫配置文件
需要修改服務器地址,用戶名,密碼,端口,數據庫部署方式,開啟讀寫分離
第一個IP地址默認是主庫,連接的數據庫個數取決於hostname定義的數量,所以即使是兩個相同的IP也需要重復定義,但其他參數如果存在相同的可以不用重復定義,如:
'hostport' => '3306,3306',
和
'hostport' => '3306',
等效。
二、TP5測試
<?php namespace app\index\controller; use think\Controller; use think\Db; class Index extends Controller { // 讀操作測試 public function index() { $list = Db::table('user')->select(); echo "<pre>"; print_r($list); } // 寫操作測試 public function curd() { $data['name'] = 'asdzxc'; $data['age'] = 12; $res = Db::table('user')->insert($data); if ($res) { echo "success"; }else{ echo "error"; } } }
我執行的是先添加數據,再查詢,也都請求成功了,下面從日志上看是否真正讀寫分離了
我是先添加數據,再查詢,從上面的日志可以看出,寫操作(添加、修改、刪除)是在192.168.8.102主服務器上,讀操作(查詢)是在192.168.8.103從服務器上
如果出現數據庫訪問權限問題,可以使用如下方法提權
GRANT ALL PRIVILEGES ON *.* TO '賬號'@'%' IDENTIFIED BY '密碼' WITH GRANT OPTION; //提權 flush privileges; //刷新