Linux システムでは、MySQL データベースが MySQL サーバーに接続できません。私が遭遇した落とし穴をまとめておきます。パートナー様がこの点に注意していただけることを願っています。
使用する仮想マシンとサービス、データベース クライアント リンク ツール
VM
港湾労働者
MySQL57
ナビキャット
上記の問題の一般的な理由は何ですか?
1. Linux のファイアウォールがオフになっていない
ファイアウォールコマンドをオフにする
systemctl stop firewall #一時的にファイアウォールを閉じる systemctl disable firewall # ファイアウォールを永続的にオフにする
2. リモート MySQL のポート番号が navicat のポート番号と一致しません。
次のコマンドを使用して MySQL にログインします。
docker exec -it mysql /bin/bash がコンテナに入る
MySQLにログインする
mysql -u ユーザー名 -p パスワード -P ポート番号 -h (IP アドレス)
データベースにログインした後、現在のデータベースのポート番号を表示します。
「port」のようなグローバル変数を表示します。
ポート番号が間違っている場合は、navicat でポート番号を変更してください。
3. サーバーのファイアウォールが開いていないため、接続が失敗する可能性があります。
ポート 3306 を許可するルールを送信します。
iptables -I INPUT -p top --aport 3306 -j ACCEPT
4. ポートは監視されていません
仮想マシンのネットワーク ポート情報を表示します。
# netstat -ntpl
ファイアウォールのステータスを確認したところ、ポート 3306 上のすべてのパケットが失われたことがわかりました。
# iptables -vnl
ファイアウォールルールをクリアする
# iptables -F
5. MySQL データベースの root 権限が不十分で、localhost リモート サービスが認識できない可能性があります。
方法 1: 直接認証 (推奨)
mysqlにログインする
次のコマンドを実行します
権限設定コマンド
mysql> *.* に対するすべての権限を '123456' で識別される 'root'@'%' に付与します。
从任何主机上使用root用户,密码:你的password(你的root密码)连接到mysql服务器:
# mysql -u root -proot
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION
方法 2: ローカルで mysql にログインし、「mysql」データベースの「user」テーブルの「host」項目を変更し、「localhost」を「%」に変更します。
#mysql -u root -proot
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
6. docker ps -a を使用して、MySQL のプロセスが正常に実行されているかどうかを確認します。
ここで再起動しました。再起動していない場合は、次のコマンドを入力してください...
docker start mysql或ID号 #开启mysql服务
docker start mysql或ID号 #关闭mysql服务
docker restart mysql或ID号 #重启mysql服务
docker ps -a を再度使用して、mysql が開始されているかどうかを確認します。
7. Windowsのネットワーク共有センターで仮想マシンがネットワークに正常に接続されているか確認し、ネットワークに接続されていない場合はネットワークを起動してください。
1) Windows 11 は仮想マシンのネットワーク アダプターをオンにします
上記の仮想マシンネットワークを有効にします
2) 仮想マシンのネットワーク状態も確認します。
これまでのところ
データベース mysql は正常に接続できます。上記は個人的に検証したものです。皆さんにインスピレーションをもたらすことができれば幸いです。たとえ関連する問題が解決しなくても、皆さんが迷子にならないように、また、皆さんにインスピレーションを与えることができます。