2014年12月2日火曜日

MySQL Fabricつらい(FabricサーバーがMySQLプロトコルのポートでしゃべってる内容を見てみる)

tcpdump&Wiresharkでさくっと。
お手製MySQL Fabric対応mysqlコマンドラインクライアント からMySQL FabricのMySQLプロトコルをしゃべる口に接続して、ちょこちょことステートメントを叩いてみる。


$ client/mysql -P 32275 -uadmin -pxxxx --protocol=tcp -h 127.0.0.1 --fabric-group=my_second_fabric --fabric-real-user=msandbox --fabric-real-password=msandbox
mysql> \F
Current FABRIC_OPT_DEFAULT_MODE is ro

mysql> show tables;
ERROR 1046 (3D000): No database selected

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
| tpcc               |
+--------------------+
5 rows in set (0.07 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14725 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14722 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14725 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14724 |
+--------+
1 row in set (0.00 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14723 |
+--------+
1 row in set (0.02 sec)

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14724 |
+--------+
1 row in set (0.00 sec)

mysql> \F rw
FABRIC_OPT_DEFAULT_MODE sets to rw

mysql> create database if not exists d1;
Query OK, 1 row affected (0.01 sec)

こんなのをキャプチャしてみた結果が、コレ(クライアントとFabricの32275ポートをMySQLプロトコルとしてデコードさせてフィルターした)



ものの見事にログイン(グリーティング, 認証, 認証応答)とストアドプロシージャ(dump.fubric_nodes, group.lookup_groups, dump.servers) しか叩いてない。その後はRequist QUITまで沈黙。

ということは一度結果さえキャッシュしてしまえば、


$ mysqlfabric manage stop
Password for admin:
Fabric UUID:  5ca1ab1e-a007-feed-f00d-cab3fe13249e
Time-To-Live: 1

Success (empty result set)


$ mysqlfabric group lookup_servers my_second_fabric
Password for admin:
[Errno 111] Connection refused

mysql> \F
Current FABRIC_OPT_DEFAULT_MODE is ro

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14724 |
+--------+
1 row in set (0.03 sec)

mysql> \F rw
FABRIC_OPT_DEFAULT_MODE sets to rw

mysql> SELECT @@port;
+--------+
| @@port |
+--------+
|  14723 |
+--------+
1 row in set (0.01 sec)

mysql> create table d1.t1 (num int, val varchar(32));
Query OK, 0 rows affected (0.19 sec)

$ client/mysql -P 32275 -uadmin -pxxxx --protocol=tcp -h 127.0.0.1 --fabric-group=my_second_fabric --fabric-real-user=msandbox --fabric-real-password=msandbox d1
mysql: [Warning] Using a password on the command line interface can be insecure.
Using Fabric for MYSQL connection
ERROR 2064 (HY000): Fabric error: Error connecting to Fabric host: Can't connect to MySQL server on '127.0.0.1' (111) (2003)

この通りクエリーは通る(もちろん、新しくコマンドラインクライアントを立ち上げようとしても32275が空いてないのでそれ以上の接続はできないけど)
TTLとかも関係してくる話なんだろうなぁ。。

余談だけど、このお手製クライアントからuse(つまり、mysql_select_db())を呼んでもことごとくエラーになることに気が付いた。MySQL Fabricの制約なのかConnector/Cがまだ対応してないのか、俺のパッチが何か考慮漏れてるのかはまだ不明。。


mysql> use d1
ERROR:

mysql>

取り敢えず、今日はこれまで。

0 件のコメント :

コメントを投稿