Не получается восстановить БД из файла через drush.

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

Аватар пользователя VasyOK VasyOK 7 августа 2020 в 14:25

Всем привет, продолжаю мудрить со CLI.

Делаю бекап БД через drush:
drush sql-dump --gzip > dbname.sql
также пробовал без сжатия:
drush sql-dump  > dbname.sql

Все норм, в папке сайта создается файл БД.

Теперь пытаюсь восстановить БД из этого файла
drush sql-cli < dbname.sql
Не получается, пишет:
the input device is not a TTY

Почему не получается? Окружение Docker4Drupal + drupal-project (https://github.com/drupal-composer/drupal-project)

Лучший ответ

Аватар пользователя ivnish ivnish 7 августа 2020 в 14:54

Вот каждый, абсолютно каждый на эти грабли наступает, а гуглить никто не хочет

docker-compose exec -T php drush sqlc < dump.sql

Комментарии

Аватар пользователя VasyOK VasyOK 7 августа 2020 в 15:04

Гуглил - чето совсем не нашел.

Если база несжата - вышло. А если сжата через
drush sql-dump --gzip > dbname.sql

то при
docker-compose exec -T php drush sqlc < dbname.sql
выдает

> ERROR: ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII '\0' is expected. Query: ''.
Аватар пользователя Andruxa Andruxa 8 августа 2020 в 13:14

Если делаешь дамп базы с ключом --gzip - то нужно указывать расширение файла .gz:
drush sql-dump --gzip > dbname.sql.gz

потом, перед заливкой дампа, его нужно предварительно раcпаковать:
gunzip dbname.sql.gz

и после этого - заливать дамп в базу:
drush sql-cli < dbname.sql

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 12:57

Стандартные команды почему-то не работают.
На моем ПК
mysql -u vasyok -pqwerty12345 mydbname < dump.sql
пишет
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

На хостинге
mysqldump -u vasyok -pqwerty12345 mydbname > dump.sql
пишет
mysqldump: Got error: 1045: Access denied for user 'vasyok'@'localhost' (using password: YES) when trying to connect

docker-compose exec - да, это работает у меня на докере. Но на хостинг даже на знаю нужно ли докер ставить.

Аватар пользователя ivnish ivnish 8 августа 2020 в 13:31

На твоем ПК конечно работать не будет, у тебя ведь mysql в контейнере

На хостинге явно ошибся с данными подключения к БД. Если сайт рабочий, то всё будет в settings.php написано

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 15:51

Да, ты прав. На хостинге я ошибся.
Мне осталось понять почему почему в 9м драше выпиляли возможность импорта БД.

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 16:25

Хмм. Действительно работает.
Понял в docker4drupal работает
с приставкой "docker-compose exec -T php". Если переносить БД т.обр. то есть ограничение на ее размер?

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 18:12

И что делать в таких случаях? Я раньше sypex dumper-ом пользовался. Но бекапы могут кривоватыми получаться. И RxB почему-то против таких методов Smile

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 16:48

Теперь поборемся за место на диске

Создаем файл бекапа
drush sql-dump --gzip > dump.sql.gz
Распаковываем
gunzip dump.sql.gz
Пишет:
gzip: dump.sql.gz: invalid compressed data--format violated

Я конечно могу со cli запаковывать и распаковывать по другому, но чисто интересно почему не работает, когда сделано через sql-dump --gzip?

Аватар пользователя cwpnaWLs7M4a cwpnaWLs7M4a 8 августа 2020 в 17:44

у меня все работает. вы наверно в каком-то докере находитесь? на убунту 1804 все нормально.
$ drush sql-dump --gzip > dump.sql.gz
$ gunzip -d dump.sql.gz
$ ls
dump.sql

Аватар пользователя VasyOK VasyOK 8 августа 2020 в 18:41

Возможно я путаюсь в понятиях, но Докер он же у меня в Убунту.

Вот так работает.
Запаковка:
tar -cvzf preprod.tar.gz preprod.sql
Распаковка:
tar -xvf preprod.tar.gz

А вот так нет:
drush sql-dump --gzip > dump.sql.gz - тут файл создается

gunzip -d dump.sql.gz пишет:
gzip: dump.sql.gz: invalid compressed data--crc error
gzip: dump.sql.gz: invalid compressed data--length error