J'essaie d'importer un fichier de vidage MySQL, que j'ai obtenu de mon hébergeur, dans ma machine de développement Windows, et je rencontre des problèmes.
J'importe ceci depuis la ligne de commande, et je reçois une erreur très étrange:
ERREUR 2005 (HY000) à la ligne 3118: hôte de serveur MySQL inconnu '╖? * Á ± dÆ╦N╪Æ · h ^ ye "π╩i╪ Z + - $ ▼ ₧ ╬Y.∞┌ | ↕╘l∞ / l ╞⌂î7æ▌X█XE.ºΓ [; ╦ï ♣ éµ♂º╜┤║] .♂┐φ9dë╟█'╕ÿG∟═0à¡úè ♦ ╥ ↑ ù ♣ ♦ ¥ '╔NÑ' (11004)
Je joins la capture d'écran parce que je suppose que les données binaires seront perdues ...
Je ne sais pas exactement quel est le problème, mais deux problèmes potentiels sont la taille du fichier (2 Go) qui n'est pas incroyablement grande, mais elle n'est pas non plus très petite non plus, et l'autre est le fait que beaucoup de ces tableaux ont Images JPG en eux (c'est pourquoi le fichier est de 2 Go, pour la plupart).
En outre, le vidage a été effectué sur une machine Linux et je l'importe dans Windows, je ne sais pas si cela pourrait aggraver les problèmes (je comprends que cela ne devrait pas)
Maintenant, ces ordures binaires sont la raison pour laquelle je pense que les images dans le fichier peuvent être un problème, mais j'ai pu importer des vidages similaires de la même société d'hébergement dans le passé, donc je ne sais pas quel pourrait être le problème.
De plus, essayer de regarder dans ce fichier (et la ligne 3118 en particulier) est un peu impossible étant donné sa taille (je ne suis pas vraiment à portée de main avec les outils de ligne de commande Linux comme grep, sed, etc.).
Le fichier est peut- être corrompu, mais je ne sais pas exactement comment le vérifier. Ce que j'ai téléchargé était un fichier .gz, que j'ai "testé" avec WinRar et il dit qu'il semble OK (je suppose que gz a une sorte de CRC). Si vous pouvez penser à une meilleure façon de le tester, j'adorerais essayer.
Des idées sur ce qui pourrait se passer / comment surmonter cette erreur?
Je ne suis pas très attaché aux données en particulier, car je veux juste que ce soit une copie pour le dev, donc si je dois perdre quelques enregistrements, ça me convient, tant que le schéma reste parfaitement sain.
Merci!
Daniel
Vous n'avez pas nécessairement besoin d'utiliser l'option --hex-blob. Je viens de résoudre ce problème moi-même et le problème était que j'avais besoin que le paramètre --max_allowed_packet soit défini sur une valeur suffisamment grande pour accueillir le plus gros blob de données que je chargerais. Votre commande de restauration devrait ressembler à ceci:
Si vous utilisez l'option --hex-blob, vous augmenterez considérablement la taille de votre sauvegarde - d'un facteur 2 ou plus. REMARQUE: pour restaurer les mêmes données que celles que j'ai restaurées avec la commande ci-dessus, il fallait définir --max_allowed_packet = 64M dans my.ini (cnf) et redémarrer le serveur COMME BIEN en le définissant sur 64M sur la ligne de commande pour restaurer un vidage créé avec l'option --hex-blob.
la source
Il pourrait toujours y avoir un problème en raison de la grande taille du fichier, alors assurez-vous de définir max-allowed-packet sur une valeur élevée (param pour la commande mysql).
la source
Ok, j'ai eu ce problème aujourd'hui. Mais mon problème était que la base de données était déjà supprimée lorsque j'ai réalisé que la sauvegarde était interrompue. Alors non
--hex-blob
pour moi! Pour pouvoir y remédier j'ai fait un petit script en PHP qui convertit la "chaîne binaire" en représentation hexadécimale où les valeurs sont représentées comme"_binary '!@{#!@{#'"
...Il utilise un REGEX pour analyser le SQL, ce qui n'est pas complètement sûr, mais il a fait le travail pour moi.
J'espère que cela sauve quelqu'un le mal de tête que j'ai eu!
la source
J'ai un problème similaire lors de la restauration d'un fichier de vidage à partir d'un serveur Linux qui contient des données binaires. Les erreurs sont quelque chose comme
ERROR 1064 (42000) at line 551: You have an error in your SQL syntax;
Ce fichier de vidage a pu être importé avec succès dans le serveur Linux mais pas dans Windows.
J'ai essayé avec
--hex-blob
option et--max_allowed_packet
et même transférer des données avec pipeline au lieu du fichier .sql, mais sans chance.J'ai finalement résolu cela en utilisant MySQL Workbench, et la commande générée est comme
Ensuite, j'ai essayé avec la
--default-character-set=utf8
ligne de commande et cela a fonctionné. J'espère que cela aidera quelqu'un.la source