GA

2013/03/13

ついに#mysql50#lost+foundデータベースとさよならするのだ

MySQLはデフォルトでdatadirの下にあるディレクトリはデータベースとして扱うが、
MySQL 5.6で追加された--ignore-db-dirオプションを使うと、データベースとして認識されなくなる。

これでdatadirを別パーティションに切っている時の`#mysql50#lost+found'ともさよならなのだ。

mysql> SHOW DATABASES;
+---------------------+
| Database            |
+---------------------+
| information_schema  |
| d1                  |
| d2                  |
| logs                |
| #mysql50#lost+found |
| mysql               |
| performance_schema  |
| test                |
| tpcc                |
+---------------------+
9 rows in set (0.01 sec)

$ vi /etc/my.cnf
..
[mysqld]
ignore-db-dir = lost+found
..

ここでMySQL再起動。


mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| d1                 |
| d2                 |
| logs               |
| mysql              |
| performance_schema |
| test               |
| tpcc               |
+--------------------+
8 rows in set (0.00 sec)

やっほう!

ちなみにこの--ignore-db-dir、SHOW DATABASESで見えなくなるだけで色々できたりする。


mysql> use `#mysql50#lost+found`;
Database changed

mysql> SHOW TABLES;
Empty set (0.00 sec)

mysql> CREATE TABLE t1 ( a INT );
Query OK, 0 rows affected (0.09 sec)

$ ls -l lost+found/
合計 108
-rw-rw---- 1 mysql mysql  8554  3月 13 20:06 2013 t1.frm
-rw-rw---- 1 mysql mysql 98304  3月 13 20:06 2013 t1.ibd


それどころか、消せる。

mysql> DROP DATABASE `#mysql50#lost+found`;
Query OK, 1 row affected (0.07 sec)

$ ls -l lost+found/
ls: cannot access lost+found/: そのようなファイルやディレクトリはありません


ちなみに複数のディレクトリをIgnoreする時には、1行に1個ずつ書く必要があります。

$ vi /etc/my.cnf
..
[mysqld]
ignore-db-dir = lost+found
ignore-db-dir = .ssh
..

消せるのはちょっと面白かった。

0 件のコメント :

コメントを投稿