跳转到主要内容
guo54581706 提交于 9 March 2012

大多数网站的更新没有发生任何事件发生,你开始之前,数据库转储时,成功的,可以被丢弃或归档。然而,偶尔的事情不要去计划,当发生这种情况往往不是必须恢复数据库的备份,而调查到什么地方出了错。

重要事项:更新前恢复备份之前,你必须确保完全清空数据库。Drupal的更新可能会重命名表或表中的数据重新组合成新的表,这些表通常不会被删除,当你恢复数据库备份。(例如,虽然mysqldump的增加DROP / CREATE缺省转储的表行,它不仅表,它知道。)如果没有被删除,这些“新”表将导致错误在下一次尝试更新,如果忽略这些错误,因为事情开始出现工作,你可能会遇到的问题,由于重复数据,旧数据或只是普通的数据库损坏后。

清空数据库

最简单的办法就是删除数据库,创建一个新的数据库:

mysql -h HOST -u USERNAME -pPASSWORD drop database `DB_NAME`; create database `DB_NAME` charset utf8; quit

如果你没有通过shell创建数据库的权限,你必须手动删除所有的数据库表,前提是你已经备份了数据。(填写适当的第一行)

MYSQL="mysql -h HOST -u USERNAME -pPASSWORD -D DB_NAME" $MYSQL -BNe "show tables" | awk '{print "set foreign_key_checks=0; drop table `" $1 "`;"}' | $MYSQL unset MYSQL

如果是共享数据库,你必须使用自己的表前缀。

从mysql dump恢复数据

一旦你确保所有数据库中的表已被删除,你可以恢复你的数据库备份使用:

mysql -h HOST -u USERNAME -pPASSWORD < your-db-dump.sql

注意:--add-drop-database 

不推荐使用--add-drop-database 的缘由是你需要使用 --database 参数,这个参数讲参入  use database 行到drump中,基本是硬编码。如果你有最佳方法,你需要一个临时网站来测试,然后才能改变线上的环境。你的2个数据库使用不同的名字。使用此选项可以改变目标数据库,一旦子啊发生问题,只是覆盖了错误的数据库。