Я пытаюсь подключиться к Azure MySQL 5.7 с помощью SSL, но у меня возникла ошибка, которую я не могу устранить.
Подключение работает нормально для
- mysql.exe
- MySQL Workbench 8.0
Соединение не работает для
- Qt
- MySQL Connector / C 8.0.18
Я вызываю mysql.exe с помощью следующей рабочей команды
mysql.exe -h server.mysql.database.azure.com -u user@server -p --ssl
Это подключается и не представляет никаких проблем. MySQL Workbench 8.0 тоже работает нормально.
Но затем использование подключаемого модуля Qt MySQL выдает эту ошибку.
SSL connection error: socket layer receive error
Это код Qt, который я используюподключиться
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("server.mysql.database.azure.com");
db.setPort(3306);
db.setDatabaseName("databasename");
db.setUserName("user@server");
db.setPassword("password");
db.setConnectOptions("SSL_CA=C:/Users/User/Downloads/BaltimoreCyberTrustRoot.crt.pem");
if (!db.open()) {
std::cout << db.lastError().text().toStdString() << "\n";
}
Далее я попытался использовать MySQL Connector / C (который Qt использует снизу) для прямого подключения к базе данных Azure.
MYSQL* mysql = mysql_init(nullptr);
char* t = "C:/Users/User/Downloads/BaltimoreCyberTrustRoot.crt.pem";
mysql_ssl_set(mysql, nullptr, nullptr, t, nullptr, nullptr);
if (!mysql_real_connect(mysql, "server.mysql.database.azure.com", "user@server", "password", "databasename", 3306, nullptr, 0)) {
fprintf(stderr, "Failed to connect to database: Error: %s\n", mysql_error(mysql));
}
mysql_close(mysql);
, которые оба вызывают ошибку уровня сокета,
Отключение SSL в Azure позволяет мне соединяться как с Qt, так и с MySQL Connector / C. Это означает, что данные соединения (имя пользователя, пароль, имя хоста) верны, но, возможно, существует проблема с настройкой параметров SSL.
Qt версия 5.13.1
MySQL Connector / C 8.0.18
MySQL DB 5.7