MariaDB - MySQL - 所有数据库导入 - 表“用户”已存在

Fre*_*ers 3 mariadb migration

我正在尝试从本地 MariaDB 迁移到 Docker 版本,这本质上应该像迁移到新的 SQL Server 一样简单。我已经通过很好地设置了 Docker 容器,但似乎无法导入我的“所有数据库”转储。

这就是我得到的:

mysql -u root -p  < mariadb_alldb_*.sql
Enter password:
ERROR 1050 (42S01) at line 8022: Table 'user' already exists
Run Code Online (Sandbox Code Playgroud)

通过以下方式生成转储:

mysqldump -u root -p --all-databases --skip-lock-tables > mariadb_alldb_"$(date '+%F')".sql
Run Code Online (Sandbox Code Playgroud)

更新:每次都在新的 docker 容器上运行,并且我在从中导入的目录中创建了备份。

ls * | grep mariadb_alldb_
mariadb_alldb_2020-05-04.sql
Run Code Online (Sandbox Code Playgroud)

Update2:也许这与我的docker设置有关?

这是我的 docker cmd:

docker stop mariadb && docker rm mariadb
docker run -d --name="mariadb" \
-p 3306:3306 \
-e TZ="America/Whitehorse" \
-v "/opt/mariadb/conf/conf.d":"/etc/mysql/conf.d" \
-v "/opt/mariadb/backups":"/mnt/" \
--mount type=volume,dst=/var/run/mysqld,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/var/run/mysqld \
mariadb:latest
Run Code Online (Sandbox Code Playgroud)

我正在从本地计算机进行导入,我已经从容器内部复制了结果。

小智 12

mysql.user正如有人已经提到的,这与10.4 中的表更改为视图有关。该问题和解决方案记录在 MariaDB 网站的MDEV-22127中。

解决方案是将以下两行添加到转储文件的顶部all-dbs.sql

DROP TABLE IF EXISTS `mysql`.`global_priv`;
DROP VIEW IF EXISTS `mysql`.`user`;
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你——拯救了我的心。未来用户请注意:您还可以在导入之前在 mysql 命令行上执行此操作。 (2认同)