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 从生产服务器转移到实时的日期时间问题
Django / Docker-compose:重试数据库连接时:django.db.utils.OperationalError:(2002,“无法连接到'db'(115)上的MySQL服务器”)
South - 将 django 应用程序从 sqlite 迁移到 mysql
Django docker 容器无法连接到 mysql 容器,出现错误“无法连接到 'db' (111) 上的 MySQL 服务器”)