搜尋
首頁專題PHP Mysql透過ProxySQL方法提升PHP/MySQL的效能

透過ProxySQL方法提升PHP/MySQL的效能

相關學習推薦:mysql教學

#前些天我介紹如何透過Twemproxy 實作Redis 連線池,進而提升PHP/Redis 的效能。今天要介紹一下ProxySQL,透過它可以實現MySQL 連線池,進而提升PHP/MySQL 的效能,其實原理是差不多的,本來沒必要再寫一篇文章贅述,不過我在設定使用ProxySQL 的過程中,遇到了一些小問題,感覺還是該記錄。

關於安裝過程,官方 Wiki 裡有詳細描述。主要看設定檔/etc/proxysql.cnf :

datadir="/var/lib/proxysql"
admin_variables=
{
admin_credentials="admin:admin"
mysql_ifaces="0.0.0.0:6032"
}
mysql_variables=
{
threads=4
max_connections=2048
default_query_delay=0
default_query_timeout=36000000
have_compress=true
poll_timeout=2000
interfaces="/var/run/proxysql.sock"
default_schema="information_schema"
stacksize=1048576
server_version="5.5.30"
connect_timeout_server=3000
monitor_username="monitor"
monitor_password="monitor"
monitor_history=600000
monitor_connect_interval=60000
monitor_ping_interval=10000
monitor_read_only_interval=1500
monitor_read_only_timeout=500
ping_interval_server_msec=120000
ping_timeout_server=500
commands_stats=true
sessions_sort=true
connect_retries_on_failure=10
}
mysql_servers =
(
{
address="..."
port=3306
}
)
mysql_users:
(
{
username = "..."
password = "..."
}
)

最應該注意的是:ProxySQL 使用SQLite 來保存設定訊息,設定檔只在第一次啟動的時候有效,後續都是從SQLite 取得配置。如果你想強制使用設定文件,需要使用 initial 指令。

首先,注意admin_variables 裡的admin_credentials,缺省值是“admin:admin”,表示缺省用戶名和密碼都是admin,還有mysql_ifaces,其缺省值是“ 0.0.0.0:6032」,表示監聽所有網路介面的6032 端口,設想你有一個外網能訪問的網絡接口,那麼惡意用戶將能使用缺省的用戶名密碼進入到你的admin 系統,所以不要用預設的用戶名和密碼,也不要缺省監聽外網接口,切記!切記!切記!

其次,注意mysql_variables 裡的interfaces,因為PHP 要透過本地的Unix Domain Socket 來請求ProxySQL 的連接池,所以interfaces 不要使用ip:port 的形式,而是設定成本地Unix Domain Socket 的形式,本例設定為/var/run/proxysql.sock,需要提醒的是很多人喜歡把Socket 檔案放到/tmp 路徑下,這不是一個好習慣,畢竟/tmp 從名字上看就不像是一個良家婦女,大家都想弄兩下,搞不好誰rm 了一下就糟了。

最後,注意mysql_variables 裡的monitor_username 和monitor_password,它設定了監控用戶的相關信息,以便ProxySQL 隨時掌握後端MySQL 伺服器的狀態,一定要記得提前在後端MySQL 伺服器上建立對應的帳號,我一開始就沒創建監控帳號,結果ProxySQL 運行一段時間就沒回應了.

這是因為當ProxySQL 不斷用配置裡的監控帳號和密碼嘗試去存取後端伺服器的時候,會產生許多「Access denied for user 'monitor'@'…'」的錯誤,當達到一定閾值,就會導致「Host '…' is blocked because of many connection errors」,此時ProxySQL 就無法回應請求了,必須在MySQL 上「mysqladmin flush-hosts」才行。相關的日誌資訊可以在「SELECT * FROM monitor.mysql_server_ping_log」裡查看。

下面讓我們壓測看看效能怎麼樣,測試腳本test.php 如下:

<?php
$host = &#39;...&#39;;
$user = &#39;...&#39;;
$password = &#39;...&#39;;
$database = &#39;...&#39;;
$charset = &#39;utf8mb4&#39;;
$socket = &#39;/var/run/proxysql.sock&#39;;
$dsn = "mysql:dbname={$database};charset={$charset}";
if (empty($_GET[&#39;proxysql&#39;])) {
    $dsn .= ";host={$host}";
} else {
    $dsn .= &#39;;unix_socket={$socket}&#39;;
}
$dbh = new PDO($dsn, $user, $password);
$sql = &#39;SELECT * FROM foo LIMIT 10&#39;;
$value = $dbh->query($sql);
foreach ($value as $v) {
    var_dump($v);
}
?>

透過ab 模擬一個高並發的場景,壓測看看效能有沒有提升:

shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=0"
shell> ab -k -n 10000 -c 100 "http://path/test.php?proxysql=1"

最終,我在一台一般配置的伺服器上,不透過ProxySQL 得到了大約1500 的RPS,透過ProxySQL 得到了大約2000 的RPS,也就是說,ProxySQL 帶來了25% 的效能提升。

想了解更多相關文章,請關注php mysql欄位!

以上是透過ProxySQL方法提升PHP/MySQL的效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:juejin。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具