リモート仮想マシン(Windows Server 2008)の1つにMySQLサーバーがあります。昨日まで、ローカルマシンにインストールされたワークベンチの助けを借りて、MySQLサーバーに接続することができました。
昨日、仮想マシンがインストールされているマシンの再起動がありました。その後、MYSQLに接続できません。この特定のVMをpingおよびリモート接続できますが。 VMにインストールされたワークベンチ内でクエリを実行することもできます。
私はネットワーキングやセキュリティ関連のものがあまり得意ではありません。この問題を解決するのを手伝ってください。
エラー:
ホストからABC:3306のサーバーへのユーザー 'root'の接続試行が失敗しました: 'ABC'のMySQLサーバーに接続できません(10060)
本当にこれは考えられる理由の大きさかもしれません。うまくいけば、これは始まりです:
基本的なネットワークを確認する
MySQL仮想マシンからコマンドプロンプトを開き、IPCONFIG /ALL
。これにより、異なるネットワークアダプターにバインドされているすべてのIPアドレスが表示されます。
接続しているIPアドレスがそこにリストされていることを確認します。仮想マシンは、再起動後に静的IPを持つのではなく、DHCPから新しいIPを取得している可能性があります。
ホスト名vs IP
ホスト名解決を確認する必要があります。引用されたエラーから、サーバーIPではなくホスト名に接続していることが示唆されます。マシンが正しいIPアドレスを使用してホスト名に解決できることを確認します。接続文字列でサーバーの実際のIPのホスト名を変更することもできます。
MySQL構成ファイル
WindowsでMySQLを実行していると言いましたが、my.cnf
からmy.ini
。 4.1.5より前の古いバージョンのMySQLの構成ファイルは、通常c:\my.ini
またはc:\windows\my.ini
。これ以降のバージョンの場合、デフォルトの場所は通常インストールディレクトリです%PROGRAMDATA%\MySQL\MySQL Server xxx
。
構成ファイルを見つけたら、メモ帳(または同様のテキストエディター)で開き、[mysqld]
セクションとport=
接続しようとしているポートとbind-address=
接続しようとしているIPアドレス。
サーバーポート
MySQL仮想サーバーからコマンドプロンプトを開き、netstat –ano
、これはプロセスのリストと、それらがリッスンしているIP /ポートを表示します。 MySQLサーバーがここにリストされ、構成ファイルが定義するのと同じポートとIPでリッスンする必要があります。
Windowsファイアウォール
MySQLを許可するためのファイアウォールルールが必要です。次の例では、デフォルトポート3306にファイアウォールルールを追加します
netsh advfirewall firewall add rule name="MySQL Server" action=allow protocol=TCP dir=in localport=3306
これがマシン固有かどうかを特定します
MySQL Workbenchアプリケーションを別のワークステーションでセットアップし、接続して、これがグローバルな問題なのか、特定のワークステーションに関連するものなのかを特定することができます。
データベースのmysql管理者は、mysqlサーバーへのリモート接続を許可する必要があります。 my.cnfでこれを変更します。
bind-address = 127.0.0.1 # this shoul be your mysql server ip
これをコメント:
# skip-networking
変更されたIPに対して構成がセットアップされた可能性があります。デフォルトでは、特定のスキーマまたはスキーマのグループの特定のユーザーに明示的に許可を与えない限り、mysqlはリモートホストからの接続を許可しません。たとえば、次のような場合:
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'1.2.3.4' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
たぶんあなたが実際にしたことは、あなたのローカルマシンのアドレスであるあなた自身のIPアドレスに許可を設定することであり、あなたのローカルマシン(リモートサーバーではない)がそのIPアドレスを変更した場合、mysqlはあなたが接続しない限り「1.2.3.4」のIPアドレスがありますが、動的IPアドレスを持っている場合は明らかにもう持っていません(DSL /ケーブル接続で一般的)
したがって、SSHまたはTelnet、またはWindowsサーバーに使用するものを介して接続し、rootとしてmysqlにアクセスして、これを実行します。
SELECT * from information_schema.user_privileges;
これにより、すべてのユーザーに対する許可と、接続が許可される方法が表示されます。ローカルIPアドレスまたはワイルドカード(リモートマシンからサーバーに接続できる)が表示されない場合は、次のように設定する必要があります。
GRANT ALL PRIVILEGES ON *.* TO 'USERNAME'@'%' IDENTIFIED BY 'PASSWORD' WITH GRANT OPTION;
もちろん、USERNAMEはユーザーです。ワイルドカード/ドット/ワイルドカードがあると、そのユーザーが任意のネットワークの任意のユーザーから任意のスキーマ(mysqlではデータベース)に接続できるようになります。ただし、接続する必要がある特定のスキーマのユーザーに対してのみ許可を行うことをお勧めします。
その後、実際に正しい情報を持っていて、まだ接続できない場合は、 nmap などのポートスキャナーを使用してポートスキャンを実行し、mysqlが次のとおりかどうかを確認します。
1が真の場合、ポートの構成に誤りがある可能性があるため、2をチェックします。しかし、これらの2つのポイントのいずれかが機能する場合、ネットワーク構成ではなく、ユーザー設定または他の何かのように聞こえます。
指定したポートにセキュリティが追加された場合、つまり3306であることを確認しようとしましたか?.
GRANT ALL ON *.* to user@'%' IDENTIFIED BY 'password';
このコマンドは、@ Gustavo Rubioがすでに適切な説明を行っているすべてのユーザーに役立つはずです。
開いているポートを確認するには、仮想マシンでcmdを実行して入力します。
netstat -a
TCP 127.0.0.1:3360 Hostname:3360 LISTENING
My.cnfはMysql-install-path\MySQL\MySQL Server xxxにあります。変更する前に元のバックアップを確認してください。
初めて、mysqlへの接続がファイアウォールによってブロックされていないことをテストして確認する必要があります。
クラスター内の各ホストでファイアウォールを無効にするには、各ホストで次の手順を実行します。
1。既存のiptablesルールセットを保存します。
iptables-save > /root/firewall.rules
2。 iptablesを無効にします。
RHEL、CentOS、Oracle、およびDebianの場合:
chkconfig iptables off
そして
/etc/init.d/iptables stop
SLESの場合:
chkconfig SuSEfirewall2_setup off
そして
rcSuSEfirewall2 stop
Ubuntuの場合:
service ufw stop
https://www.cloudera.com/documentation/enterprise/5-7-x/topics/install_cdh_disable_iptables.html