Не удается подключиться к MemSQL через SQLApi ++

Я пытаюсь подключиться к MemSQL база данных из c++ код и я использую SQLApi++ библиотека. MySQL клиент совместим с MemSQL а также SQLApi++ имеет поддержку MySQL, Однако я не могу подключиться и получить другие ошибки.

Например, я звоню подключиться со следующими параметрами

Connect("tcp://localhost:3307", "root", "", SA_MySQL_Client)

и получить сообщение об ошибке Access denied for user 'root'@'localhost' (using password: NO),

Я искал в Интернете и пробовал несколько версий указания имени хоста БД, однако ни одна из них не сработала. Что я делаю неправильно? Какая версия правильная? Есть идеи?

ПРИМЕЧАНИЕ: я могу успешно подключиться к MemSQL с командной строкой, просто выполнив
memsql -P 3307,

0

Решение

MySQL установлен на той же машине, что и MemSQL? localhost может перенаправить на MySQL в некоторых клиентах, но 127.0.0.1 не будет (см. https://docs.memsql.com/v5.7/docs/how-to-connect-to-memsql)

Работает ли Connect («tcp: //127.0.0.1: 3307», «root», «», «SA_MySQL_Client»)?

0

Другие решения

Когда я предоставил локальный IP-адрес и порт, по какой-то причине SQLApi++ игнорировал его и всегда пытался подключиться к MySQLсокет в пути по умолчанию (т.е. /var/lib/mysql/mysql.sock).

Однако после прочтения документация еще раз выяснилось, что в качестве имени хоста можно передать путь сокета. Итак, я прошел MemSQLПуть к сокету и все заработало!

0

Я столкнулся с той же проблемой, и Наброян уже упомянул одно решение. Просто предоставив некоторые детали и добавив еще одно возможное решение.

Похоже, когда SQLAPI выясняет, что сервер работает на локальном хосте, он переходит непосредственно к файлу сокета и, к сожалению, всегда идет к файлу сокета MySQL, т.е. /var/lib/mysql/mysql.sock

Теперь здесь может быть два возможных решения:

1- Обновите ваш экземпляр MemSQL, чтобы использовать тот же файл сокета, что и в MySQL (это может быть только выбор, если вы не используете MySQL на том же компьютере)

(сам не тестировал, поэтому, может быть, пропустил некоторые шаги здесь) Вы можете сделать это, обновив значение «socket» в файле memsql.cnf, так что оно должно выглядеть так:

socket = /var/lib/mysql/mysql.sock

Вы можете найти местоположение файла memsql.cnf, используя команду, которая используется для определения местоположения файла сокета, файл memsql.cnf будет находиться в том же каталоге:

memsql -u root --password=YOUR_PASSWORD_HERE -P 3306 -e "show variables like 'socket'"

После этого вы должны перезапустить memsql:

memsql-ops memsql-restart

2- ИЛИ Измените строку подключения, указав путь к сокету MemSQL.

Вы можете найти файл сокета memsql, используя команду, указанную в первой опции.

В моем случае файл был: /app/memsql/master-3306-NJG846fb0e/data/memsql.sock
поэтому я изменил свой вызов подключения, чтобы использовать этот файл:

Connect("/app/memsql/master-3306-NJG846fb0e/data/memsql.sock@", "myuser", "mypassword", SA_MySQL_Client);
0
По вопросам рекламы [email protected]