Maison  >  Article  >  développement back-end  >  Résumé de PHP+MySQL implémentant l'importation et l'exportation massives de données

Résumé de PHP+MySQL implémentant l'importation et l'exportation massives de données

little bottle
little bottleavant
2019-04-16 13:25:242642parcourir

Il y a quelque temps, il y avait un besoin : transférer certaines données de l'environnement de production vers le serveur de test pour les tests. Comme je n'ai besoin d'importer que les données d'un compte spécifique, j'ai pensé à écrire un script pour assembler les données dans des instructions SQL et les exporter dans des fichiers SQL, puis les transférer sur le serveur de test et les importer dans MySQL. L’imagination est belle, mais le processus est douloureux. Résumons les points suivants.

Traitement des scripts PHP

1 L'idée du script est d'interroger des données de compte spécifiques, de les assembler et de les fusionner en données texte SQL. Il convient de noter ici que la valeur de la requête doit être filtrée, car certains champs contiennent des caractères non autorisés, tels que : ' (guillemet simple), " (guillemet double), ` (le deuxième à partir du coin supérieur gauche de le clavier). Ces symboles sont fusionnés ensemble. Lorsque des instructions SQL sont effectuées, la valeur change car l'autre extrémité de la fermeture est introuvable, ce qui entraîne des problèmes lors de l'assemblage des instructions SQL. J'utilise la fonction str_replace() pour définir ces symboles comme vides.>

2 J'utilise la fonction is_numeri pour déterminer si la valeur est une structure de type numérique. Si c'est le cas, ajoutez "" (double. guillemets), mais il y a un problème avec is_numeri. Certaines valeurs ont la lettre e , elle renvoie également vrai,

C'est en fait un problème, car la valeur. ne peut pas être inséré dans MySQL sans ajouter "". Plus tard, j'ai ajouté les fonctions is_float() et is_string() en même temps pour déterminer si la valeur doit être ajoutée entre guillemets doubles

. 3

. Étant donné que la quantité de données exportées est relativement importante, je l'ai divisée en quatre processus PHP, et un processus exécute 10 000 données utilisateur, ce qui peut faire gagner beaucoup de temps. le texte SQL stocké doit également être distingué, car plusieurs processus peuvent écrire un fichier texte en même temps. Une perte de données s'est produite (je l'ai découvert plus tard et j'ai passé beaucoup de temps à restaurer les données)

4. Utilisez la commande tar -xcvf pour compresser et empaqueter le fichier sql, un fichier 7G. Il peut être compressé à plus de 700 Mo, et l'effet de compression est toujours bon

Tutoriel vidéo PHP

. Importer des données dans MySQL

1

, en raison de la quantité relativement importante de données, j'ai également divisé plusieurs processus pour exécuter les données. J'ai utilisé la source MySQL. commande pour importer ces gros fichiers sql

Le fichier sql contient la base de données use, il n'y a donc pas de base de données use ici

Utilisez la commande source pour importer plusieurs fichiers. un nouveau fichier sou.sql, qui stocke les commandes suivantes
    mysql>source D:/www/sql/data.sql;

Par exemple :

De cette façon, vous pouvez créer un nouveau fichier sou.sql dans une source Il existe également problèmes pendant

 :
    source c:/1.sql;
    source c:/2.sql;

apparaît :

mysql Vous avez un paquet plus gros que 'max_allowed_packet' octets

Après vérification, c'est parce que le volume de données d'une seule table est important, et on pense généralement que MySQL limitera SQL avec une grande quantité de données dans une seule table

Solution :

Modifier la taille max_allowed_packet Solution 1, modification temporaire : entrez la commande set global max_allowed_packet = size (Notez que la taille ici ne peut être renseignée qu'en octets. Après avoir redémarré le service mysql, la configuration deviendra invalide ! )

Option 2, modifiez le fichier my.ini et ajoutez max_allowed_packet=size dans la section [mysqld]

2

Puisque la commande source ne peut pas enregistrer l'enregistrement de positionnement. de cette façon, message d'erreur, je suis donc passé plus tard à la méthode shell Linux pour importer

comme suit : sql.sh

De cette façon, vous pouvez trouver des invites d'erreur, ce qui vous aidera à résoudre le problème plus tard.

Tutoriel vidéo MySQL

  #!/bin/bash
    p="d:backup/sql.sql" //绝对路径
    User='abc'
    Password='123'
     
    mysql -u $User -p$Password -e "source $f"  2>err1.txt;//输出错误到文件中,方便后面查询     
    echo 'OK!'

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer