inqfen
15.01.2019
21:39:36
Ну у меня ext4
George
15.01.2019
21:39:40
помимо ext4 на убунтах
короче, твой тезис не верен
inqfen
15.01.2019
21:39:46
Что внизу не важно, суть-то та же
Google
inqfen
15.01.2019
21:39:53
George
15.01.2019
21:39:59
и я не предлагал хранить БД в эфемерной ФС
(это только для дева... )
inqfen
15.01.2019
21:40:14
Ты в любом случае над фс наворачиваешь еще одну фс, поверх
И оно ну никак не может так же по скорости работать)
George
15.01.2019
21:41:29
я завис... думаю... нет. ты неправ
5% потеряем на системные вызовы, но вольюмы явно имеют приоритет, поэтому ядро может их мимо оверлейфс маршрутизировать в саму ФС хостовой машины на уровне сисколлов
inqfen @stef_kkk мне приятно с вами пообщаться, коллеги. ??? Но надо спать идти.
inqfen
15.01.2019
21:43:26
Надо написать скрипт, который будет быстро срать в базу
И просто сравнить
Stefan
15.01.2019
21:44:09
George
15.01.2019
21:46:35
Google
inqfen
15.01.2019
21:46:51
Споке
Stefan
15.01.2019
22:21:31
Споке
балуюсь пока на таком уровне и чет застрял на докеровских приколах. у меня вольюм вот есть, почему когда я вношу туда новую базу, то докер на изменение эти никак не реагирует? даже после рестарта
version: '3'
services:
mysql:
container_name: mysql_server
image: mysql:5.7
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=yes
- MYSQL_DATABASE=first_db
- MYSQL_USER=user1
- MYSQL_PASSWORD=111
volumes:
- ./databases.sql:/docker-entrypoint-initdb.d/databases.sql
ports:
- 3306:3306
inqfen
15.01.2019
22:22:11
инит скрипт смотрит, что бд в нем уже есть и не создает новую
эта бд которая тут описана - дефолтная так сказать
вторую создаешь через SQL уже
Stefan
15.01.2019
22:22:44
так я думал можно через этот же файл( в инит если
inqfen
15.01.2019
22:23:15
Нет, тут создается только дефолтная
Stefan
15.01.2019
22:23:23
типо так
CREATE DATABASE IF NOT EXISTS second_db;
GRANT ALL PRIVILEGES ON second_db.* TO 'user2' identified by '111';
CREATE DATABASE IF NOT EXISTS third_db;
GRANT ALL PRIVILEGES ON third_db.* TO 'user3' identified by '111';
CREATE DATABASE IF NOT EXISTS fourth_db;
GRANT ALL PRIVILEGES ON fourth_db.* TO 'user4' identified by '111';
inqfen
15.01.2019
22:23:37
Дальше через workbench или консоль уже, как и с обычным субд
Инит скрипт что-то создает только если базы вообще нет
Если есть, то он бд не трогает
Stefan
15.01.2019
22:25:09
ага
так я хочу узнать, учитывая что этот файл с созданием баз как вольюм маунтится в докер в инит ентрипоинт, если я буду создавать новую базу в этом файле, то докер никак её не увидит? или я просто что-то не так делаю?
inqfen
15.01.2019
22:25:22
не понял
Смотри, у субд есть директория, где он ищет базы
Если там есть база и она не битая - он ее подхватывает
Неважно вообще докер это или нет
Докер тут не при чем
Представь себе, что ты в обычном mysql создаешь базы
Google
Stefan
15.01.2019
22:29:50
не понял
смотри, идея такая, чтоб не заходить в контейнер каждый раз, хочу просто по мере необходимости добавлять строки с созданием баз
у меня вот имейдж мускула
с файлом database.sql в котором описано создание баз(выше скинул выхлоп файла), этот файл маунтится в докер образ, в /docker-entrypoint-initdb.d
соответсвенно при первом запуске компоуза с этими всеми делами, базы созданы всё ок
но если я вношу какую-то новую базу в файл databases.sql, то она не создается в мускуле, даже после рестарта контейнера, вот и хотел прояснить почему
inqfen
15.01.2019
22:37:38
Ну так в контейнере в /var/lib/mysql должна быть база
А ее нет
Stefan
15.01.2019
22:38:03
видать это из-за того что оно в init лежит, что при первой инициализации и срабатывает
inqfen
15.01.2019
22:38:09
А, понял, прочитал криво
Stefan
15.01.2019
22:38:36
ща попробую
inqfen
15.01.2019
22:40:59
Там надо entrypoint читать, у меня докер не под рукой
Но вроде да, если там бд есть - он ничего не выполняет
Можешь скрипт посмотреть, он вроде /entrypoint.sh и называется
в самом контейнере
Stefan
15.01.2019
22:53:45
Ну так в контейнере в /var/lib/mysql должна быть база
хех а так тогда ругается
--initialize specified but the data directory has files in it. Aborting.
и контейнер падает, почитал об этой проблеме
The entrypoint script checks if DATADIR/mysql exists. If not, it runs --initialize, but if DATADIR/ contains any files other than ones starting with . or specified with --ignore-db-dir, --initialize will fail with that error message.
So the directory you map to :/var/lib/mysql should either contain an existing MySQL database or be completely empty
боль((
inqfen
15.01.2019
22:57:05
Ну так там явно написано, если в datadir нет mysl и есть файлы не начинающиеся с точки и не установлен - - ignore-db-dir, то он упадёт
Mysql там как я полагаю нет
Это дефолтная база для СУБД и там настройки живут
А что тебе мешает запрос выполнить после старта?
Stefan
15.01.2019
22:59:43
inqfen
15.01.2019
23:00:15
Смотри, ты стартанул контейнер
Что тебе мешает потом хоть из баша на хосте бд создать, когда он уже запущен
Если ты не укажешь mysql db name, то он только деыолтные бд создаст
Stefan
15.01.2019
23:02:06
Google
inqfen
15.01.2019
23:02:10
Mysql и performance schema
Тут докер не при чем
Stefan
15.01.2019
23:02:37
докер не при чем))
при чем мускул
inqfen
15.01.2019
23:02:40
Там обычный mysql внутри
Stefan
15.01.2019
23:02:41
)))
inqfen
15.01.2019
23:03:04
И ты пытаешься его заставить работать без базы с конфигами)
Естественно он падает
Не надо мешать в кучу
Можешь в один файл засунуть docker-compose up - d и скрипт создания бд
Вот тебе 1 файл будет, если так надо
Stefan
15.01.2019
23:11:02
Можешь в один файл засунуть docker-compose up - d и скрипт создания бд
ну допустим с этим я разобрался
а вот каким образом заливать в неё данные? то есть имея дамп на руках
раньше когда я на железках возился с СУБД, то там просто импорт содержимого в созданную ранее базу и всё
а тут че нужно чтоль в контейнер как-то тоже закидывать их и оттуда импортить уже в СУБД?
inqfen
15.01.2019
23:14:44
mysql base -ua -pb < dump.sql
Stefan
15.01.2019
23:15:18
inqfen
15.01.2019
23:15:28
Какая разница как запущен процесс
Изолированно или нет
Работает он одинаково
Stefan
15.01.2019
23:16:24
та я понять хочу сколько движений нужно делать и какойэто всё геморой блиать
Google
Stefan
15.01.2019
23:22:30
Можешь и снаружи если порт опубликовал
cat databases.sql | docker exec -i mysql_server mysql
кстати вот такое вместо башника даже и создает все базы которые я описал внутри, норм тогда и не нужно никуда коннектиться
тоже самое можно и с дампом сделать под конкретную базу
зибиси
inqfen
15.01.2019
23:23:05
Можно, только локально это все неудобно
Stefan
15.01.2019
23:23:45
разве не лучше, когда не нужно лишних движений делать?)
inqfen
15.01.2019
23:24:39
Ну лежит у тебя в гите код, твоим методом надо зайти по ssh именно на этот сервер и именно с этим дампом
Который кстати тоже в идеале и не на сервере должен быть
Stefan
15.01.2019
23:25:23
а если это добавить в один из стейджей в ci/cd системе?))
чтоб тот же слейв дженкинса например сгонял и залил базу
inqfen
15.01.2019
23:26:43
Так он должен это с агента делать
А не ходить куда-то по ssh
Stefan
15.01.2019
23:27:24
inqfen
15.01.2019
23:27:38
Не обязательно
Stefan
15.01.2019
23:27:53
хм, не слышал о другой реализации
inqfen
15.01.2019
23:27:55
Агент может и локально клиент mysql запустить
А если ты ему в джоб напишешь echo "jopa", он куда по ssh пойдёт?
Stefan
15.01.2019
23:29:32
inqfen
15.01.2019
23:30:12
Агент тоже не только по ssh может ходить
Он может и docker build локально сделать например
И все что угодно, там по сути bash юзается
Stefan
15.01.2019
23:31:12
не ну вот с билдом имейджей я так делал
а вот как-то про остальное не задумывался