![将旧的 mysql 数据库转储导入 MariaDB docker 容器失败:表“用户”已存在](https://linux22.com/image/761451/%E5%B0%86%E6%97%A7%E7%9A%84%20mysql%20%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BD%AC%E5%82%A8%E5%AF%BC%E5%85%A5%20MariaDB%20docker%20%E5%AE%B9%E5%99%A8%E5%A4%B1%E8%B4%A5%EF%BC%9A%E8%A1%A8%E2%80%9C%E7%94%A8%E6%88%B7%E2%80%9D%E5%B7%B2%E5%AD%98%E5%9C%A8.png)
我正在尝试将较旧的(~版本 5)服务器导入 MariaDB docker 容器。
我使用 mysqldump 命令(带有 --all-databases)创建了一个转储,当我尝试导入它时出现以下错误:
ERROR 1050 (42S01) at line 2071: Table 'user' already exists
我正在尝试使用标准命令将其导入到一个全新的容器中:
mysql -uroot -p < [sqldump].sql
我是 SQL 方面的新手,想知道我是否遗漏了一些明显的内容,或者是否存在一些真正的不兼容性。
我非常感谢您的建议。
谢谢!
答案1
听起来您的转储脚本想要覆盖包含用户和权限信息的系统“mysql”数据库。如果您确实想这样做,则可以mysqldump
使用该选项再次运行--add-drop-database
,然后FLUSH PRIVILEGES
在导入之后运行。但我不建议这样做,尤其是当数据库运行的是不同版本时。
更好的选择是通过将数据库名称传递给参数来明确选择要导出的数据库--databases
,排除“mysql”、“information_schema”和“performance_schema”等数据库。然后,您可以根据需要向新导入的数据库授予权限。
另一个快速选项是在文本编辑器中编辑现有的转储文件,只取出想要创建“mysql”表(包括“用户”和其他表)的部分。
答案2
该问题与 Docker 无关,可能不属于 serverfault。答案如下:https://dba.stackexchange.com/a/285253/93071