(FLUSH TABLE .. FOR EXPORTについては 日々の覚書: MySQLインスタンス間でテーブルを移行する投げ遣りベンチマーク の一番最後にやり方を書いた記憶がある)
まずはInnoDB FullTextを持ったテーブルを作る…のは、マニュアルのサンプルを丸コピーした。
mysql56> CREATE TABLE articles ( -> id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, -> title VARCHAR(200), -> body TEXT, -> FULLTEXT (title,body) -> ) ENGINE=InnoDB; Query OK, 0 rows affected (0.15 sec) mysql56> INSERT INTO articles (title,body) VALUES -> ('MySQL Tutorial','DBMS stands for DataBase ...'), -> ('How To Use MySQL Well','After you went through a ...'), -> ('Optimizing MySQL','In this tutorial we will show ...'), -> ('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'), -> ('MySQL vs. YourSQL','In the following database comparison ...'), -> ('MySQL Security','When configured properly, MySQL ...'); Query OK, 6 rows affected (0.04 sec) Records: 6 Duplicates: 0 Warnings: 0 mysql56> SELECT * FROM articles -> WHERE MATCH (title,body) -> AGAINST ('database' IN NATURAL LANGUAGE MODE); +----+-------------------+------------------------------------------+ | id | title | body | +----+-------------------+------------------------------------------+ | 1 | MySQL Tutorial | DBMS stands for DataBase ... | | 5 | MySQL vs. YourSQL | In the following database comparison ... | +----+-------------------+------------------------------------------+ 2 rows in set (0.00 sec)
この状態でFLUSH TABLE articles FOR EXPORTすると、
mysql56> FLUSH TABLE articles FOR EXPORT; Query OK, 0 rows affected, 2 warnings (0.00 sec) mysql56> SHOW WARNINGS; +---------+------+----------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------------------------------------------------------------------------------------------------+ | Warning | 1235 | InnoDB: This version of MySQL doesn't yet support 'FLUSH TABLES on tables that have an FTS index. FTS auxiliary tables will not be flushed.' | | Warning | 1235 | InnoDB: This version of MySQL doesn't yet support 'FLUSH TABLES on tables that have an FTS index. FTS auxiliary tables will not be flushed.' | +---------+------+----------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
わーにんぐ。同じメッセージが2回出てるのはバグかな。。
【2015/03/04 00:26】
レポートしてVerifyしてもらいました。MySQL Bugs: #76121: Warning 1235, "FTS auxiliary tables will not be flushed" is printed twice.
この状態でdatadirの下のディレクトリを覗くと、
$ ll d1 合計 1188 -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_1.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_2.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_3.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_4.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_5.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_000000000000006f_INDEX_6.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_BEING_DELETED.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_BEING_DELETED_CACHE.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_CONFIG.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_DELETED.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 16:09 2015 FTS_000000000000005b_DELETED_CACHE.ibd -rw-rw---- 1 mysql mysql 700 3月 3 16:10 2015 articles.cfg -rw-rw---- 1 mysql mysql 8618 3月 3 16:09 2015 articles.frm -rw-rw---- 1 mysql mysql 114688 3月 3 16:09 2015 articles.ibd -rw-rw---- 1 mysql mysql 61 3月 3 16:09 2015 db.opt
いつものやつらと.cfgファイル(これはFLUSH TABLE FOR EXPORTすると作られる。UNLOCKすると消える)の他に、見覚えのない.ibdファイルがいっぱい。こいつらがどうもFullText Indexの実体の様子。
コピー先にd3というスキーマを使うことにしてセットアップ。
mysql56> create database d3; Query OK, 1 row affected (0.00 sec) mysql56> use d3 Database changed mysql56> CREATE TABLE articles ( id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY, title VARCHAR(200), body TEXT, FULLTEXT (title,body) ) ENGINE=InnoDB; Query OK, 0 rows affected (0.15 sec) $ ll ../d3 合計 1184 -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_1.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_2.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_3.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_4.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_5.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_000000000000008b_INDEX_6.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_BEING_DELETED.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_BEING_DELETED_CACHE.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_CONFIG.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_DELETED.ibd -rw-rw---- 1 mysql mysql 98304 3月 3 17:10 2015 FTS_0000000000000074_DELETED_CACHE.ibd -rw-rw---- 1 mysql mysql 8618 3月 3 17:10 2015 articles.frm -rw-rw---- 1 mysql mysql 114688 3月 3 17:10 2015 articles.ibd -rw-rw---- 1 mysql mysql 61 3月 3 17:10 2015 db.opt
FullText Index作った時点で作られるのねこのひとたち。
mysql56> ALTER TABLE articles DISCARD TABLESPACE; Query OK, 0 rows affected (0.01 sec) $ ll d3 合計 16 -rw-rw---- 1 ttanaka ttanaka 8618 3月 3 17:10 2015 articles.frm -rw-rw---- 1 ttanaka ttanaka 61 3月 3 17:10 2015 db.opt
DISCARD TABLESPACEしたら一緒に消えた。。
$ cp -ip d1/*.{cfg,ibd} d3/ mysql56> ALTER TABLE articles IMPORT TABLESPACE; Query OK, 0 rows affected, 1 warning (0.03 sec) mysql56> SHOW WARNINGS; +---------+------+----------------------------------------------------------------------------------------------+ | Level | Code | Message | +---------+------+----------------------------------------------------------------------------------------------+ | Warning | 1817 | InnoDB: Index corrupt: Index '"title"' not found or corrupt, you should recreate this index. | +---------+------+----------------------------------------------------------------------------------------------+ 1 row in set (0.00 sec) mysql56> SELECT * FROM articles -> WHERE MATCH (title,body) -> AGAINST ('database' IN NATURAL LANGUAGE MODE); ERROR 1764 (HY000): The table does not have FULLTEXT index to support this query
おー。確かにできないー。
まあMroongaさんもできないっちゃできないし、全く構わない気もする。
あとこれ5.6.23なので、MeCab関係なくInnoDBのFTSとしてこういう動作。ってことは5.7.6のMeCab, Ngramでもこうなるんだろうなぁ。。
0 件のコメント :
コメントを投稿