MySQL ProxySQL相關維護說明


背景:

      前面的2篇文章MySQL ProxySQL讀寫分離使用初探MySQL ProxySQL讀寫分離實踐大致介紹了ProxySQL的使用說明,從文章的測試的例子中看到ProxySQL使用SQLITE來進行配置的持久化,以及ProxySQL是一個CPU密集型的中間價,如果CPU比較空閑,可以像MySQL一樣安裝多個實例的ProxySQL,充分利用資源。下面介紹下如何備份持久化的ProxySQL配置和多實例ProxySQL的創建。

多實例建立:

假設默認的實例已經裝好了(6032、6033),現在需要新增一個新實例(ProxySQL2):7032,7033

1,添加配置文件:

cp /etc/proxysql.cnf /etc/proxysql2.cnf

2,修改配置文件:修改3行

datadir="/var/lib/proxysql2"
...
...
        mysql_ifaces="127.0.0.1:7032;/tmp/proxysql_admin2.sock"
...
...
        interfaces="0.0.0.0:7033;/tmp/proxysql2.sock"
...

3,添加啟動文件:

cp /etc/init.d/proxysql /etc/init.d/proxysql2

4,修改啟動文件: 

OLDDATADIR="/var/run/proxysql2"
DATADIR="/var/lib/proxysql2"
OPTS="-c /etc/proxysql2.cnf -D $DATADIR" 修改成新的啟動 sudo -u proxysql /usr/bin/proxysql2 $OPTS 修改2行: for i in `pgrep proxysql` ; do 替換為: for i in `pidof proxysql2` ; do

最后修改一些輸出:
把echo輸出的proxysql改成proxysql2

5,復制執行文件(懶的修改腳本了,直接復制新起一個執行文件...):

cp /usr/bin/proxysql /usr/bin/proxysql2

這里需要注意的是:需要修改默認實例的啟動文件(/etc/init.d/proxysql)

修改2行: for i in `pgrep proxysql` ; do 替換為: for i in `pidof proxysql` ; do

即把pgrep改成pidof,這是因為通過pgrep找到了所有的proxysql實例的進程號,會引起誤操作,單實例ProxySQL可以不需要考慮。

6,修改權限:

chown -R proxysql.proxysql proxysql2.cnf 
chown -R proxysql.proxysql proxysql2/

7,開啟實例:

root@dbproxy:/var/lib# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE!
root@dbproxy:/var/lib# ps -ef| grep proxy
proxysql   5324      1  0 May27 ?        00:00:00 /usr/bin/proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
proxysql   5325   5324  0 May27 ?        00:20:29 /usr/bin/proxysql -c /etc/proxysql.cnf -D /var/lib/proxysql
proxysql   6877      1  0 17:19 ?        00:00:00 /usr/bin/proxysql2 -c /etc/proxysql2.cnf -D /var/lib/proxysql2
proxysql   6878   6877  0 17:19 ?        00:00:00 /usr/bin/proxysql2 -c /etc/proxysql2.cnf -D /var/lib/proxysql2

查看端口信息:

root@dbproxy2:/var/lib# netstat -nltp
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:6032          0.0.0.0:*               LISTEN      5325/proxysql   
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      5325/proxysql   
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      5325/proxysql   
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      5325/proxysql   
tcp        0      0 0.0.0.0:6033            0.0.0.0:*               LISTEN      5325/proxysql   
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1773/sshd       
tcp        0      0 127.0.0.1:7032          0.0.0.0:*               LISTEN      6878/proxysql2   
tcp        0      0 0.0.0.0:7033            0.0.0.0:*               LISTEN      6878/proxysql2   
tcp        0      0 0.0.0.0:7033            0.0.0.0:*               LISTEN      6878/proxysql2   
tcp        0      0 0.0.0.0:7033            0.0.0.0:*               LISTEN      6878/proxysql2   
tcp        0      0 0.0.0.0:7033            0.0.0.0:*               LISTEN      6878/proxysql2   
tcp6       0      0 :::22                   :::*                    LISTEN      1773/sshd       

8:完成

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 stop
Shutting down ProxySQL2: DONE!
root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE!
root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 status
ProxySQL2 is running (9164).
root@dbproxy2:/var/lib/proxysql2# mysql -uadmin -padmin -h127.0.0.1 -P7032
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2009-2017 Percona LLC and/or its affiliates
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

admin@127.0.0.1 : (none) 05:50:40>select * from mysql_servers;
Empty set (0.00 sec)

admin@127.0.0.1 : (none) 05:50:42>

到此,多實例已經建立成功,接着說明下如何對持久化的配置進行備份。

持久化配置備份

上面已經提到,ProxySQL的持久化是通過SQLITE實現的,對於備份就是對SQLITE的備份,關於如何使用SQLITE可以查看官方文檔SQLite教程。這里大致的說明下sqlite以 SQL 文本格式轉儲數據。

1:先到指定的數據db目錄

