Club MySQL #2
2017/11/28
とみたまさひろ
MySQLのXじゃない方のプロトコル
sequenceDiagram
Client -->> Server: Connection
Server ->> Client: Initial
Client ->> Server: Authentication
Server ->> Client: OK
sequenceDiagram
Client ->> Server: Query
Server ->> Client: Field Count
loop field count
Server ->> Client: Field Info
end
loop record count
Server ->> Client: Record Data
end
Server ->> Client: EOF
sequenceDiagram
Client ->> Server: Query
Server ->> Client: Status
クエリをパースするのはサーバー
クライアントはクエリが参照か更新かは知らない
サーバーから教えてもらう
LOAD DATA LOCAL INFILE
LOAD DATA LOCAL INFILE 'filename' INTO TABLE tblname;
クライアントのファイルをテーブルにロード
クエリをパースするのはサーバー
(2回目)
サーバーからファイル名を教えてもらう
LOAD DATA LOCAL INFILE
sequenceDiagram
Client ->> Server: Query
Server ->> Client: Filename
Client ->> Server: Contents
Client ->> Server: EOF
Server ->> Client: Status
クライアントの指定とは異なるファイル名が
サーバーから返されてもそれを送る
デモ: Proxy でファイル名を差し替える
sequenceDiagram
Client ->> Proxy: Query
Proxy ->> Server: Query
Server ->> Proxy: Filename(hoge)
Proxy ->> Client: Filename(fuga)
Client ->> Proxy: Contents
Proxy ->> Server: Contents
Client ->> Proxy: EOF
Proxy ->> Server: EOF
Server ->> Proxy: Status
Proxy ->> Client: Status
クエリをパースするのはサーバー
(3回目)
デモ: Proxy でLOAD DATA の振りをする
sequenceDiagram
Client ->> Proxy: Query
Proxy ->> Server: Query
Server ->> Proxy: Status
Proxy ->> Client: Filename
Client ->> Proxy: Contents
Client ->> Proxy: EOF
Proxy ->> Client: Status
信頼できないサーバーに繋がない
SSL接続
クライアント側で LOCAL INFILE を無効化
% mysql --local-infile=false