@SmartReactorApp

Как сделать дамп большой базы в Mysql на Windows?

Есть большая база (в архиве 7ГБ) по адресу G:\Base\mybase.zip
Mysql последней версии по адресу G:\MySqlWork\mysql.exe
7zip расположение C:\Program Files (x86)\7-Zip\7zFM.exe
Название базы Mysql newBase
Логин root
Пароль 4830

В самом архиве mybase.zip еще порядка 7 архивов форматом .7z, и в каждом архиве 7z - .sql файл.

Как мне с помощью командной строки "на лету" загрузить эти дампы в базу newBase

Вместе с базой идет небольшой readme.txt, в котором указано следующее:
Загружать SQL-дампы в MySQL можно с распаковкой из 7-Zip "на лету" - советую делать именно так, ибо это быстрее и требует меньше свободного места на диске.

Для загрузки данных в MySQL сразу из всех скачанных архивов в текущей папке с архивами используйте команду:
7z x -so "*.7z" | mysql -uЛогин -pПароль ИмяБазы

Под Windows во всех командах нужно указать полные пути до файлов 7z.exe и mysql.exe, заключая их в "двойные кавычки", если пути содержат пробелы.

Таблицы загружаются в MySQL в кодировке UTF-8.


Пробовал множество разных команд типа
"C:\Program Files (x86)\7-Zip\7zFM.exe" x -so G:\FIAS\fias_07.10.19.zip | G:\MySqlWork\mysql.exe -uroot -p 4830
  • Вопрос задан
  • 600 просмотров
Решения вопроса 1
@SmartReactorApp Автор вопроса
Если у вас подобный случай и реально большая база, в файле my.ini лучше изменить директорию хранение баз данных, так как ошибки "командная строка" не напишет и вы как и я можете прождать сутки в ожидании разультата (место на системном диске заканчивается и mysql начинает падать).
Оказалось все просто) я немного неправильно указывал команду, нужно было распаковать основной архив, чтобы внутренние 7 архивов лежали в папке G:\Base\.

В моем случаи - правильная команда будет следующая:
"C:\Program Files (x86)\7-Zip\7z.exe" x -so "*.7z" | G:\MySqlWork\mysql.exe -uroot -p newBase

Данная команда должна выполняться из открытой папки с архивами в командной строке, либо "*.7z" нужно заменить адресом до папки где распакованы архивы (например G:\Base-other\*.7z)

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

Если при дампе будет ошибка ERROR 2006 (HY000) — MySQL server has gone away, открывайте файл my.ini у меня он лежал по адресу C:\ProgramData\MySQL\MySQL Server 8.0\my.ini (по дефолту папка ProgramData скрыта системой) ищите строку max_allowed_packet= и ставьте значение выше ↑ (я поставил 400000М). После перезапустите mysql - я просто перезагрузил ПК, так как не понял как перезагрузить mysql сервер.

Также после ввода команды в командной строке ничего не происходит, а вот глядя на "диспетчер задач" идет нагрузка на ЦП, Оперативную память и Диск. Подключился к базе используя "HeidiSQL" и убедился, что новые таблицы успешно грузятся.

Состояние командной строки после ввода команды
6f9d4d47b3.jpg

Диспетчер задач после ввода команды
f97f0899d0.jpg

P.S. Если у вас подобный случай и реально большая база, в файле my.ini лучше изменить директорию хранения баз данных, так как ошибки "командная строка" не напишет и вы как и я можете прождать сутки в ожидании результата (место на системном диске заканчивается и mysql начинает падать/отключаться).

Коротко, как это сделать:
  1. Открываем my.ini
  2. Находим строку datadir=
  3. Запоминаем ее, точнее путь до папки Data
  4. Переписываем адрес строки на свой путь G:/newBase
  5. Копируем файлы из папки Data (что была указана в переменной datadir=)
  6. Переносим все файлы в новую папку (по новому пути, что указали G:/newBase)
  7. Перезагружаем mysql сервер (либо просто ПК, я так делаю)
  8. Удаляем файлы из старой папки C:\ProgramData\MySQL\MySQL Server 8.0\Data
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
erge
@erge
Примус починяю
Не 7zFM.exe а 7z.exe

Первый это оконный файловый менеджер, второй работает из командной строки

см. опции и ключи запуска:

7-Zip 19.00 (x86) : Copyright (c) 1999-2018 Igor Pavlov : 2019-02-21

Usage: 7z [...] [...] [@listfile]


a : Add files to archive
b : Benchmark
d : Delete files from archive
e : Extract files from archive (without using directory names)
h : Calculate hash values for files
i : Show information about supported formats
l : List contents of archive
rn : Rename files in archive
t : Test integrity of archive
u : Update files to archive
x : eXtract files with full paths


-- : Stop switches and @listfile parsing
-ai[r[-|0]]{@listfile|!wildcard} : Include archives
-ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
-ao{a|s|t|u} : set Overwrite mode
-an : disable archive_name field
-bb[0-3] : set output log level
-bd : disable progress indicator
-bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
-bt : show execution time statistics
-i[r[-|0]]{@listfile|!wildcard} : Include filenames
-m{Parameters} : set compression Method
-mmt[N] : set number of CPU threads
-mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
-o{Directory} : set Output directory
-p{Password} : set Password
-r[-|0] : Recurse subdirectories
-sa{a|e|s} : set Archive name mode
-scc{UTF-8|WIN|DOS} : set charset for for console input/output
-scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
-scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
-sdel : delete files after compression
-seml[.] : send archive by email
-sfx[{name}] : Create SFX archive
-si[{name}] : read data from stdin
-slp : set Large Pages mode
-slt : show technical information for l (List) command
-snh : store hard links as links
-snl : store symbolic links as links
-sni : store NT security information
-sns[-] : store NTFS alternate streams
-so : write data to stdout
-spd : disable wildcard matching for file names
-spe : eliminate duplication of root folder for extract command
-spf : use fully qualified file paths
-ssc[-] : set sensitive case mode
-sse : stop archive creating, if it can't open some input file
-ssw : compress shared files
-stl : set archive timestamp from the most recently modified file
-stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
-stx{Type} : exclude archive type
-t{Type} : Set type of archive
-u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
-v{Size}[b|k|m|g] : Create volumes
-w[{path}] : assign Work directory. Empty path means a temporary directory
-x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
-y : assume Yes on all queries


так же смотрите - mysql, Утилита командной строки

но подозреваю, что все равно не получится, надо указывать какой конкретно файл распаковывать и кидать в stdout, потому что распаковаться могут не в том порядке как надо.

как-то так наверно:
"C:\Program Files (x86)\7-Zip\7z.exe" x -so G:\FIAS\fias_07.10.19.zip sql_file1.sql | G:\MySqlWork\mysql.exe -uroot -p 4830 newBase
"C:\Program Files (x86)\7-Zip\7z.exe" x -so G:\FIAS\fias_07.10.19.zip sql_file2.sql | G:\MySqlWork\mysql.exe -uroot -p 4830 newBase


и так перебрать все по порядку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы