TL;DR
- たぶん
my.cnf
にearly-plugin-load=keyring_file.so
を書くのを忘れてる - 「再起動したら2回目は上手く通った」みたいなのは、間違って
INSTALL PLUGIN
でプラグインを食わせてるんだと思う。
暗号化したテーブルをmysqldumpすると、 ENCRYPTION = 'Y'
がテーブルオプションにくっついてくる。
--
-- Table structure for table `t1`
--
DROP TABLE IF EXISTS `t1`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!50503 SET character_set_client = utf8mb4 */;
CREATE TABLE `t1` (
`num` int DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ENCRYPTION='Y';
/*!40101 SET character_set_client = @saved_cs_client */;
こいつを early_plugin_load=keyring_file.so
していないmysqldで実行すると転ける。
mysql> CREATE TABLE `t1` ( `num` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci ENCRYPTION='Y';
ERROR 3185 (HY000): Can't find master key from keyring, please check in the server log if a keyring is loaded and initialized successfully.
おとなしく my.cnf
に early_plugin_load
を書くと成功するようになる。
「Can't find ..」にばかり目がいくけれど、「keyringがロードされて初期化に成功してるか確認しろ」とも書いてあるし。
とまあここまでは良いんだけども。
keyring_file
プラグインって「 early_plugin_load
で読ませろよ!」って ドキュメント に書いてある割に、(earlyでない) plugin_load
や INSTALL PLUGIN
でも利用できる。
特に INSTALL PLUGIN
で有効にしていた場合、「バックアップ元の my.cnf
には early_plugin_load
の記述はなかったよ?」ということになりがちな気がする。
mysql.plugin
テーブルのリストアそれ自体はプラグインをロードしてくれないので、「 my.cnf
に書いた記憶もないし、リストアがこのエラーで途中までで転けたけどmysqldを再起動(=再起動すると mysql.plugin
テーブルから読んで keyring_file
プラグインがロードされるから)してからもう一度やったら上手くいったよ?」みたいなのはこのケースに該当する気がする。
ストレージエンジンの場合と仕組み(?)はいっしょ。
まあ、忘れがちですが忘れないようにしましょう
0 件のコメント :
コメントを投稿