-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprotocol.toc
68 lines (68 loc) · 5.74 KB
/
protocol.toc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
\contentsline {section}{\numberline {1}概述}{3}{section.1}
\contentsline {subsection}{\numberline {1.1}基础类型}{3}{subsection.1.1}
\contentsline {subsubsection}{\numberline {1.1.1}整数类型}{3}{subsubsection.1.1.1}
\contentsline {paragraph}{\numberline {1.1.1.1}定长整数}{3}{paragraph.1.1.1.1}
\contentsline {paragraph}{\numberline {1.1.1.2}变长整数}{4}{paragraph.1.1.1.2}
\contentsline {subsubsection}{\numberline {1.1.2}String类型}{4}{subsubsection.1.1.2}
\contentsline {subsection}{\numberline {1.2}MySQL包}{4}{subsection.1.2}
\contentsline {subsubsection}{\numberline {1.2.1}大于16MB的包}{5}{subsubsection.1.2.1}
\contentsline {subsubsection}{\numberline {1.2.2}序列号}{5}{subsubsection.1.2.2}
\contentsline {subsection}{\numberline {1.3}通用响应包}{5}{subsection.1.3}
\contentsline {subsubsection}{\numberline {1.3.1}OR\_Packet}{5}{subsubsection.1.3.1}
\contentsline {subsubsection}{\numberline {1.3.2}ERR\_Packet}{6}{subsubsection.1.3.2}
\contentsline {subsubsection}{\numberline {1.3.3}EOF\_Packet}{6}{subsubsection.1.3.3}
\contentsline {subsubsection}{\numberline {1.3.4}状态信息}{6}{subsubsection.1.3.4}
\contentsline {subsection}{\numberline {1.4}连接的生命周期}{7}{subsection.1.4}
\contentsline {section}{\numberline {2}连接建立}{8}{section.2}
\contentsline {subsection}{\numberline {2.1}握手}{9}{subsection.2.1}
\contentsline {subsubsection}{\numberline {2.1.1}普通握手方式}{9}{subsubsection.2.1.1}
\contentsline {subsubsection}{\numberline {2.1.2}SSL握手方式}{10}{subsubsection.2.1.2}
\contentsline {subsubsection}{\numberline {2.1.3}能力交换}{10}{subsubsection.2.1.3}
\contentsline {subsubsection}{\numberline {2.1.4}选择认证方法}{10}{subsubsection.2.1.4}
\contentsline {subsection}{\numberline {2.2}快速认证}{11}{subsection.2.2}
\contentsline {subsection}{\numberline {2.3}认证方法不一致}{11}{subsection.2.3}
\contentsline {subsubsection}{\numberline {2.3.1}更换认证方法}{12}{subsubsection.2.3.1}
\contentsline {subsubsection}{\numberline {2.3.2}客户端能力缺失}{12}{subsubsection.2.3.2}
\contentsline {subsubsection}{\numberline {2.3.3}客户端不支持新认证方法}{13}{subsubsection.2.3.3}
\contentsline {subsubsection}{\numberline {2.3.4}不支持插件式认证方法的客户端}{13}{subsubsection.2.3.4}
\contentsline {subsection}{\numberline {2.4}连接阶段消息包结构}{13}{subsection.2.4}
\contentsline {subsubsection}{\numberline {2.4.1}Protocol::Handshake}{13}{subsubsection.2.4.1}
\contentsline {subsubsection}{\numberline {2.4.2}Protocol::HandshakeResponse}{15}{subsubsection.2.4.2}
\contentsline {section}{\numberline {3}文本协议}{16}{section.3}
\contentsline {subsection}{\numberline {3.1}COM\_QUERY}{16}{subsection.3.1}
\contentsline {subsection}{\numberline {3.2}COM\_QUERY\_RESPONSE}{17}{subsection.3.2}
\contentsline {subsubsection}{\numberline {3.2.1}列定义}{18}{subsubsection.3.2.1}
\contentsline {subsubsection}{\numberline {3.2.2}行数据}{19}{subsubsection.3.2.2}
\contentsline {section}{\numberline {4}Binlog}{20}{section.4}
\contentsline {subsection}{\numberline {4.1}什么是Binlog}{20}{subsection.4.1}
\contentsline {subsubsection}{\numberline {4.1.1}Binlog格式}{21}{subsubsection.4.1.1}
\contentsline {paragraph}{\numberline {4.1.1.1}基于语句的Binlog}{21}{paragraph.4.1.1.1}
\contentsline {paragraph}{\numberline {4.1.1.2}基于行的Binlog}{22}{paragraph.4.1.1.2}
\contentsline {paragraph}{\numberline {4.1.1.3}混合模式的binlog}{22}{paragraph.4.1.1.3}
\contentsline {subsubsection}{\numberline {4.1.2}启用Binlog}{22}{subsubsection.4.1.2}
\contentsline {subsubsection}{\numberline {4.1.3}Binlog结构与内容小结}{24}{subsubsection.4.1.3}
\contentsline {subsection}{\numberline {4.2}Binlog事件}{24}{subsection.4.2}
\contentsline {subsubsection}{\numberline {4.2.1}事件定义}{24}{subsubsection.4.2.1}
\contentsline {subsubsection}{\numberline {4.2.2}事件描述}{26}{subsubsection.4.2.2}
\contentsline {subsubsection}{\numberline {4.2.3}事件结构}{27}{subsubsection.4.2.3}
\contentsline {subsubsection}{\numberline {4.2.4}FORMAT\_DESCRIPTION\_EVENT}{27}{subsubsection.4.2.4}
\contentsline {subsubsection}{\numberline {4.2.5}ROTATE\_EVENT}{28}{subsubsection.4.2.5}
\contentsline {subsubsection}{\numberline {4.2.6}TABLE\_MAP\_EVENT}{28}{subsubsection.4.2.6}
\contentsline {subsubsection}{\numberline {4.2.7}ROWS\_EVENT}{29}{subsubsection.4.2.7}
\contentsline {subsection}{\numberline {4.3}监听流程}{30}{subsection.4.3}
\contentsline {section}{\numberline {5}代码实现(基于Golang)}{32}{section.5}
\contentsline {subsection}{\numberline {5.1}模块布局}{32}{subsection.5.1}
\contentsline {subsection}{\numberline {5.2}上下文管理}{33}{subsection.5.2}
\contentsline {subsection}{\numberline {5.3}Packet读写}{34}{subsection.5.3}
\contentsline {subsubsection}{\numberline {5.3.1}pktReader}{35}{subsubsection.5.3.1}
\contentsline {subsubsection}{\numberline {5.3.2}pktWriter}{36}{subsubsection.5.3.2}
\contentsline {subsection}{\numberline {5.4}编解码}{38}{subsection.5.4}
\contentsline {subsection}{\numberline {5.5}数据库连接}{39}{subsection.5.5}
\contentsline {subsubsection}{\numberline {5.5.1}握手阶段}{40}{subsubsection.5.5.1}
\contentsline {subsubsection}{\numberline {5.5.2}认证阶段}{40}{subsubsection.5.5.2}
\contentsline {subsection}{\numberline {5.6}Binlog事件监听}{43}{subsection.5.6}
\contentsline {subsubsection}{\numberline {5.6.1}事件头解析}{43}{subsubsection.5.6.1}
\contentsline {subsubsection}{\numberline {5.6.2}FORMAT\_DESCRIPTION\_EVENT}{43}{subsubsection.5.6.2}
\contentsline {subsubsection}{\numberline {5.6.3}QUERY\_EVENT}{44}{subsubsection.5.6.3}
\contentsline {subsubsection}{\numberline {5.6.4}TABLE\_MAP\_EVENT}{45}{subsubsection.5.6.4}
\contentsline {subsubsection}{\numberline {5.6.5}ROWS\_EVENT}{46}{subsubsection.5.6.5}