CMS DataLife Engine - Система управления сайтами

Sign in to follow this  
Sander1

Ошибка в работе бекапа DLE 12.1

Recommended Posts

Сделал тут давеча бекап средствами DLE и через некоторое время решил восстановить БД. После импорта слетела авторизация. Каково же было мое удивление, когда оказалось, что таблица dle_users не была сохранена, но при импорте была пересоздана и оказалась пустой. Т.е. полностью слетели данные таблицы dle_users и dle_admin_sections (возможно и другие некоторые).

Выполняю запрос на dle 12.1

SHOW TABLE STATUS WHERE name like 'dle_users'

В результате вижу Rows = 0, хотя записи однозначно есть.

http://prntscr.com/j7d450

Выполняю этот же запрос на DLE 12, все норм.

Кодировка utf-8, версия PHP: 5.6, 7.0, 7.1

 

PS. Кто не знает, в файле engine/inc/dumper.php именно по результатам этого запроса выполняется проверка, экспортировать данные из таблицы или нет (т.к. их нету типа).

Share this post


Link to post
Share on other sites
54 минуты назад, Sander1 сказал:

Выполняю этот же запрос на DLE 12, все норм.

Версия DLE тут никакой роли не играет, смотрите файл бекапа БД чтобы все записи присутсвовали. Если они там есть, то делайте повторно восстановление бекапа, т.к. во время восстановления произошел какой либо сбой в БД. Если данных нет в бекапе, значит их не отдал MySQL сервер во время создания бекапа БД

54 минуты назад, Sander1 сказал:

PS. Кто не знает, в файле engine/inc/dumper.php именно по результатам этого запроса выполняется проверка

Никаких проверок в этом файле нет, он выполняет команды описанные в файле бекапа. И в файле бекапа стоят MySQL запросы и на создание таблиц и на вставку данных. Это во время импорта, а во время экспорта тоже проверок нет, он экспортирует все, что выдает БД.

Share this post


Link to post
Share on other sites

Да, действительно не зависит от версии DLE.

Записал видео для наглядности:

https://sandev.pro/uploads/show_db.wmv

 

1 час назад, celsoft сказал:

Никаких проверок в этом файле нет, он выполняет команды описанные в файле бекапа. И в файле бекапа стоят MySQL запросы и на создание таблиц и на вставку данных. Это во время импорта, а во время экспорта тоже проверок нет, он экспортирует все, что выдает БД.

 

Запрос на получение данных.

211: $result = mysqli_query($dblink, "SHOW TABLE STATUS");

 

Получение количества записей в таблице

222: $tabinfo[$item['Name']] = $item['Rows'];

 

Проверка (которой нет?), на количество записей в таблице.

303: if ($tabinfo[$table] > 0) {

 

И получается, что строки 303 - 333 просто игнорируются, т.к. скрипт ошибочно считает что записей в БД нет.

 

Это судя по всему известная проблема.

https://www.google.com.ua/search?q=show+table+status+rows+wrong

Share this post


Link to post
Share on other sites
13 часов назад, Sander1 сказал:

Проверка (которой нет?), на количество записей в таблице.

Я имел ввиду другие проверки, когда вы спросили про проверки экспортировать или нет. Я подумал что вы спрашиваете про ограничения из каких таблиц брать информацию, а из каких нет, таких проверок и ограничений в скрипте нет.

 

13 часов назад, Sander1 сказал:

И получается, что строки 303 - 333 просто игнорируются, т.к. скрипт ошибочно считает что записей в БД нет.

Нет, в данном случае скрипт все считает верно, это ему ваша БД вернула, что записей в таблице нет, что то повреждено у вас в таблице. Как правило помогает ремонт и восстановление БД в таких случаях. Либо обновите MySQL сервер, если он очень старой версии.

Share this post


Link to post
Share on other sites

5.6.38-log MySQLi

 

https://dev.mysql.com/doc/refman/8.0/en/innodb-restrictions.html

Цитата

SHOW TABLE STATUS does not give accurate statistics on InnoDB tables except for the physical size reserved by the table. The row count is only a rough estimate used in SQL optimization.

Сама документация говорит, что данный запрос не может давать точно значение количества записей в таблицах InnoDB.

Share this post


Link to post
Share on other sites
11 часов назад, Sander1 сказал:

Сама документация говорит, что данный запрос не может давать точно значение количества записей в таблицах InnoDB.

А DLE и не нужно точное значение, ему достаточно того что эти поля есть, а они в данном случае есть. DLE главное не нулевое значение. Ему достаточно вообще информации, что там что то есть. Реальная же выборка данных, потом идет совсем другими запросами, и вот информации о наличии данных у вас отсутствует, чего быть не должно. И именно на отсутствующие данные, мы за много лет жалоб ранее еще не получали, я не могу сказать, почему у вас там отсутствует информация о наличии записей. Попробуйте как я написал выше обновить MySQL а также произвести ремонт и восстановление БД.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this