ProxySQL構築

#注意点
導入の注意点は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
```