mariadb
環境
- Ubuntu26.04 LTS
- 11.8.6-MariaDB-5ubuntu0.1
リストアでエラー
かなり古いバージョンのMysqlでダンプを取ったものからリストア。
いつもこれでうまく動いているのだけれど
$ sudo mysql -u root -p < 2026103103dump.sql
あれ?
--------------
CREATE TABLE `user` (
`Host` char(60) COLLATE utf8_bin NOT NULL DEFAULT '',
`User` char(16) COLLATE utf8_bin NOT NULL DEFAULT '',
`Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
`Select_priv` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N',
.
.
.
PRIMARY KEY (`Host`,`User`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='Users and global privileges'
--------------
ERROR 1050 (42S01) at line 2551: Table 'user' already exists
エラーが出ました。
一般的には以下のようにすればよいということらしいのですが
MariaDB [(none)]> DROP TABLE IF EXISTS user;
ERROR 1046 (3D000): No database selected
うーん? もうちょっと慎重にしてみます。
「MySQLのdumpをレストアする際に "ERROR 1050 (42S01) at line 1596: Table 'user' already exists" と出てきてしまうときの対処法」
https://qiita.com/r3n/items/9899a3a863c2554558d0
を基に、以下のようにして対応しました。
$ vim 20261031dump.sql
として、冒頭に以下を追加します。
DROP TABLE IF EXISTS `mysql`.`global_priv`;
DROP VIEW IF EXISTS `mysql`.`user`;
再度試します。
$ sudo mysql -u root -p < 20261031dump.sql
うまくいきました。
先のQiita記事によると、以下のようなことが原因らしいです。
これはmysql.userテーブルがMariaDB 10.4でビューに変更されたことと関係があるようで
MDEV-22127 に具体的な問題・解決策についてのドキュメントがあります。