Я пытаюсь напрямую импортировать сжатый файл SQL в mysql. Это правильный путь?
mysql -uroot -ppassword mydb > myfile.sql.gz
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database
>
напишет вывод mysql
командовать stdout
в файл myfile.sql.gz
что, скорее всего, не то, что вам нужно. Кроме того, эта команда запросит у вас пароль пользователя MySQL «root».
Чтобы отобразить индикатор выполнения при импорте файла sql.gz, загрузите pv
и используйте следующее:
pv mydump.sql.gz | gunzip | mysql -u root -p <database name>
В CentOS / RHEL вы можете установить pv с помощью yum install pv
.
В Debian / Ubuntu apt-get install pv
.
В MAC brew install pv
Самый простой способ - распаковать файл базы данных перед импортом. Также как упоминалось @ Проф. Мориарти Вам не следует указывать пароль в команде (вам будет предложено ввести пароль). Эта команда взята из веб-таблица разархивирует и импортирует базу данных за один раз:
gunzip < myfile.sql.gz | mysql -u root -p mydb
Если вы получите сообщение об ошибке zcat
, в котором сообщение об ошибке содержит имя файла с дополнительным суффиксом .Z
, затем попробуйте использовать gzcat
вместо этого, как описано в https://stackoverflow.com/questions/296717/zcat-wont-unzip-files-properly
В macOS я использовал это:
zcat < [Database].sql.gz | mysql -u root -p [Database Name in MySQL]
Введите свой пароль и вуаля!
Также проверьте, есть ли в файле SQL какой-либо USE-оператор. Указание базы данных в командной строке не гарантирует, что данные попадут туда, если в файле SQL указано другое место назначения.
Для bzip2 сжатые файлы (.sql.bz2), используйте:
bzcat <file> | mysql -u <user> -p <database>
ИЛИ
pv <file> | bunzip2 | mysql -u <user> -p <database>
чтобы увидеть индикатор выполнения.
Ты можешь использовать -c, --stdout, --to-stdout
вариант gunzip
команда
например:
gunzip -c file.sql.gz | mysql -u root -p database
Для экспорта в .sql.qz команда: -
mysqldump -u имя пользователя -p база данных | gzip> database.sql.gz
Для импорта файла .sql.qz команда: -
gunzip <database.sql.gz | mysql -u usrname -p новая база данных
Шайлеш Тапа
Допустим, вам нужно заполнить user_data с помощью mysql, попробуйте следующее:
export DEBIAN_FRONTEND=noninteractive \
apt-get update -yq
dpkg -l | grep mysql-server || (echo "Installing MySQL..." \
&& apt-get install -yq mysql-server \
&& echo -e "\n[mysqld]\nbind-address=0.0.0.0\nskip-name-resolve=1" | tee -a /etc/mysql/my.cnf \
&& aws s3 cp --quiet s3://your-bucket/mysqldump_all_databases.sql.gz - | zcat | mysql -uroot\
&& systemctl restart mysql)
На MacOS Я использовал следующий однострочный файл без необходимости устанавливать дополнительные программы, кроме самого клиента MySQL.
$ cat /path/to/file.sql.gz | gzip -d | mysql -u root <db_name>
Первая команда, cat
, распечатывает файл. Его вывод, содержимое файла, отправляется как ввод для следующей команды, gzip
. gzip
с -d
опция распаковывает переданный ему ввод и выводит результат, который, наконец, используется как ввод для клиента MySQL, mysql
программа. Вывод -> отправка ввода доставляется нам |
(pipe) оператор в bash и других оболочках.
Этот сценарий также можно использовать в некоторых популярных дистрибутивах Linux, таких как Ubuntu. Я не уверен gzip
всегда в наличии. Но его можно легко установить, если нет, с помощью:
$ sudo apt install gzip