Bahkan mengabaikan sisi gzip dari pertanyaan, panah Anda menunjuk ke arah yang salah ...
Matt Fletcher
Jawaban:
238
zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database
>akan menulis output dari mysqlperintah stdoutke dalam file myfile.sql.gzyang kemungkinan besar tidak seperti yang Anda inginkan. Selain itu, perintah ini akan meminta Anda untuk kata sandi "root" pengguna MySQL.
Sebagai praktik keamanan yang baik, saya akan meletakkan kata sandi saya di baris perintah, saya akan membiarkan mysql memintanya.
Prof. Moriarty
9
Atau bahkan lebih baik: buat ~/.my.cnfdengan kredensial. ;)
joschi
5
Sebagai @Prof. Moriarty menjelaskan, Anda dapat memodifikasi perintah untuk tidak menggunakan kata sandi via zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database. Itu akan tahu parameter terakhir adalah database yang ingin Anda gunakan, bukan kata sandi Anda.
bafromca
6
Untuk sedikit mengoreksi komentar Prof.Moriarty, praktik keamanan yang baik adalah dengan tidak meletakkan kata sandi saya di baris perintah (di mana itu akan disimpan dalam sejarah, atau dilihat dari balik bahu Anda), dan biarkan MySQL yang memintanya. Bendera -p saja akan menyebabkan MySQL bertanya pada prompt untuk kata sandi.
George
4
+1 untuk sesuatu yang membuat dump database terkompresi
Dmitri DB
82
Untuk menampilkan bilah progres saat mengimpor file sql.gz, unduh pvdan gunakan yang berikut:
pv mydump.sql.gz | gunzip | mysql -u root -p
Di CentOS / RHEL, Anda dapat menginstal pv dengan yum install pv.
pvtampaknya berada di repo Ubuntu juga (setidaknya dalam 12,04 LTS itu), tetapi sekali lagi yang perlu Anda lakukan sudo apt-get install pvuntuk mendapatkannya. Terima kasih Banjer, ini sempurna untuk impor basis data besar!
toon81
Saya harus menjalankan pv mydump.sql.gz | gunzip | mysql -u root my_database_name. Itu karena saya mengimpor tabel dan saya tidak memiliki set kata sandi untuk pengguna root saya
Cristiano Mendonça
Di MAC,brew install pv
skor
54
Cara paling sederhana adalah dengan unzip file database sebelum mengimpor. Juga seperti yang disebutkan oleh @Prof. Moriarty Anda tidak harus menentukan kata sandi dalam perintah (Anda akan diminta kata sandi). Perintah ini yang diambil dari webcheatsheet akan di-unzip dan mengimpor database dalam sekali jalan:
Juga, mydb perlu dibuat sebelum mengimpor. Ini tidak membuat db untuk Anda.
Siddhartha
saya menemukan piping saya gunzippada file terkompresi 10GB menyebabkan impor saya membeku. tidak yakin apakah itu karena kendala memori atau sesuatu tetapi saya akan melakukan kesalahan di sisi melakukan satu langkah pada suatu waktu di masa depan.
Ryan Tuck
@RyanTuck Itu mendorong batas proses semacam ini :)
icc97
@Siddhartha Itu tergantung pada file dump sql. Terkadang mereka termasuk membuat pernyataan basis data.
Periksa juga apakah ada pernyataan USE dalam file SQL. Menentukan database pada baris perintah tidak menjamin bahwa data berakhir di sana jika tujuan yang berbeda ditentukan dalam file SQL.
Anda hanya perlu untuk memperpanjang perintah seperti: pv mydump.sql.gz | gunzip | mysql -u root -pyour_database. Jawaban yang diterima menggunakan pendekatan ini.
bafromca
1
Untuk file terkompresi bzip2 (.sql.bz2), gunakan:
bzcat <file> | mysql -u <user> -p <database>
ATAU
pv <file> | bunzip2 | mysql -u <user> -p <database>
Jawaban:
>
akan menulis output darimysql
perintahstdout
ke dalam filemyfile.sql.gz
yang kemungkinan besar tidak seperti yang Anda inginkan. Selain itu, perintah ini akan meminta Anda untuk kata sandi "root" pengguna MySQL.sumber
~/.my.cnf
dengan kredensial. ;)zcat /path/to/file.sql.gz | mysql -u 'root' -p your_database
. Itu akan tahu parameter terakhir adalah database yang ingin Anda gunakan, bukan kata sandi Anda.Untuk menampilkan bilah progres saat mengimpor file sql.gz, unduh
pv
dan gunakan yang berikut:Di CentOS / RHEL, Anda dapat menginstal pv dengan
yum install pv
.Di Debian / Ubuntu
apt-get install pv
.Di MAC,
brew install pv
sumber
pv
tampaknya berada di repo Ubuntu juga (setidaknya dalam 12,04 LTS itu), tetapi sekali lagi yang perlu Anda lakukansudo apt-get install pv
untuk mendapatkannya. Terima kasih Banjer, ini sempurna untuk impor basis data besar!brew install pv
Cara paling sederhana adalah dengan unzip file database sebelum mengimpor. Juga seperti yang disebutkan oleh @Prof. Moriarty Anda tidak harus menentukan kata sandi dalam perintah (Anda akan diminta kata sandi). Perintah ini yang diambil dari webcheatsheet akan di-unzip dan mengimpor database dalam sekali jalan:
sumber
gunzip
pada file terkompresi 10GB menyebabkan impor saya membeku. tidak yakin apakah itu karena kendala memori atau sesuatu tetapi saya akan melakukan kesalahan di sisi melakukan satu langkah pada suatu waktu di masa depan.Jika Anda mendapatkan kesalahan dari
zcat
, di mana pesan kesalahan berisi nama file dengan akhiran ekstra.Z
, maka coba gunakangzcat
sebagai gantinya, seperti yang dijelaskan di https://stackoverflow.com/questions/296717/zcat-wont-unzip-files-properlysumber
Di macOS, saya menggunakan ini:
Masukkan kata sandi Anda, dan voila!
sumber
Periksa juga apakah ada pernyataan USE dalam file SQL. Menentukan database pada baris perintah tidak menjamin bahwa data berakhir di sana jika tujuan yang berbeda ditentukan dalam file SQL.
sumber
pv mydump.sql.gz | gunzip | mysql -u root -p
your_database
. Jawaban yang diterima menggunakan pendekatan ini.Untuk file terkompresi bzip2 (.sql.bz2), gunakan:
ATAU
untuk melihat bilah kemajuan.
sumber
Anda dapat menggunakan
-c, --stdout, --to-stdout
opsigunzip
perintahsebagai contoh:
sumber