Як завантажити файл sql.gz у свою базу даних? (імпорт)


150

Я намагаюся імпортувати gzipped SQL-файл безпосередньо в mysql. Це правильний шлях?

mysql -uroot -ppassword mydb > myfile.sql.gz

14
Навіть ігноруючи gzip сторону питання, ваша стрілка вказує неправильний шлях ...
Метт Флетчер

Відповіді:


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

>запише висновок mysqlкоманди stdoutу файл, myfile.sql.gzякий, швидше за все, не є тим, що потрібно. Крім того, ця команда запропонує ввести пароль користувача "root" користувача MySQL.


15
Як хороша практика безпеки, я ставлю свій пароль в командному рядку, і дозволю mysql запитати його.
Професор Моріарті

9
Або ще краще: створюйте ~/.my.cnfза допомогою облікових даних. ;)
Джоші

5
Як @Prof. Моріарті пояснює, ви можете змінити команду, щоб не використовувати пароль через zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Він буде знати, що останній параметр - це база даних, яку ви хочете використовувати, а не ваш пароль.
bafromca

6
Щоб трохи виправити коментар @ Prof.Moriarty, гарною практикою безпеки було б не ставити мій пароль в командному рядку (де він буде зберігатися в історії або бачитись через ваше плече), а дозволити MySQL попросити цього. Сам прапор -p призведе до того, що MySQL запитає про запит пароля.
Джордж

4
+1 для чогось, що залишає прокляту дамп бази даних стиснутою
Дмитро БД

81

Щоб відобразити панель прогресу під час імпорту файлу 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


2
pvЗдається, він теж є в репості Ubuntu (принаймні, в 12,04 LTS це є), але знову потрібно зробити, sudo apt-get install pvщоб його отримати. Дякую Banjer, це ідеально підходить для великого імпорту бази даних!
toon81

Мені довелося запустити pv mydump.sql.gz | пістолет | mysql -u корінь my_database_name. Це було тому, що я імпортував таблиці, і у мене не встановлено пароль для мого кореневого користувача
Cristiano Mendonça

У MAC,brew install pv
оцінка

54

Найпростіший спосіб - розпакувати файл бази даних перед імпортом. Також, як згадував @Prof. Moriarty, вам не слід вказувати пароль у команді (вам буде запропоновано пароль). Ця команда, взята з веб-листів, розпакує та імпортує базу даних за один раз:

gunzip < myfile.sql.gz | mysql -u root -p mydb

1
Також перед імпортом потрібно створити mydb. Це не створить db для вас.
Сіддхартха

Я виявив, що мій трубопровід 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 вказано інше призначення.


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>

щоб побачити панель прогресу.


0

Можна використовувати -c, --stdout, --to-stdoutопцію gunzipкомандування

наприклад:

gunzip -c file.sql.gz | mysql -u root -p database
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.