C ++プログラムを使用してデータベースに接続しようとしています。使っていますmysqlcppコネクタプログラムは自分のローカルコンピュータで実行されますが、SSHログイン後にリモートUbuntuサーバーで実行しようとすると、次のメッセージが表示されますtcp://localhost:3306
。tcp://127.0.0.1:3306
terminate called after throwing an instance of 'sql::SQLException'
what(): Unknown MySQL server host 'tcp' (2)
私はデフォルトのポート3306からlocalhostに接続しようとしました。mysql -u root -p
そのように入力してログインして手動で接続することもできます。
を使用してデータベースにログインした後にmysql -u root -p
入力でき、設定は「オフ」とshow variables;
表示されます。skip-networking
MySQLはネットワーク上でリッスンしています。
netstat -a | grep mysql
tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 20025 /var/run/mysqld/mysqld.sock
変更するのを忘れた設定はありますか? 「(2)」とはどういう意味ですか?
答え1
ご提案ありがとうございます。 C ++コードを変更せずにmysqlcppconnectorを再インストールして問題を解決しました。私はこれがビルドに関連していると疑い始め、これを尋ねました。ここ。
2 つのインストールの違いに関する注意事項: 1.1.12 を使用する代わりに、最新バージョンに再インストールし、ファイルを手動でコピーしてインストールしませんでした。
sudo apt-get install libmysqlcppconn-dev
偶然かどうかはわかりませんが、ダウンロードページで「以前のGAバージョンをお探しですか?」をクリックすると、バージョン1.1.12にリダイレクトされず、代わりに1.1.13にリダイレクトされることも確認しました。
その後、プログラムが実行されます。まあ、エラーは発生しましたが、他のエラーが発生しました。この問題に対する修正は非常に簡単でした。それだけの価値があるだけに、
Access Denied for User 'root'@'localhost'
入力して権限を確認したSELECT user,authentication_string,plugin,host FROM mysql.user;
ところ、localhostにmysql_native_password権限(auth_socketのみ)がないことがわかり、次のように変更しました。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret_password_here';
これが他の誰かに役立つことを願っています。これは奇妙なことです。皆様のご協力に感謝します。