Недавно мне пришлось перейти от одного хостинг-провайдера к другому (если вы находитесь в Великобритании, не используйте Easyspace для своего VPS!), Так как мой предыдущий хост без предупреждения сбросил мой сервер.
К счастью, у меня были удаленные резервные копии, и я смог без проблем восстановить почти все мои клиентские сайты и базы данных. Кроме этого.
Поскольку я восстановил свои базы данных, некоторые из них демонстрируют очень необычное поведение, в частности, исключают строки данных или определенные поля в нескольких строках.
Кто-нибудь испытывал это раньше / знает, в чем причина? Это происходит только при обновлении записей.
Мои резервные копии состояли из
mysqldump --all-databases
Сначала я восстановил свой новый сервер MySQL с помощью phpMyAdmin. Затем я попробовал еще раз, импортировав прямо в MySQL из командной строки, и произошло то же самое.
Оказывается, проблема в том, что я использую строку 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 ... просто казалось, что он справился с этим. Так что я предполагаю, что это были шонкие разрешения и что мой новый сервер показывает правильное поведение.
Задача решена.
Были ли базы данных, в которые вы импортируете, были созданы с другим набором символов по умолчанию для базы данных экспорта / исходных баз данных? Различия между iso-8859-1 и UTF-8 часто приводят к потере данных при составлении отчета.