Приветствую.На свежеустановленном Mysql при попытке соединения к базе из своего приложения (которое ранее успешно работало с mysql-4.x) (grant privileges дадены) такая ошибка:
mysql_real_connect(): Client does not support authentication protocol requested by server; consider upgrading MySQL client
Из приложения вызывается функция mysql_real_connect(), в параметрах которй пользовательский ID, пароль, имя базы.
Возможно, что-то нужно подкрутить в настройках mysql?
Заранее благодарю!
Пересобрать библиотечку надо которой пользуется твой клиент. Ибо автоматом подмены не будет номера версий совсем не те.
Если эту сторону вопроса проверил. Ну тогда давай доп. инфу.
>Пересобрать библиотечку надо которой пользуется твой клиент. Ибо автоматом подмены не будет
>номера версий совсем не те.
>Если эту сторону вопроса проверил. Ну тогда давай доп. инфу.
я предполагал, что должна быть совместимость библиотек?
Проверю, спасибо за совет.
сервер и клиент должны быть одной версии.
у Вас видимо mysql-server 5.1
а mysql-client 4
переставте клиента и все
>сервер и клиент должны быть одной версии.
>у Вас видимо mysql-server 5.1
>а mysql-client 4
>переставте клиента и все
с нумерацией все в порядке - и клиент и сервер одной версии.
http://dev.mysql.com/doc/refman/5.0/en/mysql-real-connect.html
обратите внимание на опцию "--old-protocol" демона mysqld возможно она Вам поможет.
Приветствую.Больше спасибо за ответы, в результате исследований выяснил, что проблема скорее всего не в MySQL, а где-то в недрах языка С :)
#define MSGLEN 32
#define BUFFLEN 1024int db_init(MYSQL *Conn)
{
MYSQL *c;c = malloc(sizeof(MYSQL));
if ( c == NULL )
return 0;memcpy(c, Conn, sizeof(MYSQL));
/* initialize the connection object here */
if ( mysql_init(Conn) == NULL ) {
free(c);
return FAIL;
}
/* connect main database here */
if( !mysql_real_connect(Conn, c->host, c->user, c->passwd, c->db, 0, NULL, 0) ) {
free(c);
return DB_DOWN;
}/* select database */
if( mysql_select_db(Conn, c->db) ) {
free(c);
return FAIL;
}
free(c);
return SUCCESS;
}typedef struct msg_s {
unsigned char msg_flag;
unsigned char msg_type;
unsigned char msg_rc; /* reply code */
char msg_id[MSGLEN];
char msg_passwd[MSGLEN];
char msg_fqdn[MSGLEN];
char msg_ipaddr[MSGLEN];
char msg_serialno[MSGLEN];
} msg_t;msg_t *msg, *msg2;
MYSQL conn;
...
msg = malloc( sizeof(msg_t) );
msg2 = malloc( sizeof(msg_t) );
if ( !msg || !msg2 ) {
/* error message */
exit(EXIT_FAILURE);
}/* здесь вызывается функция, получающая из сети сообщение содержащее данные типа структуры msg_t. Данные приходят верные, проверено */
/* сохраним копию буфера */
memcpy(msg2, msg, sizeof(msg_t));/* готовимся к инициализации MySQL */
conn.host = "192.168.11.22";
conn.user = "user";
conn.passwd = "pass";
conn.db = "userdb";if ( db_init(&conn) != SUCCESS ) {
/* error message */
...
}И вот уже здесь, на этом этапе, независимо от успеха-удачи функции db_init() указатель msg и msg2 указывают на адрес 0x00! Дальнейшая работа с этим указателем приводит к segmentation fault.
Почему так происходит, может ли кто подсказать по имеющейся информации?
Заранее благодарю.
>Заранее благодарю!Браза, ну есть же гугель и mysql.com в конце-концов...
http://dev.mysql.com/doc/refman/5.0/en/old-client.html
>>Заранее благодарю!
>
>Браза, ну есть же гугель и mysql.com в конце-концов...
>http://dev.mysql.com/doc/refman/5.0/en/old-client.html
Разобрался, проблема решена.
Спасибо за участие ;)