Базы данных в дампе сайта

Главные вкладки

Аватар пользователя karmike karmike 23 марта 2023 в 22:51

Вопрос: знает ли кто-нибудь, как извлечь базы данных MySQL из дампа (архива) сайта, созданного с помощью ISP manager? (файл 2021-02-14.mysite.tar.gz).

В распакованном архиве базы лежат в дир. .system и выглядят так:

db.mysql.cswiki 3171 955
db.mysql.skforum 5 122 237
db.mysql.skwiki 17 257 537
db.mysql.mysite 314 748 752

Пробовал переименовать, изменяя расширение на sql, импорт идет с ошибками .

Комментарии

Аватар пользователя VasyOK VasyOK 23 марта 2023 в 22:55

файл 2021-02-14.mysite.tar.gz - это архив, как zip.
Войдите в архив и извлеките оттудова .sql файл. Если он там есть.

Аватар пользователя karmike karmike 24 марта 2023 в 0:30

Спасибо, но я перечислил файлы, которые там есть. Но называются они неправильно для MySQL.
В начале этих файлов вот такая запись:
-- MySQL dump 10.13 Distrib 5.7.33, for Linux (x86_64)
--
-- Host: localhost Database: cswiki
-- ------------------------------------------------------
-- Server version 5.7.33-0ubuntu0.16.04.1

Что говорит мне (я не спец в ДБ), что это просто переименованные базы.
Но при попытке их импортировать в ISP получаю ошибку. Что-то насчет невозможности использовать ключ.
Завтра скопирую сообщение.

Аватар пользователя bsyomov bsyomov 25 марта 2023 в 23:48

Mysql клиенту не важно какое там расширение, важно содержимое. И оно похоже на дампы.
Надо конкретную ошибку при импорте, тогда будет с чем разбираться.

Аватар пользователя anemoiaa anemoiaa 24 марта 2023 в 12:14
1

Возможно версии сервера отличаются.
У меня так было с SQL, не хотел кушать дамб более старой версии сервера.

Аватар пользователя bsyomov bsyomov 25 марта 2023 в 23:50

Проблем совместимости на уровне дампов практически не бывает между версиями. Иногда бывают с длинной ключа, но они вызваны не разными версиями как таковыми, а скорее разным набором настроек по умолчанию в разных версиях.

Аватар пользователя filinkov.ru filinkov.ru 24 марта 2023 в 18:05

Лучше создай bash скрипт с mysqldump и настрой на него крон, можно так же сжатие поставить сразу. Будет просто и стабильно!

Аватар пользователя marassa marassa 24 марта 2023 в 19:02
1

karmike wrote: Пробовал переименовать, изменяя расширение на sql, импорт идет с ошибками .

С какими?

karmike wrote: называются они неправильно для MySQL

Название (да и расширение) - это не более чем условность, неправильных названий не бывает.

karmike wrote: Что говорит мне (я не спец в ДБ), что это просто переименованные базы.

Да ну конечно же нет. Текстовый файл, в начале которого английским по белому написано dump не может являться ничем иным как дампом.

karmike wrote: получаю ошибку. Что-то насчет невозможности использовать ключ.
Завтра скопирую сообщение.

Вот тогда всё и прояснится.

Аватар пользователя karmike karmike 26 марта 2023 в 21:50

При попытке импорта базы через ISP manager выдает ошибку:

Не удалось восстановить базу данных из резервной копии. Процесс завершился с ошибкой: 'mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1062 (23000) at line 2136: Duplicate entry 'км²-12-ru-node_search' for key 'search_index.PRIMARY' '

Нашел в и-нете много ответов, в основном, что надо импортировать из MySQL с параметром, требующим ввод логина и пароля. Завтра попробую, админ и пароль от базы у меня записаны.

По ошибке ERROR 1062 - наверно, нужно было предварительно очистить таблицу, куда импортирую дамп. Она сначала была пустая, потом импортировал старый дамп, созданный в начале работы восстанавливаемого сайта (27 мб), который импортировался без ошибок, потом стал пробовать последний по времени имеющийся дамп (315 мб), и забыл (чайник) очистить базу.

Аватар пользователя bsyomov bsyomov 26 марта 2023 в 21:55

"'mysql: [Warning] Using a password on the command line interface can be insecure." Это просто предупреждение, на него не надо обращать особого внимания. Оно не мешает импорту.

Ошибка это "Duplicate entry 'км²-12-ru-node_search' for key 'search_index.PRIMARY' '.
Да, надо чистить базу перед импортом этого дампа - в нём вероятно нет DROP IF EXISTS.

Аватар пользователя karmike karmike 29 марта 2023 в 15:21

Пытался восстановить сайт или его базу через ISP по разным сценариям: предварительно создавая пустую базу с администратором и паролем такими, какие были в импортируемых дампах, и удалив все одноименные базы перед восстановлением. В общем и целом, бесполезно.
Взялся за MySQL, и вот с его помощью база восстановилась. Итак, подключаемся к терминалу хостинга через SSH. Заходим в MySQL как root
mysql -p (попросит пароль)

Сначала смотрю, что за пользователи есть в MySQL:

mysql> SELECT user FROM mysql.user;

+--------------------+
| user |
+--------------------+
| skrwikiadmin |
| coremgr |
| cs-admin |
| cs-wiki-admin |
| csw-admin |
| debian-sys-maint |
| mysql.infoschema |
| mysql.session |
| mysql.sys |
| phpmyadmin |
| root |
| roundcube |
| skr-db-admin |
| skradmin |
| skrwikiadmin |
+---------------------+
15 rows in set (0.01 sec)

Вижу, что там хранятся многочисленные администраторы баз, созданных за время аренды хостинга. При этом в ISP их не видно.

Проверяем привилегии администратора
mysql> SHOW GRANTS FOR 'skradmin'@'localhost' (иначе не даст ему базу импортировать)

+--------------------------------------------------------------------------------------+
| Grants for skradmin@localhost |
+--------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO `skradmin`@`localhost` |
| GRANT ALL PRIVILEGES ON `basename`.* TO `skradmin`@`localhost` WITH GRANT OPTION |
+--------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

Теперь надо перезайти в MySQL как skradmin и можно импортировать базу, заранее закачанную на хостинг:

Переключаем базу данных:
USE basename;

Начинаем импорт:
SOURCE /var/www/www-root/data/sql/basename.sql;

Пошел импорт:

Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected (0.01 sec)
Query OK, 0 rows affected (0.00 sec)
Query OK, 0 rows affected, 1 warning (0.00 sec)
Query OK, 0 rows affected (0.10 sec)

Ну, и так далее.
Не знаю, в чем тут проблема взаимодействия ISP и MySQL, но при работе с MySQL напрямую, все работает. База восстановилась, но вот беда: ISP ее не видит. Оказывается, известная проблема.

На этом пока застрял.

Аватар пользователя bsyomov bsyomov 29 марта 2023 в 21:05

karmike wrote: Теперь надо перезайти в MySQL как skradmin и можно импортировать базу, заранее закачанную на хостинг:

Нет, не надо. Можно прямо под root импортировать.

Ну и не обязательно всё это делать в интерактивном режиме.

Аватар пользователя VasyOK VasyOK 29 марта 2023 в 19:28

"База восстановилась, но вот беда: ISP ее не видит" - а сайт видит?

экспорт в файл дампа
mysqldump -u USER -pPASSWORD DATABASE > dump.sql
импорт из файла дампа (можно того, что есть)
mysql -u USER -pPASSWORD -f DATABASE < dump.sql

Надо ли перед импортом удалять содержимое из БД? Вот не знаю. Некоторые говорят, что нет, но мне кажется что да.

Делается это либо через
drush sql-drop
либо через удаление и повторное создание самой БД.

Если глупость написал поправьте меня. Весна. Солнышко. Где-то.

Аватар пользователя marassa marassa 29 марта 2023 в 20:05
1

VasyOK wrote: Надо ли перед импортом удалять содержимое из БД? Вот не знаю. Некоторые говорят, что нет, но мне кажется что да.

Никакой магии в дампах нет, и слово "кажется" неприменимо к точным наукам Wink
Файл дампа БД представляет собой обычную последовательность обычных команд SQL, которые выполняются по порядку как если бы Вы их вводили вручную. Выполняются все эти команды и ничего кроме этих команд.
Если в файле дампа перед созданием каждой таблицы прописана команда DROP TABLE xxx, то предварительно очищать базу данных не надо - таблицы (если они есть) будут удалены перед созданием новых. Если команды DROP TABLE не прописаны - значит базу надо почистить перед импортом.
Если дамп сформирован панелью типа ISPmanager или cPanel, то обычно там уже прописаны команды DROP TABLE IF EXISTS. Если дамп делается вручную, то тут уж надо самому озаботиться либо не забыть опцию --add-drop-table при создании дампа, либо не забыть почистить базу перед импортом.

Аватар пользователя bsyomov bsyomov 29 марта 2023 в 20:59
1

Уточню: Опция "--add-drop-table" входит в --opt (вместе с --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset), и является умолчанием.
Именно поэтому, чаще всего, ничего чистить не приходится.

Аватар пользователя bsyomov bsyomov 10 апреля 2023 в 12:19

Например: head -n 100 dump.sql | grep "drop table"

Смысл примерно такой:
Обычно, в дампе везде либо есть, либо нет drop table, так что можно посмотреть перед первой же табличкой.
Head нужен тут чтобы не смотреть весь дамп, который может быть большим.
Обычно, в начале дампа есть некоторое количество заголовков и комментариев, так что надо взять побольше строк, так на всякий.

В случае если будет - будут выведены строки с drop table, Если нет, будет пустой результат.

Аватар пользователя marassa marassa 9 апреля 2023 в 7:10
1

VasyOK wrote: А как узнать эта опция в SQL файле включена или нет?

marassa wrote: Файл дампа БД представляет собой обычную последовательность обычных команд SQL, которые выполняются по порядку как если бы Вы их вводили вручную. Выполняются все эти команды и ничего кроме этих команд.
Если в файле дампа перед созданием каждой таблицы прописана команда DROP TABLE xxx, то предварительно очищать базу данных не надо - таблицы (если они есть) будут удалены перед созданием новых.

Аватар пользователя karmike karmike 11 апреля 2023 в 11:11

Извините, я плюнул на это дело, решил восстанавливать все по частям. Все тексты и картинки, которые были на сайте, хранятся отдельно, а многое все равно нужно переделывать.
ПиЭс: понял, что если бы сохранял базы MySQL отдельно, помимо дампов ISP (а также имена админов и пароли), все было бы проще. Да и сам сайт затарить в tar.