Как загрузить файл sql.gz в мою базу данных? (Импорт)

151

Я пытаюсь импортировать сжатый файл SQL в MySQL напрямую. Это правильный путь?

mysql -uroot -ppassword mydb > myfile.sql.gz
Alex
источник
14
Даже игнорируя gzip-сторону вопроса, ваша стрелка указывает на неправильный путь ...
Мэтт Флетчер,

Ответы:

238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database

>запишет вывод mysqlкоманды stdoutв файл, myfile.sql.gzкоторый, скорее всего, не тот, который вы хотите. Кроме того, эта команда запросит у вас пароль пользователя MySQL «root».

Joschi
источник
15
В качестве хорошей практики безопасности я бы поставил свой пароль в командной строке, я бы разрешил MySQL запросить его.
Профессор Мориарти
9
Или даже лучше: создать ~/.my.cnfс учетными данными. ;)
Йоси
5
Как @Prof. Мориарти объясняет, вы можете изменить команду, чтобы не использовать пароль через zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Он будет знать, что последний параметр - это база данных, которую вы хотите использовать, а не ваш пароль.
Бафромка
6
Чтобы немного исправить комментарий @ Prof.Moriarty, хорошей практикой безопасности было бы не помещать мой пароль в командную строку (где он будет храниться в истории или просматриваться через ваше плечо) и позволять MySQL запрашивать его. Один только флаг -p заставит MySQL запросить пароль.
Джордж
4
+1 за то, что оставляет этот чертов дамп базы данных сжатым
Дмитрий БД
82

Чтобы отобразить индикатор выполнения при импорте файла sql.gz, загрузите pvи используйте следующее:

pv mydump.sql.gz | gunzip | mysql -u root -p

В CentOS / RHEL вы можете установить pv с помощью yum install pv.

В Debian / Ubuntu apt-get install pv.

В MAC, brew install pv

Banjer
источник
2
pvВ репозитории Ubuntu, кажется, тоже (по крайней мере, в 12.04 LTS это так), но опять же, вам нужно сделать это, sudo apt-get install pvчтобы получить его. Благодаря Banjer, это идеально подходит для импорта больших баз данных!
toon81
Я должен был запустить pv mydump.sql.gz | ружье | mysql -u root my_database_name. Это было потому, что я импортировал таблицы, и у меня не установлен пароль для пользователя root
Криштиану Мендонса,
В MAC,brew install pv
оценка
54

Самый простой способ - разархивировать файл базы данных перед импортом. Также как упомянуто @Prof. Мориарти, вы не должны указывать пароль в команде (вам будет предложено ввести пароль). Эта команда, взятая из webcheatsheet , разархивирует и импортирует базу данных за один раз:

gunzip < myfile.sql.gz | mysql -u root -p mydb
icc97
источник
1
Кроме того, mydb необходимо создать перед импортом. Это не создает БД для вас.
Сиддхартха
я обнаружил, что мой трубопровод gunzipв сжатом файле размером 10 ГБ привел к зависанию импорта. не уверен, что это из-за ограничений памяти или чего-то еще, но я бы ошибся, если бы в будущем делал один шаг за раз.
Райан Так
@RyanTuck Это расширяет границы подобных процессов :)
icc97
@Siddhartha Это зависит от файла дампа sql. Иногда они включают в себя создание базы данных операторов.
Роби
@ Rooby это имеет смысл.
Сиддхартха
5

На macOS я использовал это:

zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]

Введите свой пароль, и вуаля!

Касим
источник
4

Также проверьте, есть ли какой-либо оператор USE в файле SQL. Указание базы данных в командной строке не гарантирует, что данные окажутся там, если в файле SQL указано другое место назначения.

ikso
источник
2
Вам просто нужно расширить команду следующим образом: pv mydump.sql.gz | gunzip | mysql -u root -p your_database. Принятый ответ использует этот подход.
Bafromca
1

Для сжатых файлов bzip2 (.sql.bz2) используйте:

bzcat <file> | mysql -u <user> -p <database>

ИЛИ ЖЕ

pv <file> | bunzip2 | mysql -u <user> -p <database>

чтобы увидеть индикатор выполнения.

TimSparrow
источник
0

Вы можете использовать -c, --stdout, --to-stdoutопцию gunzipкоманды

например:

gunzip -c file.sql.gz | mysql -u root -p database
Али Джазайери
источник