Как импортировать дамп SQL большого или среднего размера в Mysql / MariaDB с помощью докера - PullRequest
1 голос
/ 16 октября 2019

Я новичок в Docker и хотел создать контейнер MariaDB. При поднятии контейнера я хотел импортировать дамп SQL размером 50 МБ. Я использую следующий файл создания Docker, который в настоящее время занимает более 1 часа, чтобы импортировать дамп SQL.

services:
  mariadb:
    image: mariadb:10.1
    container_name: mariadb
    volumes:
      - ./mountedVolume/dbvolume:/var/lib/mysql
      - ./webAppDatabase/dctdatabase/appDB.sql:/docker-entrypoint-initdb.d/appDB.sql
    command: --max_allowed_packet=500M      
    environment:
      MYSQL_ROOT_PASSWORD: root123
    ports:
      - "3306:3306"

Я пытался использовать следующие настройки Mysql, прежде чем импортировать дамп SQL

SET @OLD_AUTOCOMMIT=@@AUTOCOMMIT, AUTOCOMMIT = 0;
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS = 0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS = 0;

После импорта дампа SQL я сбросил значения

SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
SET AUTOCOMMIT = @OLD_AUTOCOMMIT;
COMMIT;

Но вышеНастройки не помогли. Я также использовал решение, размещенное по ссылке , но оно не помогло.

Я пытался разделить файлы SQL на более мелкие куски и импортировать его в контейнер MariaDB, но он занимал ~в то же время

Я просто хотел импортировать ~ 50 МБ дампа SQL за меньшее время, я перепробовал все возможные способы, доступные в Интернете, но ни одно из решений не помогло мне сократить время. Пожалуйста, дайте мне знать, если есть обходной путь.

1 Ответ

0 голосов
/ 22 октября 2019

После долгих поисков у меня есть решение. слышу, что я буду объяснять 3 различных способа импорта / экспорта баз данных Mysql / MariaDB со статистикой производительности .

Традиционный способ импорта дампа SQL занимает много времениимпортировать данные, потому что сначала нужно создать таблицы, а затем импортировать данные в последовательном порядке! Но все же производительность можно улучшить, если разделить оператор (ы) CREATE / INSERT в двух разных файлах и выполнить их. Это только немного улучшит производительность, чем традиционный способ импорта.

Чтобы немного повысить производительность, мы можем пойти на Импорт / Экспорт дамп SQL в формате gz !!!.

Пример:

Для экспорта БД:

mysqldump -u [user] -p [DATA_BASE_NAME] | gzip > [SQL_FILE_DUMP.sql.gz]   

Для импорта БД:

gunzip < [SQL_FILE_DUMP.sql.gz]  | mysql -u [user] -p[password] [DATA_BASE_NAME]

Чтобы увеличить импорт / экспортпроизводительность, которую мы должны сделать для получения снимка Mysql / MariaDB из каталога / var / lib / mysql !!!.

[Примечание: с тех пор я использую InnoDB таблиц. Я не экспериментировал с другими механизмами БД и нашел решение в одном из блогов ]

Для экспорта БД:

docker run --rm --volumes-from mariadb carinamarina/backup backup --source /var/lib/mysql/ --stdout --zip > db-data-volume.tar.gz

Для импорта БД:

docker run --rm --interactive --volumes-from mariadb carinamarina/backup restore --destination /var/lib/mysql/ --stdin --zip < db-data-volume.tar.gz

Тестовый случай Статистика для импорта ~ 50 МБ данных Mysql / MariaDB:

___Method_______________Size_____________Time Taken in minits_____________

Traditional way         50mb                  50 min

gzip / .gz              50mb                  29 min        

/var/lib/mysql/         50mb                  0.2 min or 20 seconds  

[Примечание: тестовые случаи выполняются в Ubuntu 14.04, процессоре Intel® Core ™ i5-3470 с 4 ГБ оперативной памяти. Производительность может быть улучшена в системах высшего класса]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...