Importieren Sie die Datei sql.gz und fügen Sie sie mit putty in die Datenbank ein

68

Ich möchte sql.gzmit SSH eine Datei in meine Datenbank einfügen . Was soll ich machen?

Zum Beispiel habe ich eine Datenbank mit Telefonnummern, deren Name lautet numbers.sql.gz. Was ist dieser Dateityp und wie kann ich diese Datei in meine Datenbank importieren?

Babak Faghihian
quelle

Antworten:

58

Die Datei ist eine komprimierte (komprimierte) SQL-Datei, mit ziemlicher Sicherheit eine reine Textdatei mit der Erweiterung .sql. Das erste, was Sie tun müssen, ist die Datei über scp auf Ihren Datenbankserver zu kopieren. Ich denke, PuTTYs ist pscp.exe

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

Dann SSH in Ihren Server und dekomprimieren Sie die Datei mit gunzip

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

numbers.sql

Importieren Sie es schließlich mit dem Eingabeumleitungsoperator in Ihre MySQL-Datenbank <:

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

Wenn die Datei numbers.sql keine Datenbank erstellt, aber erwartet, dass bereits eine vorhanden ist, müssen Sie die Datenbank ebenfalls in den Befehl aufnehmen:

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

Wenn Sie die Möglichkeit haben, von außerhalb eine direkte Verbindung zu Ihrem MySQL-Server herzustellen, können Sie einen lokalen MySQL-Client verwenden, anstatt kopieren und SSH ausführen zu müssen. In diesem Fall benötigen Sie lediglich ein Dienstprogramm, mit dem Sie .gz-Dateien unter Windows dekomprimieren können. Ich glaube, 7zip tut dies, oder Sie können die gzip / gunzip-Binärdateien für Windows erhalten.

Michael Berkowski
quelle
2
Das ist eine zu alte Methode und erfordert mehrere Schritte. Bitte folgen Sie der Antwort von @seshu, um es einfach zu erledigen.
Faisal Sarfraz
122

Melden Sie sich mit einem Shell-Programm wie putty bei Ihrem Server an.

Geben Sie den folgenden Befehl in die Befehlszeile ein

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

wo

DB_File_Name.sql.gz = vollständiger Pfad der zu importierenden sql.gz-Datei

username = Ihr MySQL-Benutzername

Target_DB_Name = Datenbankname, in den Sie die Datenbank importieren möchten

Wenn Sie in der Befehlszeile die Eingabetaste drücken, werden Sie zur Eingabe des Kennworts aufgefordert. Geben Sie Ihr MySQL-Passwort ein.

Du bist fertig!

Seshu
quelle
9
Dies ist die beste Antwort, wenn Sie vermeiden möchten, Speicherplatz (und Zeit) zu verschwenden.
Hafichuk
Das war eine große Hilfe für mich
Zasman
@hafichuk importiert aus gz-Datei ist schneller als Daten direkt aus SQL-Datei zu importieren?
Daudichya
@daudichya Im Allgemeinen gilt: Je weniger Festplattenoperationen Sie ausführen müssen,
desto
53

Ohne einen separaten Schritt zum Extrahieren des Archivs:

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

Ich verwende das obige Snippet, um mysqldump-Backups erneut zu importieren, und das folgende, um es zu sichern.

# mysqldump and gzip (-9 ≃ highest compression)
mysqldump --user=DB_USER --password DB_NAME | gzip -9 > DUMP_FILE.sql.gz
Feeela
quelle
3
@Wasim Auf Version ohne PASSWORDBefehl zurückgesetzt. Passwörter sollten nicht direkt in der Kommandozeile angegeben werden, es sei denn, dies ist unbedingt erforderlich. Auf den meisten Systemen werden Shell-Befehle in einer Verlaufsdatei wie gespeichert, .bash_historyund daher werden die direkt im Befehl angegebenen Kennwörter auch in dieser Verlaufsdatei gespeichert. Wenn Sie das Passwort weglassen, fordert MySQL es interaktiv auf. Wenn Sie die Kennwörter wirklich in den Befehl aufnehmen müssen, sollten Sie den Befehl durch ein Leerzeichen einrücken, um zu verhindern, dass der Befehl im Shell-Verlauf protokolliert wird.
Feeela
4

