Help us understand the problem. What is going on with this article?

incorrect database name '#mysql50#.***' when selecting the database のエラー

無効なデータベースが選択されました というエラー。自分は以下がでました

incorrect database name '#mysql50#.ssh' when selecting the database

で、実際データベース一覧見てみてもこいつがいます。なんだこれ

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| #mysql50#.ssh      | <- これ
| mysql              |
| performance_schema |
| test               |
+--------------------+

原因

mysqlのディレクトリの中にディレクトリを作ると、データベースと誤認されてこれがでます。
私の場合は .ssh ですね。

$ ls -la /var/lib/mysql/

...
drwx--x--x.  2 mysql mysql     4096 Jun 20  2017 mysql
srwxrwxrwx   1 mysql mysql        0 Dec  9 13:00 mysql.sock
drwx------.  2 mysql mysql     4096 Jun 20  2017 performance_schema
drwxr-xr-x   2 mysql mysql     4096 Dec 23 11:28 .ssh
drwxr-xr-x.  2 mysql mysql     4096 Jul  3  2017 test

.ssh ディレクトリがあります。そういえば作りました。これをなんとかしないといけません。

mysqlのディレクトリがどこにあるかわからない場合は、 SHOW VARIABLES LIKE 'datadir'; を実行することで場所がわかります

mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+

対処法

3つあります。

1. 消す

これがあるからデータベースと誤認されているわけです。消していいならしまいましょう
ただ、できた原因とかわかってないとまだ出来上がる可能性はあります。

rm -rf /var/lib/mysql/.ssh

2. このディレクトリを無効化する

my.cnf に、このディレクトリを無効化してという記述をすることで無視できるようになります。

vi /var/lib/mysql/my.cnf

ignore-db-dir='.ssh' <- これを追記

再起動して読み込ませ、一覧から消えればOK

$ /etc/init.d/mysqld restart

3. クエリを見直す

このエラーがでるクエリを発行しているということは、そのディレクトリを見に行ってしまうようなクエリを書いているということです。

僕の場合は以下のクエリを使ってパーティションの確認をしようとしてエラーが出ました。

SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS;

これでなんで見てしまうかというと、条件として TABLE_SCHEMA を指定していなかったのでそれが原因でした。
見たいテーブルだけ指定してあげます

SELECT TABLE_SCHEMA, TABLE_NAME, PARTITION_NAME, PARTITION_ORDINAL_POSITION, TABLE_ROWS
FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_SCHEMA = 'test';

これで .ssh テーブルを見に行かなくなるのでエラーは消えました


1番は消していいものかの精査が必要
2番は再起動が必要(本番稼働サービスなどはやりたくない)
3番はクエリによる

とのことで、どの解決方法がいいか考えて適宜使っていくのがいいと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした