MySQL wire protocol

MySQL/MariaDB — бинарный TCP-протокол (порт 3306). Отличается от PostgreSQL: sequence-numbered пакеты, capability flags, поддержка COM_QUERY (текст) и COM_STMT_* (prepared).

Формат пакета

| 3 byte payload length (LE) | 1 byte sequence id | payload |
# пакеты > 16 МБ разбиваются, sequence++
# max_allowed_packet limit

Handshake

S → C: HandshakeV10 { version:"8.0.35", auth_plugin:"caching_sha2_password",
                     server_capabilities:..., salt:... }
C → S: HandshakeResponse41 { user, auth_response, database, client_capabilities }
S → C: OK / ERR / AuthSwitchRequest

Команды (COM_*)

CodeКомандаЧто
0x03COM_QUERYпростой SQL
0x16COM_STMT_PREPAREподготовить
0x17COM_STMT_EXECUTEвыполнить
0x19COM_STMT_CLOSEзакрыть
0x0eCOM_PINGping
0x01COM_QUITотсоединиться

Response types

Text vs Binary protocol

Аутентификация plugins

caching_sha2_password nuance

Первый логин требует TLS или RSA public key exchange. Кеш на сервере — последующие быстрее. Часто причина "не могу подключиться" из старых клиентов.

Compression

MySQL protocol может использовать zlib. Флаг CLIENT_COMPRESS. Каждый пакет заворачивается в compressed-frame.

Replication protocol

Slave шлёт COM_BINLOG_DUMP или COM_BINLOG_DUMP_GTID → мастер стримит binlog events. Основа репликации.

MySQL X Protocol

Отдельный порт 33060, protobuf-based. Для MySQL Document Store / X DevAPI. Практически не используется.

См. также

← на главную