web-dev-qa-db-fra.com

importation d'un fichier SQL volumineux phpmyadmin

J'essaie d'importer ce fichier SQL dans phpmyadmin et j'ai reçu ce message

#1064 - You have an error in your SQL syntax; 
check the manual that corresponds to your MySQL server version 
for the right syntax to use near 
'<br /> <b>Fatal error</b>: Allowed memory size of 134217728 bytes exhausted (tr' at line 1

Que dois-je faire pour effectuer cette importation?

12
grant tailor

En supposant que vous ne pouvez pas augmenter davantage la taille de la mémoire, il existe deux options.

  • Si vous n'êtes pas familier avec la ligne de commande et que vous voulez vraiment vous en tenir à une importation de style GUI, vous pouvez utiliser BigDump ( http://www.ozerov.de/bigdump/ ). Je l'ai utilisé une fois mais ça fait longtemps. D'après ce dont je me souviens, vous téléchargerez un fichier nommé bigdump.php (avec quelques instructions) et le placerez sur votre serveur Web dans le répertoire avec le fichier de vidage de la base de données MySQL qui est trop volumineux pour être importé via PHPMYADMIN. Ensuite, accédez-y en utilisant votre navigateur - quelque chose comme http://your-website.com/bigdump.php .

  • Si vous connaissez la ligne de commande et utilisez un système basé sur Linux, vous pouvez utiliser du code comme celui-ci:

    mysql -u USERNAME -p DATABASENAME <FILENAME.sql

La base de données et l'utilisateur (avec des privilèges sur la base de données) devront cependant exister avant d'exécuter cette commande. Remarque J'ai copié la commande ci-dessus à partir d'une autre source. Je fais toujours mes vidages et restaurations comme ceci: DUMP: mysqldump -u DB_USER -h DB_Host -pDB_PASSWORD DB_NAME | gzip -9 > DB_NAME.sql.gz RESTAURER: gunzip < PATH_TO_DUMP/DB_NAME.sql.gz | mysql -u DB_USER -pDB_PASSWORD DB_NAME

  • Enfin, et le plus douloureusement, vous pouvez choisir de vider des tables individuelles ou des groupes de tables dans des vidages suffisamment petits. Restaurez ensuite ces vidages individuels un par un via PHPMYADMIN.

Instructions FTP & RESTORE:

Téléchargez FileZilla ici: http://filezilla-project.org/download.php?type=client

En règle générale, vous pouvez FTP sur votre serveur (en particulier un hôte partagé) en utilisant les mêmes identifiant et mot de passe que pour SSH (vous vous connectez en ligne de commande). Assurez-vous simplement de configurer correctement la connexion à votre serveur dans FileZilla.

Une fois connecté, votre chemin par défaut sera probablement votre dossier $ HOME (sur les machines nix). Si vous ne prévoyez pas de faire beaucoup de FTP, jetez simplement ce que vous voulez là-dedans. Vous pouvez toujours le déplacer depuis la ligne de commande.

Si vous transférez par FTP un vidage MySQL dans votre dossier $ HOME, la commande RESTORE pour une base de données nommée mydb et un fichier de vidage db nommé mydb.sql.gz (dans le dossier $ HOME) serait:

gunzip < $HOME/mydb.sql.gz | mysql -u DB_USER -pDB_PASSWORD mydb

où vous auriez évidemment besoin de changer les valeurs DB_USER et DB_PASSWORD en quel utilisateur et mot de passe vous avez configuré pour la base de données.

