備註:文章編寫時間201904-201905期間,後續官方在github的更新沒有被寫入node
~
~
ProxySQL是被公認的功能強大的MySQL中間件之一,但官網視乎很低調;以致於沒有清楚的說明它本身到底擅長什麼....
因而,經過網上收集,大體列出ProxySQL主要功能:mysql
~
~c++
官網:https://proxysql.com/git
github地址:https://github.com/sysown/proxysql
~
~github
# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo [proxysql_repo] name= ProxySQL YUM repository #proxysql2.0版地址 baseurl=https://repo.proxysql.com/ProxySQL/proxysql-2.0.x/centos/\$releasever #proxysql1.4版本地址 #baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever gpgcheck=1 gpgkey=https://repo.proxysql.com/ProxySQL/repo_pub_key EOF
# yum install proxysql OR yum install proxysql-version
~
~sql
# tar -zxvf proxysql-1.4.15.tar.gz # cd proxysql-1.4.15
# less INSTALL.md
# yum install automake bzip2 cmake make gcc-c++ gcc git openssl openssl-devel patch 備註:須要保證gcc-c++版本足夠新,否則編譯有錯。 # yum install perl-DBD-MySQL ==>使用yum安裝時用到了整個依賴包,這裏也一塊兒裝了。 # make # make install
# vim /etc/profile PROXYPATH=/usr/local/proxysql/usr/bin export PATH=$PATH:$PROXYPATH
本人在Centos6.5和Centos 7.2上都沒有安裝成功!!最後使用了yum方式!這裏按INSTALL.md編寫的。數據庫
~
~vim
直接使用二進制包(percona版)後端
下載地址: https://www.percona.com/downloads/proxysql/proxysql-1.4.12/binary/tarball/proxysql-1.4.12-Linux-centos6-x86_64.tar.gz
# tar -zxvf proxysql-1.4.12-Linux-centos6-x86_64.tar.gz -C /usr/local/proxysql # cd /usr/local/ # mv proxysql-1.4.12-Linux-x86_64 proxysql # tree proxysql proxysql ├── etc │ ├── init.d │ │ └── proxysql │ ├── logrotate.d │ │ └── proxysql-logrotate │ ├── proxysql-admin.cnf │ └── proxysql.cnf ├── tests │ ├── async-slave-testsuite.bats │ ├── desynced-host-testsuite.bats │ ├── generic-test.bats │ ├── host-priority-testsuite.bats │ ├── loadbal-testsuite.bats │ ├── proxysql-admin-testsuite.bats │ ├── proxysql-admin-testsuite.sh │ ├── test-common.bash │ └── writer-is-reader-testsuite.bats ├── usr │ └── bin │ ├── proxysql │ ├── proxysql-admin │ ├── proxysql_galera_checker │ ├── proxysql_node_monitor │ └── proxysql-status └── var └── lib └── proxysql 9 directories, 18 files
# vim /etc/profile PROXYPATH=/usr/local/proxysql/usr/bin export PATH=$PATH:$PROXYPATH
~
~centos
# proxysql --version ProxySQL version 2.0.2-1-g533442f, codename Truls 備註:本次實驗安裝得是2.0.2版本
~
~
說明:根據實際狀況修改datadi路徑,默認爲/var/lib/proxysql。
# cd /usr/local/proxysql/etc # vim proxysql.cnf datadir="/usr/local/proxysql/var/lib/proxysql"
# vim proxysql-admin.cnf export PROXYSQL_DATADIR='/usr/local/proxysql/var/lib/proxysql' 備註:2.0版本中沒有了這個配置文件。
~
~
啓動
若是不使用/etc/init.d/proxysql服務腳本啓動,則須要在啓動前設置
ulimit -n 102400 ulimit -c 1073741824 即設置 vim /etc/security/limits.conf proxysql soft nofile 102400 proxysql soft core 1073741824 # proxysql -c /usr/local/proxysql/etc/proxysql.cnf & 或 #service proxysql start
中止
# service proxysql stop 或 Admin> proxysql stop ; -->中止提供服務,但進程還在。
重啓
# service proxysql restart 或 Admin> proxysql restart ;
~
~
使用mysql客戶端鏈接proxysql,默認端口6032 默認用戶名,密碼都是 admin
# mysql -u admin -padmin -h 127.0.0.1 -P 6032 --prompt 'Admin> '
注意:若是你使用的MySQL客戶端版本爲8.04及之後,鏈接時請添加參數項--default-auth=mysql_native_password
~
~
查看實例中的默認數據庫:
Admin>SHOW DATABASES; +-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | | 5 | stats_history | /var/lib/proxysql/proxysql_stats.db | +-----+---------------+-------------------------------------+ 5 rows in set (0.00 sec) Admin>show tables; +--------------------------------------------+ | tables | +--------------------------------------------+ | global_variables | | mysql_collations | | mysql_galera_hostgroups | | mysql_group_replication_hostgroups | | mysql_query_rules | | mysql_query_rules_fast_routing | | mysql_replication_hostgroups | | mysql_servers | | mysql_users | | proxysql_servers | | runtime_checksums_values | | runtime_global_variables | | runtime_mysql_galera_hostgroups | | runtime_mysql_group_replication_hostgroups | | runtime_mysql_query_rules | | runtime_mysql_query_rules_fast_routing | | runtime_mysql_replication_hostgroups | | runtime_mysql_servers | | runtime_mysql_users | | runtime_proxysql_servers | | runtime_scheduler | | scheduler | +--------------------------------------------+ 22 rows in set (0.00 sec)
~
~
配置ProxySQL首選的方式就是經過admin interface,它能夠在線動態修改配置,而且不須要重啓ProxySQL服務。
其次纔是經過修改配置文件來調整。
~
~
這裏大概的過一下配置文件相關內容:
datadir==>指定ProxySQL服務的數據存放路徑(字符串);
~
~
admin_variables==>對應global_variables表中那些控制着admin interface的相關功能的全局參數項,也就是配置ProxySQL本身的鏈接信息;
# cat /usr/local/proxysql/etc/proxysql.cnf admin_variables= { admin_credentials="admin:admin" mysql_ifaces="0.0.0.0:6032" }
~
~
mysql_variables==>對應global_variables表中那些控制着傳入MySQL流的相關功能的全局參數項,也就是配置ProxySQL訪問後端MySQL的設置 ;
# cat /usr/local/proxysql/etc/proxysql.cnf mysql_variables= { threads=4 max_connections=2048 default_query_delay=0 default_query_timeout=36000000 server_version="5.5.30" connect_timeout_server=3000 ......... }
~
~
mysql_servers==>對應admin interface中mysql_servers表中的內容;它定義了後端MySQL服務的信息。
它須要以.cfg(配置文件)的格式來書寫。
mysql_servers = ( { address="127.0.0.1" port=3306 hostgroup=0 max_connections=200 } )
~
~
mysql_users==>對應admin interface中mysql_users表中的內容;它是控制哪些用戶可用連入ProxySQL以及哪些用戶能夠訪問
後端的MySQL服務。它須要以.cfg(配置文件)的格式來書寫。
mysql_users: ( { username = "root" password = "root" default_hostgroup = 0 max_connections=1000 default_schema="information_schema" active = 1 } )
~
~
mysql_query_rules==>對應admin interface中mysql_query_rules表中的內容;用於定義對傳入的MySQL流量進行分類和路由的規則。
建議根據查詢來編寫特定的規則,而不是下下面同樣籠統的歸納。
mysql_query_rules: ( { rule_id=1 active=1 match_pattern="^SELECT .* FOR UPDATE$" destination_hostgroup=0 apply=1 }, { rule_id=2 active=1 match_pattern="^SELECT" destination_hostgroup=1 apply=1 } )
~
~
完畢!