用腻子导入sql.gz文件并将其插入数据库


68

我想sql.gz使用SSH将文件插入数据库。我该怎么办?

例如,我有一个来自电话号码的数据库,名称为numbers.sql.gz,这种文件是什么类型?如何将这个文件导入数据库?

Answers:


58

该文件是gzip(压缩)SQL文件,几乎可以肯定是一个以.sql为扩展名的纯文本文件。您需要做的第一件事是通过scp将文件复制到数据库服务器。我认为PuTTY是pscp.exe

# Copy it to the server via pscp
C:\> pscp.exe numbers.sql.gz user@serverhostname:/home/user

然后SSH到您的服务器并使用以下命令解压缩文件 gunzip

user@serverhostname$  gunzip numbers.sql.gz
user@serverhostname$  ls 

numbers.sql

最后,使用<输入重定向操作符将其导入您的MySQL数据库:

user@serverhostname$  mysql -u mysqluser -p < numbers.sql

如果numbers.sql文件未创建数据库,但希望已经存在一个数据库,则还需要在命令中包括该数据库:

user@serverhostname$  mysql -u mysqluser -p databasename < numbers.sql

如果您能够从外部直接连接到MySQL服务器,则可以使用本地MySQL客户端,而不必进行复制和SSH。在这种情况下,您只需要可以在Windows上解压缩.gz文件的实用程序。我相信7zip可以这样做,或者您可以获取Windows的gzip / gunzip二进制文件


2
那太旧了,需要多个步骤。请按照@seshu的回答进行操作。
Faisal Sarfraz

122

使用诸如腻子之类的Shell程序登录到服务器。

在命令行中键入以下命令

zcat DB_File_Name.sql.gz | mysql -u username -p Target_DB_Name

哪里

DB_File_Name.sql.gz =要导入的sql.gz文件的完整路径

username =您的mysql用户名

Target_DB_Name =您要在其中导入数据库的数据库名称

当您在命令行中按Enter键时,它将提示您输入密码。输入您的MySQL密码。

大功告成!


9
如果要避免浪费磁盘空间(和时间),这是最佳答案。
hafichuk 2013年

这对我有很大帮助
zasman

@hafichuk从gz文件导入要比直接从sql文件导入数据快吗?
daudichya

@daudichya通常,您需要做的磁盘操作越少越好
hafichuk

53

没有提取存档的单独步骤:

# import gzipped-mysql dump
gunzip < DUMP_FILE.sql.gz | mysql --user=DB_USER --password DB_NAME

我使用上面的代码片段重新导入mysqldump-backups,然后使用以下代码对其进行备份。

# mysqldump and gzip (-9 ≃ highest compression)
mysqldump --user=DB_USER --password DB_NAME | gzip -9 > DUMP_FILE.sql.gz

3
@Wasim还原为PASSWORD命令中未包含的版本。除非绝对必要,否则不要直接在命令行上指定密码。在大多数系统上,shell命令都存储在类似的历史文件中.bash_history,因此直接在命令中指定的密码也存储在该历史文件中。如果您忘记了密码,MySQL将以交互方式提示。如果确实需要在命令中包括密码,则应使用空格字符来缩进命令,以防止命令被记录在Shell历史记录中。
Feeela 2015年

4

对于oneliner,在Linux或cygwin上,您需要在主机上进行公钥身份验证,否则ssh将要求输入密码。


gunzip -c numbers.sql.gz | ssh user@host mysql --user=user_name --password=your_password db_name

或者执行端口转发并使用“本地”连接连接到远程mysql:

ssh -L some_port:host:local_mysql_port user@host

然后在本地计算机上与localhost:some_port进行mysql连接。

端口转发也可以使用类似的-L选项从腻子中进行工作,或者您可以在树上某个位置的设置面板中对其进行配置。


oneliner很不错,但是会导致数据库密码显示在命令历史记录中,这通常是不安全的。
halfpastfour.am,2015年

除非他用它--defaults-file代替命令行上的密码
烤饼

2

如果您有scp,则:

要将文件从本地移动到远程:

$scp /home/user/file.gz user@ipaddress:path/to/file.gz 

要将文件从远程移动到本地:

$scp user@ipaddress:path/to/file.gz /home/user/file.gz

在不登录远程系统的情况下导出mysql文件:

$mysqldump -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p  databasename | gzip -9 > databasename.sql.gz

要在不登录到远程系统的情况下导入mysql文件:

$gunzip < databasename.sql.gz | mysql -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p 

注意:确保您可以访问远程主机的ipaddress。

要检查网络访问:

$ping ipaddressofremotehost

0

如果您有很多数据库,则导入并且转储很大(我经常使用千兆字节的Gzip压缩转储)。

这里有一种方法可以在mysql内部完成。

$ mkdir databases
$ cd databases
$ scp user@orgin:*.sql.gz .  # Here you would just use putty to copy into this dir.
$ mkfifo src
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.41-0
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database db1;
mysql> \! ( zcat  db1.sql.gz > src & )
mysql> source src
.
.
mysql> create database db2;
mysql> \! ( zcat  db2.sql.gz > src & )
mysql> source src

唯一的优势

zcat db1.sql.gz | mysql -u root -p 

是您无需多次输入密码即可轻松进行多项操作。


0

如果mysql dump是.gz文件,则需要通过输入$ gunzip mysqldump.sql.gz来解压缩文件。

这将解压缩.gz文件,并将mysqldump.sql存储在同一位置。

键入以下命令以导入sql数据文件:

$ mysql -u用户名-p -h本地主机测试数据库<mysqldump.sql密码:_


0

在当前服务器上创建转储文件SQL.gz

$ sudo apt-get install pigz pv

$ pv | mysqldump --user=<yourdbuser> --password=<yourdbpassword> <currentexistingdbname> --single-transaction --routines --triggers --events --quick --opt -Q --flush-logs --allow-keywords --hex-blob --order-by-primary --skip-comments --skip-disable-keys --skip-add-locks --extended-insert --log-error=/var/log/mysql/<dbname>_backup.log | pigz > /path/to/folder/<dbname>_`date +\%Y\%m\%d_\%H\%M`.sql.gz

可选:用于连接的命令参数

--host=127.0.0.1 / localhost / IP Address of the Dump Server
--port=3306

将上面创建的转储文件导入到其他服务器

$ sudo apt-get install pigz pv

$ zcat /path/to/folder/<dbname>_`date +\%Y\%m\%d_\%H\%M`.sql.gz | pv | mysql --user=<yourdbuser> --password=<yourdbpassword> --database=<yournewdatabasename> --compress --reconnect --unbuffered --net_buffer_length=1048576 --max_allowed_packet=1073741824 --connect_timeout=36000 --line-numbers --wait --init-command="SET GLOBAL net_buffer_length=1048576;SET GLOBAL max_allowed_packet=1073741824;SET FOREIGN_KEY_CHECKS=0;SET UNIQUE_CHECKS = 0;SET AUTOCOMMIT = 1;FLUSH NO_WRITE_TO_BINLOG QUERY CACHE, STATUS, SLOW LOGS, GENERAL LOGS, ERROR LOGS, ENGINE LOGS, BINARY LOGS, LOGS;"

可选:用于连接的命令参数

--host=127.0.0.1 / localhost / IP Address of the Import Server
--port=3306

mysql:[警告]在命令行界面上使用密码可能不安全。1.0GiB 00:06:51 [8.05MiB / s] [<=>]

可选软件包有助于更快地导入数据库SQL文件

  • 带有进度视图(PV)
  • 并行将gzip(pigz / unpigz)转换为gzip / gunzip文件

用于更快地压缩输出

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.