Rappelles toi:

  • La base de données doit déjà exister (mais être vide) avant l'exécution de la commande RESTORE
  • DB_USER et DB_PASSWORD doivent être configurés pour la base de données avant la commande RESTORE (vous pouvez le faire à partir de l'onglet PHPMYADMIN - Privilèges)
  • Lorsque vous configurez DB_USER à partir de PHPMYADMIN, il autorisera par défaut uniquement DB_USER à accéder à la base de données depuis l'hôte local (le serveur sur lequel la base de données est hébergée). Je suppose que cela convient à votre subvention de situation. Lorsque vous entrez dans des DUMP et des RESTORE plus avancés, vous pouvez le faire à partir d'une autre machine, ce qui n'est pas difficile, mais nécessite quelques informations supplémentaires et DB_USER avec les privilèges appropriés.

FTP la base de données et le restaurer ... étape par étape

  1. Localisez le fichier de vidage MySQL compressé sur votre bureau (exemple: C:\Web\DB\Dumps\mydb.sql.Zip)
  2. Téléchargez et installez FileZilla
  3. Dans FileZilla, allez dans Fichier-> Gestionnaire de site et cliquez sur le bouton Nouveau site (quadrant inférieur gauche de l'interface graphique). Définissez l'hôte sur un domaine (exemple: dest.com) qui réside sur votre serveur DESTINATION. Réglez le protocole sur FTP ou SFTP (cela dépend de votre hébergement, demandez-leur). Définissez l'utilisateur et le mot de passe (exemple: utilisateur = octroi, mot de passe = mot de passe octroi) - si le protocole FTP est SFTP, alors tout ensemble d'informations d'identification de connexion SSH valides devrait fonctionner.
  4. (Dans FileZilla) Cliquez sur Connecter (bouton le plus à gauche en bas)
  5. (Dans FileZilla) Une fois connecté au serveur distant (devrait être votre serveur DESTINATION), utilisez le côté gauche de FileZilla pour naviguer jusqu'au répertoire où se trouve le fichier de vidage que vous avez localisé à l'étape 1. (Le chemin de la machine locale est à l'extrême gauche, à mi-chemin environ et il est étiqueté Site local:. Dans notre exemple, la zone de texte à côté de Site local: lirait C:\Web\DB\Dumps.)
  6. (Dans FileZilla) Localisez le site distant: étiquette directement à droite du site local:.
  7. (Dans FileZilla) Il n'y a aucune raison technique pour laquelle vous ne pouvez pas placer le DB DUMP dans le dossier auquel FileZilla s'ouvre. Il sera probablement par défaut dans votre répertoire $ HOME. Si vous n'avez aucune raison de placer le vidage de la base de données dans un répertoire spécifique, par exemple pour vos propres besoins organisationnels, laissez le chemin d'accès sur le site distant seul. Notez ce chemin (exemple Linux:/usr/grant).
  8. (Dans FileZilla) Localisez le fichier sur votre ordinateur local sur la moitié gauche de FileZilla juste sous l'arborescence affichée sous le site local: étiquette que vous avez trouvée à l'étape 5. Double-cliquez sur ce fichier et FileZilla le FTP sur votre site distant.
  9. Dans PHPMYADMIN sur votre serveur DESTINATION, créez une nouvelle base de données (tapez mydb dans la zone de texte Créer une nouvelle base de données et cliquez sur le bouton Créer).
  10. (Dans PHPMYADMIN) Choisissez mydb dans le menu de gauche.
  11. (Dans PHPMYADMIN) Cliquez sur l'onglet Privilèges (en haut à droite). Une fois sur cette page, cliquez sur Ajouter un nouvel utilisateur.
  12. (Dans PHPMYADMIN-> Privilèges-> Ajouter un nouvel utilisateur) Fournissez un nom d'utilisateur (exemple: mydb_grant) et un mot de passe (exemple: mydb_password). Dans la liste déroulante Hôte, choisissez Local. Assurez-vous que le bouton radio à côté de "Accorder tous les privilèges sur la base de données" est sélectionné. Cliquez ensuite sur Aller (en bas à droite de l'écran).
  13. SSH dans votre serveur DESTINATION.
  14. (Dans votre terminal SSH) Accédez au répertoire que vous avez noté à l'étape 7. En utilisant une commande comme - cd $HOME ou cd /usr/grant. (Sur les machines Linux, $ HOME est une variable d'environnement qui équivaudra à quelque chose comme/usr/grant.)
  15. (Dans votre terminal SSH) Exécutez la commande suivante: gunzip < /usr/grant/mydb.sql.gz | mysql -u mydb_grant -pmydb_password mydb (il n'y a pas d'espace entre -p et le mot de passe car c'est ainsi qu'il doit être, ce n'est pas une faute de frappe).

Une fois cette dernière commande terminée, votre base de données a été restaurée. Je ne recommande pas d'utiliser l'utilisateur DB et le mot de passe que j'ai fournis, remplacez-les simplement par des choix plus sécuritaires.

DUMP et RESTORE sur différents serveurs sans FTP

Si vous souhaitez ignorer le contenu FTP et que cela ne vous dérange pas de refaire le DUMP, vous pouvez le faire de cette façon:

  1. Connectez-vous au serveur DESTINATION (où vous souhaitez que la base de données réside - nous l'appellerons destination.com)
  2. Créez la base de données, l'utilisateur et les privilèges appropriés comme mentionné ci-dessus sur le serveur DESTINATION
  3. Assurez-vous que les privilèges sur le serveur SOURCE permettent à SOURCE_DB_USER d'accéder à la base de données à distance - autorisez l'accès à partir de dest.com ou à partir de% (% - tout le monde et partout s'ils ont le bon nom d'utilisateur et mot de passe)
  4. Sur le serveur DESTINATION, exécutez: mysqldump -u SOURCE_DB_USER -h source.com -pSOURCE_DB_PASSWORD mydb| gzip -9 > $HOME/mydb.sql.gz où source.com est le serveur SOURCE (où réside actuellement la base de données)
  5. Puis (sur le serveur DESTINATION) exécutez: gunzip < $HOME/mydb.sql.gz | mysql -u DEST_DB_USER -pDEST_DB_PASSWORD mydb

Cela devrait être tout ce que vous devez faire pour déplacer la base de données d'un serveur à un autre. Les mises en garde sont que je ne l'ai fait que sur mon propre Ubuntu dédié (avec LAMP standard) et les serveurs VPS de Dreamhost (qui je crois exécutent CentOS mais je peux me tromper).

12
gabe

Vous pouvez:

  • augmenter memory_limit
  • augmenter post_max_size
  • augmenter max_execution_time
  • doit redémarrer Apache après avoir fait tout cela.
  • ou utilisez Big Dump
3
Salman

Votre fichier SQL est-il compressé? J'ai eu ce problème avec un fichier sql zippé de 6 Mo. Je l'ai décompressé dans un fichier sql non compressé de 53 Mo et cela a fonctionné. La décompression du fichier de vidage en cours doit consommer toute la mémoire.

1
Jeremy

si la taille de votre base de données dépasse 128 Mo, divisez votre base de données en plusieurs parties.

Utiliser SQL Dump Splitter logiciel

SQL Dump Splitter est une application de 430 Ko qui donne un contrôle total sur le fractionnement d'énormes bases de données en fichiers SQL plus petits en toute simplicité. Avec SQL Dump Splitter, vous pouvez:

  • Choisissez la taille de chaque morceau
  • Choisissez d'ignorer les commentaires (pour même réduire la taille de la base de données)
  • Automatisez l'activité.
0
Sumit Bijvani

si vous avez un accès ssh au serveur avec mysql, vous pouvez placer un fichier avec le vidage mysql à un endroit, entrez dans la console mysql:

mysql -u myUser myDatabase

Ou si le serveur mysql est sur un emplacement autre que localhost et autorise les connexions non seulement à partir de localhost:

mysql -u myUser -h mysql.example.com myDatabase

Ensuite, il vous sera demandé un mot de passe pour votre utilisateur mysql. Maintenant, vous dans la console mysql. Ici, vous pouvez taper

source ~/mydump.sql;

Vous verrez comment les commandes de votre vidage seront exécutées.

Dans cette méthode, vous ne vous souciez pas des limites de la mémoire php.

0
yas375