#注意点
導入の注意点は3つ。
・mysql>とあっても経過監視、設定格納のために使うSQLiteと
プロクシ先のMySQLサーバ接続は違うもの
・コンフィグはファイルに設定して再起動しても有効にならない
詳しくはmixiの方の記事を参考
http://qiita.com/yoan/items/ba62dd65b24ac1b6a458
#インストール(ubuntu16.04)
cd /tmp
wget https://github.com/sysown/proxysql/releases/download/v1.3.3/proxysql_1.3.3-ubuntu16_amd64.deb
sudo dpkg -i proxysql_1.3.3-ubuntu16_amd64.deb
#テスト起動
sudo /etc/init.d/proxysql start
#動作確認
ps -ef | grep [p]roxysql
#設定ファイル編集
サンプルが大変優秀なのと設定する設定のWikiを読めば大体わかります。
ルールのWikiならここ
https://github.com/sysown/proxysql/wiki/MySQL-Query-Rules
sudo vi /etc/proxysql.cnf
#SQLiteへの接続情報です
admin_credentials="admin:admin"
mysql_ifaces="127.0.0.1:6032;/tmp/proxysql_admin.sock"
#スレッド数です
threads=2
#PROXYの待受ポートです
interfaces="0.0.0.0:6033;/tmp/proxysql.sock"
#接続先の情報です。
#proxysqlはホストグループ単位(番号)で振り分け設定がされるので設定する必要があります。
#デフォルトでは0に転送されます。
mysql_servers =
(
{ address="127.0.0.1" , port=13306 , hostgroup=0, max_connections=1000 },
{ address="127.0.0.1" , port=23306 , hostgroup=1, max_connections=1000 }
)
#接続ユーザの情報です。MySQLへPROXY経由で接続する全ユーザを書く必要があるようです。
#また、パスワードが現パージョンでは暗号化されません。
#認証課金は直接HAPROXYを参照するようにしましょう。
#information_schemaが見られる権限ない場合schemaを指定する必要があります。
mysql_users:
(
{ username = "zabbix" , password = "xxxx" , default_hostgroup = 0 , active = 1 , default_schema = "zabbix" }
)
#振り分けルールです。rule_id順に評価されます。
mysql_query_rules:
(
#negate_match_patternで否定、SELECT以外をホストグループ0へ
{
rule_id=1
active=1
match_pattern="^SELECT"
destination_hostgroup=0
negate_match_pattern=1
apply=1
},
#ZabbixはセッションをDBで保持しているので悩ましいがホストグループ0を参照
{
rule_id=9
active=1
match_pattern=".*sessions.*"
destination_hostgroup=0
apply=1
},
#zabbixユーザからのアクセスはホストグループ1へ
{
rule_id=10
active=1
username="zabbix"
match_pattern="^SELECT"
destination_hostgroup=1
apply=1
},
#SELECTから始まるものはホストグループ0へ
{
rule_id=20
active=1
match_pattern="^SELECT"
destination_hostgroup=0
apply=1
}
)
#ProxySQL設定反映
SQLiteファイルを削除して設定ファイルから反映するのが楽です。
設定格納ファイル削除
sudo rm -rf /var/lib/proxysql/proxysql.db
proxysql再起動
sudo /etc/init.d/proxysql restart
#ProxySQL操作(SQLite)
SQLiteに接続
mysql -u admin -padmin -h 127.0.0.1 -P6032
テーブル一覧
mysql> show tables;
実際に設定されているユーザ
mysql> select * from runtime_mysql_users;
実際に設定されているサーバ
mysql> select * from runtime_mysql_servers;
実際に設定されているルール
mysql> select * from runtime_mysql_query_rules;
クエリがルールに適応されているか
mysql> select active,hits, mysql_query_rules.rule_id, match_digest, match_pattern, replace_pattern, cache_ttl, apply,flagIn,flagOUT FROM mysql_query_rules NATURAL JOIN stats.stats_mysql_query_rules ORDER BY mysql_query_rules.rule_id;
サーバが接続されているか
mysql> SELECT * FROM monitor.mysql_server_connect_log ORDER BY time_start DESC LIMIT 6;
サーバが生きているか
mysql> SELECT * FROM monitor.mysql_server_ping_log ORDER BY time_start DESC LIMIT 6;
#MySQLサーバー接続
-hlocalhostではsocketに接続しにいくので使わないこと
#デフォルトであれば
mysql -uzabbix -h127.0.0.1 -P6033 -p