Für einen Oneliner unter Linux oder Cygwin müssen Sie die Authentifizierung mit öffentlichem Schlüssel auf dem Host durchführen, andernfalls fragt ssh nach dem Kennwort.


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

Oder führen Sie eine Portweiterleitung durch und stellen Sie über eine "lokale" Verbindung eine Verbindung zum Remote-MySQL her:

ssh -L some_port:host:local_mysql_port user@host

Stellen Sie dann die MySQL-Verbindung auf Ihrem lokalen Computer zu localhost: some_port her .

Die Portweiterleitung funktioniert auch von Putty mit der ähnlichen Option -L, oder Sie können sie über das Einstellungsfeld irgendwo unten im Baum konfigurieren.

Raul
quelle
Der Oneliner ist nett, führt jedoch dazu, dass das Datenbankkennwort in Ihrem Befehlsverlauf angezeigt wird, was im Allgemeinen nicht sicher ist.
halfpastfour.am
es sei denn , er würde es verwenden , --defaults-fileanstatt des Passwortes auf der Kommandozeile
Scones
2

Wenn Sie scp haben, dann:

So verschieben Sie Ihre Datei von lokal auf remote:

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

So verschieben Sie Ihre Datei von remote nach lokal:

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

So exportieren Sie Ihre MySQL-Datei, ohne sich beim Remote-System anzumelden:

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

So importieren Sie Ihre MySQL-Datei, ohne sich beim Remote-System anzumelden:

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

Hinweis: Stellen Sie sicher, dass Sie Netzwerkzugriff auf die IP-Adresse des Remote-Hosts haben

So überprüfen Sie den Netzwerkzugriff:

$ping ipaddressofremotehost
Sarathkm
quelle
0

Wenn Sie viele Datenbanken haben, die importiert werden und die Dumps groß sind (ich arbeite oft mit Multigigabyte-Gzipped-Dumps).

Hier gibt es eine Möglichkeit, dies in MySQL zu tun.

$ 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

Der einzige Vorteil, den dies gegenüber hat

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

ist, dass Sie leicht mehrere machen können, ohne das Passwort oft einzugeben.

rgammans
quelle
0

Wenn der MySQL-Speicherauszug eine GZ-Datei war, müssen Sie gunzip verwenden, um die Datei zu dekomprimieren, indem Sie $ gunzip mysqldump.sql.gz eingeben

Dadurch wird die GZ-Datei dekomprimiert und nur mysqldump.sql am selben Speicherort gespeichert.

Geben Sie den folgenden Befehl ein, um eine SQL-Datendatei zu importieren:

$ mysql -u Benutzername -p -h localhost Testdatenbank <mysqldump.sql Passwort: _

Raj Kumar
quelle
0

Erstellen einer Dump-Datei SQL.gz auf dem aktuellen Server

$ 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

Optional: Befehlsargumente für die Verbindung

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

Importieren der oben erstellten Dumpfile auf einen anderen Server

$ 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;"

Optional: Befehlsargumente für die Verbindung

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

mysql: [Warnung] Die Verwendung eines Kennworts auf der Befehlszeilenschnittstelle kann unsicher sein. 1.0GiB 00:06:51 [8.05MiB / s] [<=>]

Die optionalen Softwarepakete sind hilfreich, um Ihre Datenbank-SQL-Datei schneller zu importieren

  • mit einer Fortschrittsansicht (pv)
  • Paralleles Gzip (pigz / unpigz) zu parallelen gzip / gunzip-Dateien

zum schnelleren Zippen der Ausgabe

rjt1224
quelle