sql.gzファイルをデータベースにロードするにはどうすればよいですか?(インポート)


150

gzip圧縮された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これはおそらくあなたが望むものではありません。さらに、このコマンドは、MySQLユーザー「root」のパスワードの入力を求めます。


15
セキュリティを確保するために、コマンドラインにパスワードを入力し、mysqlにパスワードを要求させます。
モリアーティ教授

9
またはさらに良い:~/.my.cnf資格情報で作成します。;)
joschi

5
@Profとして Moriartyの説明では、を介してパスワードを使用しないようにコマンドを変更できますzcat /path/to/file.sql.gz | mysql -u 'root' -p your_database。最後のパラメーターは、パスワードではなく、使用したいデータベースであることがわかります。
bafromca

6
@ Prof.Moriartyのコメントをわずかに修正するに、パスワードをコマンドライン(履歴に保存したり、肩越しに表示したりする)にパスワードを入れないようにし、MySQLに要求させます。-pフラグを単独で使用すると、MySQLはパスワードの入力を求められます。
ジョージ

4
+1いまいましいデータベースダンプを圧縮したままにしておくもの
Dmitri DB

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
pvUbuntuリポジトリにも含まれているようです(少なくとも12.04 LTSではそうです)が、再度sudo apt-get install pv取得する必要があります。Banjerのおかげで、これは大きなデータベースのインポートに最適です!
toon81

pv mydump.sql.gzを実行する必要がありました| gunzip | mysql -u root my_database_name。私はテーブルをインポートしたと私は私のrootユーザのために設定したパスワードを持っていないので、それはだった
クリスティアーノMendonça

MACでは、brew install pv
スコア

54

最も簡単な方法は、インポートする前にデータベースファイルを解凍することです。また、@ Profが述べたように。Moriartyでは、コマンドでパスワードを指定しないでください(パスワードの入力を求められます)。webcheatsheetから取得したこのコマンドは、データベースを一度に解凍してインポートします。

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

1
また、インポートする前にmydbを作成する必要があります。これはあなたのためにデータベースを作成しません。
シッダールタ

gunzip10GBの圧縮ファイルにパイピングすると、インポートがフリーズします。それがメモリの制約なのか何かに起因するものなのかはわかりませんが、将来は一度に1つのステップを実行する側でエラーになります。
ライアンタック

@RyanTuckこれは、この種のプロセスの限界を押し上げています:)
icc97

@Siddharthaこれは、SQLダンプファイルに依存します。データベース作成ステートメントが含まれることもあります。
ルービー

@roobyは理にかなっています。
シッダールタ


5

macOSでは、これを使用しました。

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

パスワードを入力してください。


4

SQLファイルにUSE文があるかどうかも確認してください。コマンドラインでデータベースを指定しても、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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.