我最近不得不从一个托管服务提供商转移到另一个(如果您在英国,请不要使用 Easyspace 作为您的 VPS!)因为我的之前的主机在没有任何警告的情况下丢弃了我的服务器。
幸运的是,我已做好远程备份,能够顺利恢复几乎所有客户网站和数据库。除了这个。
自从我恢复了数据库后,其中一些数据库表现出非常不寻常的行为,特别是将多行数据行或某些字段清零。
有人遇到过这种情况吗/知道原因是什么吗?这种情况似乎仅在更新记录时发生。
我的备份包括
mysqldump --all-databases
我最初使用 phpMyAdmin 恢复到我的新 MySQL 服务器。然后我再次尝试,从命令行直接导入 MySQL,结果还是一样。
答案1
您要导入的数据库是否使用与数据库导出/源数据库不同的默认字符集创建? iso-8859-1 和 UTF-8 之间的差异通常会导致报告时数据丢失。
答案2
事实证明,问题在于我使用了 mysql_real_escape 字符串。我的脚本抛出了以下错误:
Warning: [2] mysql_real_escape_string(): "Access denied for user 'www-data'@'localhost' (using password: NO)"
我正在使用 mysqli。因此函数/方法应该是
mysqli_real_escape_string($link, $str);
// OR
mysqli::escape_string($str);
看起来真的很蠢,但它在我的另一台服务器上运行正常,尽管根本没有使用 mysql 的默认设置……它似乎可以继续运行。所以我猜是权限问题,而我的新服务器表现出了正确的行为。
问题解决了。