Importer et insérer sql.fichier gz dans la base de données avec putty
Je veux insérer un fichier sql.gz
dans ma base de données avec SSH. Que devrais-je faire?
Par exemple, j'ai une base de données à partir de numéros de téléphone dont le nom est numbers.sql.gz
, Quel Est ce type de fichier et comment puis-je importer ce fichier dans ma base de données?
7 réponses
Le fichier est un fichier SQL gzippé (compressé), presque certainement un fichier texte brut avec .sql comme son extension. La première chose que vous devez faire est de copier le fichier sur votre serveur de base de données via scp.. je pense que PuTTY est pscp.exe
# Copy it to the server via pscp
C:\> pscp.exe numbers.sql.gz user@serverhostname:/home/user
Puis SSH dans votre serveur et décompressez le fichier avec gunzip
user@serverhostname$ gunzip numbers.sql.gz
user@serverhostname$ ls
numbers.sql
Enfin, importez - le dans votre base de données MySQL en utilisant l'opérateur de redirection d'entrée <
:
user@serverhostname$ mysql -u mysqluser -p < numbers.sql
Si les chiffres.le fichier sql ne crée pas de base de données mais s'attend à ce que l'on soit déjà présent, vous devrez également inclure la base de données dans la commande:
user@serverhostname$ mysql -u mysqluser -p databasename < numbers.sql
Si vous avez la possibilité de vous connecter directement à votre serveur MySQL depuis l'extérieur, vous pouvez utiliser un client MySQL local au lieu d'avoir à copier et SSH. Dans ce cas, vous auriez juste besoin d'un utilitaire qui peut décompresser .fichiers gz sur Windows. Je crois que 7zip le fait, ou vous pouvez obtenir les binaires gzip/gunzip Pour Windows.
Connectez-vous à votre serveur en utilisant un programme shell comme putty.
Tapez la commande suivante sur la ligne de commande
zcat DB_File_Name.sql.gz | mysql -u username -p Target_DB_Name
Où
DB_File_Name.sql.gz
= chemin complet du sql.fichier gz à importer
username
= votre nom d'utilisateur mysql
Target_DB_Name
= nom de base de données dans lequel vous souhaitez importer la base de données
Lorsque vous appuyez sur entrée dans la ligne de commande, il vous demandera le mot de passe. Entrez votre mot de passe MySQL.
Vous avez terminé!
Sans une étape séparée pour extraire l'archive:
# import gzipped-mysql dump
gunzip < DUMP_FILE.sql.gz | mysql --user=DB_USER --password DB_NAME
J'utilise l'extrait ci-dessus pour réimporter mysqldump-backups, et ce qui suit pour le sauvegarder.
# mysqldump and gzip (-9 ≃ highest compression)
mysqldump --user=DB_USER --password DB_NAME | gzip -9 > DUMP_FILE.sql.gz
Pour un oneliner, sous linux ou cygwin, vous devez effectuer une authentification par clé publique sur l'hôte, sinon ssh demandera un mot de passe.
gunzip -c numbers.sql.gz | ssh user@host mysql --user=user_name --password=your_password db_name
Ou effectuez une redirection de port et connectez-vous au mysql distant en utilisant une connexion "locale":
ssh -L some_port:host:local_mysql_port user@host
Ensuite, faites la connexion mysql sur votre machine locale à localhost: some_port .
La redirection de port fonctionnera aussi à partir de putty , avec l'option-l similaire ou vous pouvez la configurer à partir du panneau des paramètres, quelque part vers le bas sur l'arbre.
Si vous avez scp alors:
Pour déplacer votre fichier du local vers le distant:
$scp /home/user/file.gz user@ipaddress:path/to/file.gz
Pour déplacer votre fichier de distant vers local:
$scp user@ipaddress:path/to/file.gz /home/user/file.gz
Pour exporter votre fichier mysql sans vous connecter au système distant:
$mysqldump -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p databasename | gzip -9 > databasename.sql.gz
Pour importer votre fichier mysql sans vous connecter au système distant:
$gunzip < databasename.sql.gz | mysql -h ipaddressofremotehost -Pportnumber -u usernameofmysql -p
Remarque: assurez-vous d'avoir accès au réseau de l'adresse ip de l'hôte distant
Pour vérifier l'accès au réseau:
$ping ipaddressofremotehost
Si vous avez beaucoup de base de données, il importe et les dumps sont gros (je travaille souvent avec des dumps gzippés multigigabyte).
Il y a ici un moyen de le faire à l'intérieur de 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
Le seul avantage que cela a sur
zcat db1.sql.gz | mysql -u root -p
Est que vous pouvez facilement faire plusieurs sans entrer le mot de passe beaucoup de fois.
Si le vidage mysql était un .fichier gz, vous devez gunzip pour décompresser le fichier en tapant $ gunzip mysqldump.SQL.gz
Cela décompressera le .fichier gz et va simplement stocker mysqldump.sql dans le même emplacement.
Saisissez la commande suivante pour importer le fichier de données sql:
$ mysql - u username-P-H localhost test-database