Извините за дебильный вопрос.
На реальных хостингах экспорт и импорт БД без drush можно выполнить через:
mysqldump -u USER -pPASSWORD DATABASE > dump.sql
mysql -u USER -pPASSWORD -f DATABASE < dump.sql
А как это сделать на Ubuntu + docker4drupal
Пишет:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")
Комментарии
А ты зашел внутрь контейнера-то?
Не знаю. Как это узнать?
Сайт на D7 у себя развернул - работает. Значит зашел?
Ты используешь mysql в докере. В твоей системе mysql не установлен. Вопрос: где нужно вводить команды работы с mysql, в убунте или в докер контейнере?
Поставить mysql в докер контейнер? Если да то как?
Поставь. Пусть будет два
ок, как зайти в докер контенер?
Я запускаю сайт у себя так:
$ cd ~/Projects/local/myproject/
$ source ~/Projects/.bash_profile
$ docker-compose up -d
$ drush updb
Последняя команда, как пример. Или как-то еще заходить надо?
docker-compose exec имя-контейнера команды
имя-контейнера это PROJECT_NAME в .env файле?
Кидай архив в папку, куда монтируются файлы контейнера mariadb. Потом docker-compose exec mariadb sh - ты попадаешь в контейнер базы данных. И вот там уже выполняешь команду mysql
А как узнать куда монтируются файлы контейнера mariadb?
Я понимаю, вам смешно, но не делал я такого раньше.
У тебя после команды docker-compose down база данных удаляется? Если да, то файлы никуда не смонтированы и это не очень хорошо. Папка, куда монтируется, указана в docker-compose.yml в описании сервиса mariadb в секции volumes
Удалю проекты командой docker-compose rm. Тогда и БД вроде удаляется.
В docker-compose.yml :
mariadb:
image: wodby/mariadb:$MARIADB_TAG
container_name: "${PROJECT_NAME}_mariadb"
stop_grace_period: 30s
environment:
MYSQL_ROOT_PASSWORD: $DB_ROOT_PASSWORD
MYSQL_DATABASE: $DB_NAME
MYSQL_USER: $DB_USER
MYSQL_PASSWORD: $DB_PASSWORD
# volumes:
# - ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
# - /path/to/mariadb/data/on/host:/var/lib/mysql # Use bind mount
# - /path/to/mariadb/data/on/host:/var/lib/mysql - это раскомментировать? Как /path/to/mariadb/ узнать?
- ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here. - раскоментировал. Странный какой-то путь. Не понимаю где это относительно корня проекта.
Итак после перезапуска проекта в его корне возникла папка mariadb-init. Попытался в нее положить дамп БД. Вышло через sudo.
~/Projects/local/myproject/mariadb-init$ mysql -u nafanya -pnafanya -f nafanya < 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")
О, так просто положи дамп базы в папку mariadb-init и рестартани докер. Оттуда при старте автоматом импортируется
И ещё похоже, что ты запускаешь mysql не в контейнере, а на своей машине. Это неправильно. Контейнер - это же отдельная операционная система
дамп базы положил в mariadb-init на предидущем комменте. При старте $ docker-compose up -d этот файл не импортируется автоматом в БД сайта.
Как запустить в контейнере?
Зайти в контейнер и запустить
Васёк, ты 13 лет на друпал.ру, а до сих пор как джун. Используешь докер, но даже не пытаешься понять как он работает. Всё надо разжевать и в рот положить
Vasyok, напомни почему ты на доксал не перешел?
"Используешь докер, но даже не пытаешься понять как он работает."
Художнику не нужно знать химический состав краски. Работает - и хорошо. Пытаюсь заставить на Докере работать то, что работало на Опенсервере.
Доксал не пошел у меня.
https://youtu.be/VEIOmxAnoTg
Тут где-то показан заход в контейнер?
Что именно не пошло? Давай попробуем установить доксал. Там многие вещи делаются проще мы сможем тебе что-то подсказать по работе с ним (я уже давно не юзаю d4d и вообще не помню что там и как, а доксал использую каждый день)
https://drupal.ru/docs/veb-masteram-i-vladelcam-saytov/pochemu-ya-vybira...
"А это похоже на баг инсталлятора." - тоже сложно.
Не страшно у меня Виндовс с Опенсервером есть.
С тех пор год прошел, попробуй еще раз установить доксал
Я, кстати, на новой работе уже почти два месяца использую docksal, и могу с уверенностью сказать, что от него вреда больше, чем пользы))) надо будет написать пост об этом.
Напиши, подискутируем)
Может поробую как нить позже. Я ж не обвиняю никого, что у меня что-то не выходит.
Сейчас пробую с D4D.
Итак:
/var/lib/mysql $ mysql -u USER -pPASSWORD -f DATABASE < dump.sql
sh: can't open dump.sql: no such file
Значит все таки mysql запускается, но файл дампа не находит. Куда его ложить?
aria_log.00000001 f35e031addfe.pid ib_logfile0 ibdata1 multi-master.info myproject
aria_log_control ib_buffer_pool ib_logfile1 ibtmp1 mysql performance_schema
Блин где эти файлы? Ну могу их найти?
Ок пробую в лоб:
sh: can't open /home/alex/Projects/local/myproject/dump.sql: no such file
mysql внутри контейнера ничего не знает про путь /home/alex/Projects/local/myproject
Как его запустить снаружи контейнера или куда файл БД положить, чтобы узнал?
Блин, ну ёмое. Вот прикинь, идёшь ты в гости в первый раз, зашёл в незнакомый подъезд. Как определить, есть ли лифт? Посмотреть по сторонам, заглянуть за угол и т.д. Точно так же заходишь в контейнер, и как определить, есть ли в контейнере файл? Посмотри по сторонам! Есть же команда ls -l. Есть pwd, и так далее. В чём проблема воспользоваться этими командами, находясь внутри контейнера?
В комменте выше ж написал "/var/lib/mysql $ ls" - нет там файла дампа. И я не понимаю как его туда положить.
Сейчас так :
volumes:
- ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
# - /path/to/mariadb/data/on/host:/var/lib/mysql # Use bind moun
Последнюю строчку раскомментировать? path/to/mariadb/data/on/host - как определить?
Не определить, а задать. Какую папку напишешь, туда и ляжет база. Как вариант, сделать так:
В таком случае в корне проекта создастся папка mariadb и файлы базы лягут туда. В эту же папку можно вкинуть дамп и его будет видно из контейнера.
PS: когда меняешь волюмы, надо делать docker-compose down, чтобы изменения вступили в силу. Просто рестартануть не поможет, нужно именно удалить контейнер.
Спасибо!
https://wodby.com/docs/1.0/stacks/drupal/local/#database-import-and-export документация вроде тут.
Не могу сказать что прям все понял. Но ты дело подсказал!
Итак чтобы сделать импорт или экспорт БД без средств Друпала, нужно:
В docker-compose.yml
Раскомментировать
- ./mariadb-init:/docker-entrypoint-initdb.d # Place init .sql file(s) here.
Создастся папка mariadb-init. В нее можно положить дамп БД в форматах *.sql, *.sql.gz, *.sh.
Если просто положить файл туда положить - ничего не произойдет.
А вот если
$docker-compose rm
или$docker-compose down
$docker-compose up -d
... дамп БД автоматом импортируется в рабочую БД указанную в .env фале.
Итак для того, чтобы сделать импорт из БД нужно удалить все контейнеры. Я не знаю что у друпалера в этих контейнерах может быть кроме БД. Файлы ж оно не удаляет. Ну вдруг что-то важное.
Поэтому в volumes можно прописать:
- ./mariadb:/var/lib/mysql
При рестарте проекта создастся папка mariadb. В нее ложим наш *.sql файл. Не забываем убрать лишнее из mariadb-init. Вынуть из холодильника бегемота, положить слона.
Заходим в контейнер mysql
$ docker-compose exec mariadb sh
Проверяем есть ли там файл дампа
/var/lib/mysql $ ls
собственно команды экспорта и импорта БД в контейнере работают (и нет нужды удалять контейнеры проекта):
mysql -u USER -pPASSWORD -f DATABASE < dump.sql
https://wodby.com/docs/1.0/stacks/drupal/local/#database-import-and-export - непонятная документация
А в доксале достаточно было выполнить fin db import dump.sql
Вообще, базу всегда лучше держать смонтированной, потому что контейнеры иногда могут удаляться сами собой в результате какого-нибудь сбоя. Это конечно редкость, за 5 лет у меня такое происходило дважды. Но если бы база не была смонтирована, было бы очень обидно.
У нас помимо локалки есть ещё дев сервер, а иногда ещё и стейдж. Если с локальной базой что-то случится, я всегда смогу взять базу с дева
На деве не будет лежать база сайта, который ты начал делать только вчера и ещё даже ни разу не экспортировал конфиги))
Ну это прям
Как понять, что она смонтирована или как смонтировать?
Как смонтировать, я писал выше:
А проверить легко. Внутри папки mariadb будет создана папка с именем базы данных, а в ней будут файлики с названиями таблиц.
понял