root@dbproxy:/var/lib/proxysql# ls -lh
-rw------- 1 proxysql proxysql  33K May 31 17:44 proxysql.db
-rw------- 1 proxysql proxysql 142K May 31 17:44 proxysql.log
-rw-r--r-- 1 proxysql proxysql    5 May 31 17:44 proxysql.pid

2:備份,執行.dump

root@dbproxy:/var/lib/proxysql# sqlite3 proxysql.db .dump > /home/dxy/proxysql.sql 

3,還原,若還原到另一個ProxySQL(上面安裝的實例proxysql2)中,先保證目標proxysql.db文件不存在(需要關閉ProxySQL,刪除數據目錄里的所有文件)再執行:

root@dbproxy:~# /etc/init.d/proxysql2 stop
Shutting down ProxySQL2: DONE!

root@dbproxy:/var/lib/proxysql2# ls -lh
total 0

在目標實例目錄中執行:

root@dbproxy:/var/lib/proxysql2# sqlite3 proxysql.db < /home/dxy/proxysql.sql 
root@dbproxy:/var/lib/proxysql2# ls -lh
total 32K
-rw-r--r-- 1 root root 32K May 31 18:17 proxysql.db

開啟實例:

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL: DONE!
root@dbproxy:/var/lib/proxysql2# ls -lh
total 60K
-rw-r--r-- 1 root     root     32K May 31 18:17 proxysql.db
-rw------- 1 proxysql proxysql 21K May 31 18:20 proxysql.log
-rw-r--r-- 1 proxysql proxysql   5 May 31 18:20 proxysql.pid

#修改權限
root@dbproxy:/var/lib/proxysql2# chown -R proxysql.proxysql proxysql.db

說明:如果備份的實例和還原的實例使用的端口全部一致,則直接開啟ProxySQL就可以用了。但本文的測試備份的實例的端口是6032和6033,還原的目標實例端口是7032和7033,即使還原了也不能使用,所以需要修改db文件,用sqlite連接修改:

#連接
root@dbproxy:/var/lib/proxysql2# sqlite3 proxysql.db 

#修改顯示
sqlite> .header on
sqlite> .mode column

#查看需要更新的變量
sqlite> select * from global_variables;
...
admin-mysql_ifaces   127.0.0.1:6032
...
mysql-interfaces     0.0.0.0:6033;/

#更新
sqlite> update global_variables set variable_value='127.0.0.1:7032' where variable_name = 'admin-mysql_ifaces';
sqlite> update global_variables set variable_value='0.0.0.0:7033;/' where variable_name = 'mysql-interfaces';

上面操作完成之后,再開啟ProxySQL驗證:

root@dbproxy:/var/lib/proxysql2# /etc/init.d/proxysql2 start
Starting ProxySQL2: DONE!

oot@dbproxy2:/var/lib/proxysql2# mysql -uadmin -padmin -h127.0.0.1 -P7032
Warning: Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.30 (ProxySQL Admin Module)

Copyright (c) 2009-2017 Percona LLC and/or its affiliates
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

admin@127.0.0.1 : (none) 06:40:08>select * from mysql_users;
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| username  | password                                  | active | use_ssl | default_hostgroup | default_schema | schema_locked | transaction_persistent | fast_forward | backend | frontend | max_connections |
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
| abc  | *1AF30A6370D8959926FC3BD6158C9C551D0DBA28 | 1      | 0       | 0                 |                | 0             | 1                      | 0            | 1       | 1        | 10000           |
| bcd | *F8258EA2FA1D7FE2B55DA522BFCC87B93CC63ADF | 1      | 0       | 0                 |                | 0             | 1                      | 0            | 1       | 1        | 10000           |
+-----------+-------------------------------------------+--------+---------+-------------------+----------------+---------------+------------------------+--------------+---------+----------+-----------------+
2 rows in set (0.00 sec)

admin@127.0.0.1 : (none) 06:40:11>select * from mysql_servers;
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
| hostgroup_id | hostname       | port | status | weight | compression | max_connections | max_replication_lag | use_ssl | max_latency_ms | comment   |
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
| 100          | 192.168.20.123 | 3306 | ONLINE | 1      | 0           | 1000            | 10                  | 0       | 0              | ReadWrite |
| 1000         | 192.168.20.12 | 3306 | ONLINE | 9      | 0           | 1000            | 10                  | 0       | 0              | ReadOnly  |
| 1000         | 192.168.20.123 | 3306 | ONLINE | 1      | 0           | 1000            | 10                  | 0       | 0              | ReadWrite |
+--------------+----------------+------+--------+--------+-------------+-----------------+---------------------+---------+----------------+-----------+
3 rows in set (0.00 sec)

從上面的結果看到,持久化備份和還原成功。注意:因為sqlite不支持遠程備份,需要在本地備份好之后,再傳到備份中心進行保存。

總結:

到此,關於ProxySQL的介紹告已段落,ProxySQL作者的更新還是比較勤快的,若后續有新功能和特性等,再進行補充說明,關於ProxySQL的文檔請見:https://github.com/sysown/ProxySQL

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM