2013年5月24日金曜日

Amazon RDSのinnodbってデータベースの正体

この前初めてRDSにログインしたんですが、


mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| innodb             |
| mysql              |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)

なにこれ。


mysql> DROP DATABASE innodb;
ERROR 1010 (HY000): Error dropping database (can't rmdir './innodb/', errno: 17)

$ perror 17
OS error code  17:  File exists

あれ消せない。

mysql-5.5.31/sql/sql_db.ccによると、DROP DATABASEはそのデータベースに紐付いている
(とMySQLが認識している)ファイルを全部消しつつ、
他にファイルが無いか数えて、他にファイルが無ければそのディレクトリに向かってrmdirを呼ぶ。

ここで消さなかった(MySQLがテーブルだと認識してない)ファイルが残ってた場合、
Error:1010がコールされると。

つまりが、コイツの実体はデータベースじゃなくて単なるディレクトリなのね。
と思ってたら


mysql> show variables like 'datadir';
+----------------------+----------------------+
| Variable_name        | Value                |
+----------------------+----------------------+
| datadir              | /rdsdbdata/db/       |
+----------------------+----------------------+
1 rows in set (0.00 sec)

mysql> SELECT * FROM information_schema.global_variables WHERE variable_value LIKE '%innodb%';
+---------------------------+-----------------------+
| VARIABLE_NAME             | VARIABLE_VALUE        |
+---------------------------+-----------------------+
| INNODB_DATA_HOME_DIR      | /rdsdbdata/db/innodb  |
| DEFAULT_STORAGE_ENGINE    | InnoDB                |
| STORAGE_ENGINE            | InnoDB                |
| INNODB_LOG_GROUP_HOME_DIR | /rdsdbdata/log/innodb |
+---------------------------+-----------------------+
4 rows in set (0.00 sec)

ああ、datadirの下にinnodbディレクトリを掘って、そこにibdata1があるのか。。納得。
ib_logfileと同じように/rdsdbdata/data/innodbとかにすれば良かったのにね。。


↓という訳で、「権限の関連で」削除できないんじゃなくて、そもそもデータベースじゃない気がするんですよ。
https://forums.aws.amazon.com/thread.jspa?messageID=422607

mysql> SHOW GRANTS\G
*************************** 1. row ***************************
Grants for root@%: GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD 'xxx' WITH GRANT OPTION
1 row in set (0.00 sec)


0 件のコメント :

コメントを投稿