多数の MySQL データベースを持つサーバーがあります。最近、ルートとしてログインすると、一部のスキーマが表示されなくなりました。
その特定のデータベースへのログインを使用すれば、それを表示できます。
このデータベースの「所有者」は root ですが、root に表示されない他のデータベースは他のユーザーが所有しています。
最近アクセスして作業したデータベースが消えているようですが、現在 5 つ以上のデータベースが表示されません。これはローカル キャッシュではなく、ルート ログインを使用しているユーザーも同じ問題を抱えています。
答え1
もしあなたの現在の使用者()と書かれていないroot@localhost
場合は、ルート権限がないので、接続が許可されません。
接続後に実際にどのような権限を持っているかを確認するには、次のコマンドを実行します。
SHOW GRANTS;
特定のデータベースに接続すると、次の情報が表示されます。
- そのデータベースのテーブル
- そのデータベース専用のINFORMATION_SCHEMA内のメタデータ
例えば、buyspace_systdbに接続したとします。
出力はSHOW GRANTS;
おそらく次のようになるだろう
GRANT USAGE ON *.* ...
GRANT ALL PRIVILEGES ON buyspace_systdb.* TO ...
ローカルサーバー内からログインする場合は、ユーザーはroot@localhost
機能します。リモートからログインする場合は、root@localhost
許可されません。ユーザー()として認証する現在の使用者()。この証明は、質問の最初の表示にあります。information_schema のみが表示されることに注意してください。1 つまたは 2 つのエントリを持つ information_schema.schemata を除いて、実質的に空になります。root@'%'
に存在しmysql.user
、 と同じ権限を持っている場合はroot@localhost
、 のようなすべてを表示できますroot@localhost
。
MySQL には、悪循環を引き起こす認証方式があります。接続しようとしているユーザーが存在しない場合は、より曖昧なユーザー名 (ワイルドカードや限定的な権限を許可) を試します。私の DBA StackExchange の投稿を参照してください。MySQL エラー: ユーザー 'a'@'localhost' のアクセスが拒否されました (パスワードの使用: YES) 詳細については、こちらをご覧ください。
結論:root@localhost
リモートから接続することはできません