本文目錄一覽:
- 1、php mysql 怎麼實現讀寫分離
- 2、Zend Framework中如何實現MySQL的讀寫分離 – PHP框架開發
- 3、php MySQL 很多用戶頻繁讀寫操作怎麼優化
- 4、mysql 如何實現讀寫分離,用mysql-proxy 或者直接用php連接兩個數據庫?
- 5、php手把手教你做網站(二十九)thinkphp6部署多個數據庫
php mysql 怎麼實現讀寫分離
?php
class Db
{
private $res;
function __construct($sql)
{
$querystr = strtolower(trim(substr($sql,0,6)));
//如果是select,就連接slave服務器
if($querystr == ‘select’)
{
$res=$this-slave_select($sql);
$this-res=$res;
}
//如果不是select,就連接master服務器
else
{
$res=$this-master_change($sql);
$this-res=$res;
}
}
/**
* slave從庫返回sql查詢結果
* @param $sql
* @return array
*/
private function slave_select($sql){
//該處只是隨機獲取slave節點的ip,當然,還可以採用其他算法獲取slave_ip
$slave_server=$this-get_slave_ip();
$dsn=”mysql:host=$slave_server;dbname=test”;
$user=’root’;
$pass=’123456′;
$dbh=new PDO($dsn, $user, $pass);
return $dbh-query($sql)-fetchAll(PDO::FETCH_ASSOC);
}
/**master主庫返回sql執行結果
* @param $sql
* @return int
*/
private function master_change($sql){
$master_server=’192.168.33.22′;
$dsn=”mysql:host=$master_server;dbname=test”;
$user=’root’;
$pass=’123456′;
$dbh=new PDO($dsn, $user, $pass);
return $dbh-exec($sql);
}
/**
* 隨機獲取slave-ip
* @return mixed
*/
private function get_slave_ip(){
$slave_ips=[‘192.168.33.33′,’192.168.33.44’];
$count=count($slave_ips)-1;
$random_key=mt_rand(0,$count);
return $slave_ips[$random_key];
}
/**
* 獲取結果
* @return int
*/
public function get_res(){
return $this-res;
}
}
$sql1 = “select * from t1”;
$sql2 = “insert into t1 (name) values (‘haha’)”;
$sql3 = “delete from t1 where id=1”;
$sql4 = “update t1 set name=’Jerry’ where id=2”;
$db = new Db($sql1);
//$db = new Db($sql2);
//$db = new Db($sql3);
//$db = new Db($sql4);
var_dump($db-get_res());
Zend Framework中如何實現MySQL的讀寫分離 – PHP框架開發
繼承Zend_Db_Table_Abstract,新建一個類,添加2個方法,getReaderDb()和getWriterDb()。
php MySQL 很多用戶頻繁讀寫操作怎麼優化
有很多種方法可以優化:
數據庫設置主從,進行讀寫分離;
數據分表,如按月份分表,需要統計數據就查總表;
優化查詢語句,適當增加索引;
字段優化,對不常用或者沒有必要的字段可以考慮放在另外一張表裡,避免單表數據過大,字段過多。
mysql 如何實現讀寫分離,用mysql-proxy 或者直接用php連接兩個數據庫?
Mysql主從配置,實現讀寫分離
原理:主服務器(Master)負責網站NonQuery操作,從服務器負責Query操作,用戶可以根據網站功能模特性塊固定訪問Slave服務器,或者自己寫個池或隊列,自由為請求分配從服務器連接。主從服務器利用MySQL的二進制日誌文件,實現數據同步。二進制日誌由主服務器產生,從服務器響應獲取同步數據庫。
具體實現:
1、在主從服務器上都裝上MySQL數據庫,windows系統鄙人安裝的是mysql_5.5.25.msi版本,Ubuntu安裝的是mysql-5.6.22-linux-glibc2.5-i686.tar
windows安裝mysql就不談了,一般地球人都應該會。鄙人稍微說一下Ubuntu的MySQL安裝,我建議不要在線下載安裝,還是離線安裝的好。大家可以參考 這位不知道大哥還是姐妹,寫的挺好按照這個就能裝上。在安裝的時候可能會出現幾種現象,大家可以參考解決一下:
(1)如果您不是使用root用戶登錄,建議 su – root 切換到Root用戶安裝,那就不用老是 sudo 了。
(2)存放解壓的mysql 文件夾,文件夾名字最好改成mysql
(3)在./support-files/mysql.server start 啟動MySQL的時候,可能會出現一個警告,中文意思是啟動服務運行讀文件時,忽略了my.cnf文件,那是因為my.cnf的文件權限有問題,mysql會認為該文件有危險不會執行。但是mysql還會啟動成功,但如果下面配置從服務器參數修改my.cnf文件的時候,你會發現文件改過了,但是重啟服務時,修改過後的配置沒有執行,而且您 list一下mysql的文件夾下會發現很多.my.cnf.swp等中間文件。這都是因為MySQL啟動時沒有讀取my.cnf的原因。這時只要將my.cnf的文件權限改成my_new.cnf的權限一樣就Ok,命令:chmod 644 my.cnf就Ok
(4)Ubuntu中修改文檔內容沒有Vim,最好把Vim 裝上,apt-get install vim,不然估計會抓狂。
這時候我相信MySQL應該安裝上去了。
2、配置Master主服務器
(1)在Master MySQL上創建一個用戶『repl』,並允許其他Slave服務器可以通過遠程訪問Master,通過該用戶讀取二進制日誌,實現數據同步。
php手把手教你做網站(二十九)thinkphp6部署多個數據庫
前邊介紹了負載均衡,mysql同步,接下來介紹tp6分佈式部署多個數據庫,實現讀寫分離。
tp6的分佈式部署讀和寫仍然是一個系統,這裡我們分開操作,給用戶展示的就是從數據庫,後端添加文章就是主庫,然後同步到從庫。
1、配置數據庫鏈接參數
目標:實現隨機使用數據庫展示信息,只是讀操作。
測試:前台可以讀取表中內容(存放的不一致),查看是否是隨機顯示的。
打開.env文件進行編輯
說明:
2、編輯database.php
找到deploy設置為1分佈式部署,下邊不要改,都是讀,寫入的也就是後端的我們單獨建站連接主庫。
配置完成,tp6使用的是mt_rand取隨機數判斷使用哪個數據庫。
3、數據庫交互寫操作
比如瀏覽量沒必要每次都去更新數據庫,可以先使用redis緩存,存夠1000的整數倍,再去更新數據庫。
4、後台獨立,也就是寫
可以前後端分離,單獨做一個網站(沒有前端)使用ip訪問或者獨立的域名連接後台。
5、上傳附件(jquery ajax跨域上傳)
使用了nginx負載均衡,肯定是多個一樣的網站,如果圖片存放到一個站,別的就不能訪問了,可以單獨設置一個附件(壓縮包,圖片等)服務器,可以使用二級域名連接,這就要求我們上傳附件的時候,是上傳到附件服務器。
jqueryURL
API控制器apdpic方法
說明:
也可以先傳到後台服務器然後使用(php)ftp上傳,或者是通過curl上傳到附件服務器,感覺那樣畢竟麻煩,直接設置跨域會比較簡單。
也測試了使用jsonp跨域,但是不能上傳附件。
6、thinkphp6實現讀寫分離(在一個站點)
我個人是不喜歡這樣的,負載均衡應該是均衡地讀,也就是前台單獨一個站點,後端的寫是另一個獨立的站點,看個人喜好吧。
獨立後台的優點:可以提升安全性,因為我們的後台網址是不公開的,避免用戶猜測一些後台的信息。
.env配置按照1所述編輯,默認第一個是主庫。
database.php
願大家在新的一年心想事成,萬事如意!!!
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/153375.html