Django:将 MySQL db 转移到服务器 MySQL 后表不存在

Posted

技术标签:

【中文标题】Django:将 MySQL db 转移到服务器 MySQL 后表不存在【英文标题】:Django: Table Doesn't exist after shifting MySQL db to server MySQL 【发布时间】:2019-04-28 23:54:15 【问题描述】:

总结:将 mysql "site_dump.sql" 上传到服务器 MySQL,并应用适当的设置指向数据库后,我收到错误“表不存在”

错误详情: ProgrammingError: (1146, "Table 'evaluation.Evaluator_skill' 不存在")

Observations:只有 User 表显示了我拥有的所有数据。所有其他表都抛出相同的错误。如果我登录到 MySQL shell,使用那个新的数据库,并查看表数据,所有表及其数据都存在。

我到底做了什么:

在我的本地 PC 上,进行了这样的 sql 转储:

mysqldump -u root -p --databases db_name > mysite_26_11_2018.sql

将此文件复制到服务器。

使用 root 用户名在服务器上启动 MySQL shell 并创建一个新数据库:

mysql>创建数据库db_server;

然后在提示时上传复制的数据库,如下所示:

mysql -u root -p db_server

再次登录mysql,执行以下步骤:

mysql>创建由'admin_password'标识的用户server_admin;

mysql>将 db_server.* 上的所有权限授予 'server_admin'@'%';

mysql>刷新权限;

我尝试了什么: - 1) 运行 makemigrations 和 migrate,但没有变化。

2) 使用 MySQL shell 检查所有数据是否存在于 db 中。

3) 使用 django shell 检查用户数据是否全部存在,但所有其他表都给出相同的错误。

【问题讨论】:

这听起来不像是 django 问题,这听起来像 mysql 转储/导入问题——我建议你删除 django 标签,你可能会得到你需要的帮助。 PS。 django 迁移并不神奇——它查看一个名为django_migrations 的表,如果迁移的名称在那里,django 认为它已应用(它不会扫描您的数据库模式并比较它......不。根本不。 )。在我看来,您的问题就像您未能转储所有需要的表。 另一种方法是使用 Workbench,它将为每个表创建 sql 文件。然后您可以手动导入失败的(参考问题等) @JavierBuzzi 感谢您的回复。我删除标签。但是,我已经可以在 MySQL new db 中看到所有包含数据的表都存在。什么都没有。我尝试再次重复数据库迁移步骤。 我发现了一些东西。错误显示“evaluation.Evaluator_modelname”。但在 db 文件中,我将表名视为“evaluator_modelname”。 @JavierBuzzi .....你是对的......我认为这个错误发生在转储 SQL 时......现在纠正这个? 【参考方案1】:

终于解决了。问题是,在创建转储文件时,所有表都自动小写。我不得不手动更改每个表名,然后一切正常。

ALTER TABLE oldtable RENAME TO Oldtable;

【讨论】:

很高兴你找到它;)

以上是关于Django:将 MySQL db 转移到服务器 MySQL 后表不存在的主要内容,如果未能解决你的问题,请参考以下文章

我们如何解决将 Access DB 从生产服务器转移到实时的日期时间问题

linux 转移mysql文件操作流程

Django / Docker-compose:重试数据库连接时:django.db.utils.OperationalError:(2002,“无法连接到'db'(115)上的MySQL服务器”)

South - 将 django 应用程序从 sqlite 迁移到 mysql

Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)

Oxwall 转移域名主机