Администрирование пакета MySQL
Протокол клиент/сервер
На всякий случай приведу подробное описание протокола "клиент-сервер", используемого пакетом MySQL для связи между клиентом и сервером базы данных.
Обозначения
< = клиент
> = сервер
[] 1 байт
[2: ] 2 байта (нижний байт первый)
[3: ] 3 байта (нижний байт первый)
[4: ] 4 байта (нижний байт первый)
[string: ] строка, кончающаяся нулем.
[length: ] длина целого числа. Проверьте Net_store_length()
для этого! Идея в том, чтобы наиболее часто получать
данные длиной в 1 байт, но допускать и более длинные
данные (и NULL).
Детальное описание
Каждый передаваемый пакет имеет следующий префикс:
[3: длина пакета] [номер пакета] данные
При приеме пакета добавляется [0] после каждого принятого пакета, чтобы получить простую обработку строк ошибки.
Номера пакетов начинаются с 0 и увеличиваются для каждого посланного/полученного пакета.
Типы пакетов
:connect
> [protocol version] [string: password crypt seed]
< [2: 0] [3: max_allowed_client_packet_length] [string: user name]
[string: scrambled password]
> ok packet
Посмотрите в файле password.c из исходников MySQL какой метод используется для шифрования паролей. Пароль должен быть пустым, если пользователь не имеет никакого пароля.
:ok
[0] [length: affected_rows] [length: unique id]
:error
Может приходить в любое время.
> [255] [string: error message]
:command
< [command number]
enum enum_server_command{SLEEP,QUIT,INIT_DB,QUERY,FIELD_LIST,
CREATE_DB,DROP_DB,RELOAD,SHUTDOWN,STATISTICS, PROCESS_INFO,CONNECT}
:query
< [QUERY command] [string: query string] (The end null is not sent)
> [0] [length: affected rows] [length: insert id] (Insert, delete...)
или:
> [length: column_count] (a query result)
> column field data packets
> row data packets
:data
: Данные передаются пока не придет пакет, который состоит только из одиночного символа [254]. Остерегайтесь: могут иметься пакеты, которые начинаются с символа 254! Каждый пакет типа 'data' имеет поле 'column count'.
Формат каждого поля:
[:length] == NULL_LENGTH -> NULL field
или:
[:length] [length data] (Строка не оканчивается на \0!)
Пакет данных столбца состоит из 5 столбцов со следующими данными:
[:string table name]
[:string column name]
[:3 create length of column (may be larger in a few cases)]
[:1 type (as of enum_field_types)]
[:1 flag] [:1 decimals] (2 байта!)
При использовании команды list_fields имеется шестой столбец:
[:string default]
Посмотрите в файлах libmysql.c, net.c и password.c более подробную информацию о форматах пакетов.
Назад | Вперед
Содержание (общее) | Содержание раздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|