MySQLデータベースをローカルマシンに接続するためにMySQL C++コネクタを使用しようとしています。mysql C++コネクタの例外:ユーザー 'root' @ 'localhost'(パスワードはNOを使用)のアクセスが拒否されました。&& MySQLサーバーが終了しました
MySQL C++コネクタ7.1.1.9をインストールしてブーストしました。 C++ IDEで。ヘッダパスとコネクタライブラリファイルlibmysqlcppconn-static.a
をプロジェクトに追加しました。プロジェクトはうまくコンパイルされます。
しかし、私はローカルデータベースに接続するだけの例を実行しようとします。
try{
sql::mysql::MySQL_Driver *driver;
sql::Connection *con;
driver = sql::mysql::get_mysql_driver_instance();
// I tried the user root here, but got same exception
//con = driver->connect("tcp://127.0.0.1:3306", "root", "password");
con = driver->connect("tcp://127.0.0.1:3306", "user", "password");
delete con;
}
catch(sql::SQLException &e)
{
// Edit1: fix code based on Macxx's comments
// a access denied exception is thrown from here.
std::cerr << e.what() << '\n';
}
mySQL exceptions: Access denied for user 'root'@'localhost' (using password: NO)
例外がスローされます。私はMySQLがターミナルにアクセスして正しくインストールされていることを確認しました:
$ mysql -u root -p
Enter password: // <---entered "password" here, so I am sure the password is correct
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
これは、コネクタが2番目のパラメータを無視しているようです。私は構造体ConnectOptionsMap
を使って[password]を "password"に設定しようとしました。まだ正しく動作していません。
例外を修正するための提案はありますか?
接続が許可された後、約少し何か:私はOracleのMySQLの公式サイトからダウンロードしたバイナリライブラリ(libmysqlcppconn.so/libmysqlcppconn-static.a)を使用して、非常に困難な時間を過ごしました。 実行すると
con->setSchema("AN_EXISTING_DB")
アプリで例外が発生します:MySQL server has gone away
;
私が使用している場合:
sql::Statement *st = con->createStatement();
st->execute("use AN_EXISTING_DB");`
悪い配分によるアプリがクラッシュします。
結局、この問題はapt-get(sqlcppconnの初期バージョン)のパッケージを使用して解決しました。
sudo apt-get install libmysqlcppconn-dev
次に、/usr/lib/libmysqlcppconn.so
と/usr/lib/x86_64-linux-gnu/libmysqlclient.so
にライブラリをリンクするためにプロジェクトファイルを変更しました。
[環境]
のUbuntu 16.04.2
のMySQL 5.7
のMySQLコネクタのバージョン:7.1.1.9
のMySQLコネクタのバージョン:7.1.1.7
ブースト1.58.0
G ++ 5.4.0
おかげ
栄
ご意見ありがとう、Kamal。私が 'ldd〜/ Qt/5.9/gcc_64/plugins/sqldrivers/libqsqlmysql.so'を実行すると、Qtの方法でデータベースにアクセスしないのです。私は 'libmysqlclient.so.18 => not found'を見つけました。行方不明のライブラリを見つけたり、Qt mysqldriverを再構築する必要があります。それから、ドライバーを作るのにいくつかの問題がありました。それは別の話です。 – r0ng
あなたがubuntuを使っているなら、libmysqlclient-devパッケージをインストールすることができます。 libmysqlclient.so.xを入手する必要があります。 – Kamal
はい、そうです。しかしバージョンは異なっています。確かに、libmysqlclient.so.20です。一方、Qt 5.9.1にはlibmysqlclient.so.18が必要です。 – r0ng