П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3500 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6103 раз(а).

Учебник HTML.
Просмотров 3265 раз(а).

Руководство по PHP5.
Просмотров 5486 раз(а).

Хостинг через призму DNS.
Просмотров 4125 раз(а).

Подборка текстов стандартных документов.
Просмотров 55763 раз(а).

Учебник PHP - Самоучитель
Просмотров 3078 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5474 раз(а).

Внешние атаки...
Просмотров 3824 раз(а).

Учебник PHP.
Просмотров 2819 раз(а).

SSI в примерах.
Просмотров 37454 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





Администрирование пакета 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 более подробную информацию о форматах пакетов.

Назад | Вперед
Содержание (общее) | Содержание раздела



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
 





Copyright © 2005-2016 Project.Net.Ru