Ne mysqldump manipuler des données binaires de manière fiable?
J'ai quelques tables dans MySQL 5.6 qui contiennent de grandes données binaires dans certains domaines. Je veux savoir si je peux faire confiance décharges créé par mysqldump
et être sûr que ceux des champs binaires ne sera pas endommagé facilement lors du transfert de fichiers de vidage de fosse systèmes comme le FTP, SCP et. Aussi, dois-je la force de tels systèmes pour traiter les fichiers image binaire des transferts au lieu de l'ascii?
Merci d'avance pour tous les commentaires!
forums.devshed.com/mysql-help-4/... j'ai toujours utiliser les binaires mode ftp pour tous les fichiers. Jamais eu de toute corruption.
Vous devriez toujours vérifier l'importation d'une certaine manière. Idéalement en exécutant une comparaison des données de l'utilitaire, mais qui implique souvent de dupliquer beaucoup de le transfert. Mais même binaire de comparaison zippée décharges à ses deux extrémités par des sommes de contrôle est mieux que de simplement en espérant que tout est ok.
Vous devriez toujours vérifier l'importation d'une certaine manière. Idéalement en exécutant une comparaison des données de l'utilitaire, mais qui implique souvent de dupliquer beaucoup de le transfert. Mais même binaire de comparaison zippée décharges à ses deux extrémités par des sommes de contrôle est mieux que de simplement en espérant que tout est ok.
OriginalL'auteur Francisco Zarabozo | 2013-05-15
Vous devez vous connecter pour publier un commentaire.
Oui, vous pouvez faire confiance décharges générées par
mysqldump
.Oui, vous devez utiliser les binaires de transfert afin d'éviter toute conversion au cours du transfert. Dump MySQL ajoute des commandes de contrôle de la décharge, de sorte que le serveur interprète le fichier dans un codage spécifique lors de la réimportation. Vous ne souhaitez pas modifier cet encodage.
mysqldump
ne pas ajouter des commandes de contrôle par défaut,--hex-blob
drapeau doit être spécifiée pour plus d'étranges erreurs d'interprétation des données binaires à l'intérieur d'un fichier texte.Désolé, mais -1 de moi. J'ai également eu à utiliser le
--hex-blob
drapeau lors d'une dump / scp / restauration, entre les boîtes de linux.Downvoters: ne présumez pas que quelque chose est incorrect lorsque vous n'avez tout simplement pas le comprendre. Le
--hex-blob
solution évite les problème de codage, car il génère des caractères ASCII. Si le rapport de bogue ne peut pas être reproduit, c'est simplement parce que le problème se trouve entre le clavier et la chaise, et MySQL ne peut pas résoudre ce problème. Si quelqu'un pouvait fournir un modèle de scénario, puis le soi-disant "bug" peut être fixée. Merci de me donner un tel scénario, et puis je vais publiquement des excuses. Jusqu'alors, je suppose simplement que vous ne savez pas de quoi vous parlez.Oui, c'est fait, n'est-ce pas? i.stack.imgur.com/QkF8Q.png
Désolé, mais sous-estimer un commentaire et d'appeler les gens "qu'ils ne savent pas de quoi ils parlent" ne pas faire de votre argument de droit. La première: Vous utilisez une version récente de mysql pour justifier de 4 ans de commentaire-vraiment?. Deuxième: La question de départ est au sujet d'obtenir la décharge de ne pas endommagé lors d'un transfert FTP. C'est là que l' --hex-goutte indicateur rend le dump ASCII - sûr d'envoyer. Vous même reconnu. Afin de faire de la de clichés ASCII, il est inutile de configurer le FTP modes de transfert--le problème est résolu. Désolé, mais vous êtes le seul qui n'a pas compris la question en premier lieu.
OriginalL'auteur
Non, il n'est pas toujours fiable lorsque vous avez des blobs binaires. Dans ce cas, vous DEVEZ utiliser le "--hex-blob" drapeau d'obtenir des résultats corrects.
J'ai un cas où ces appels échouent (importer sur un autre serveur, mais les deux Centos6/MariaDB 10):
Il génère un fichier qui silencieusement ne parvient pas à importer. L'ajout de "l'option--skip-extended-insert" me donne un fichier qui est beaucoup plus facile à déboguer, et je trouve que cette ligne est générée, mais ne peut pas être lu (mais aucune erreur n'est signalée d'importation ou d'exportation):
Noter que la résiliation devis sur les données binaires manque dans l'original.
La colonne est donnée binaire:
Donc pas, non seulement vous pouvez pas nécessairement confiance mysqldump, on ne peut même pas compter sur elle pour signaler une erreur lorsqu'on se trouve.
Un vilain solution de contournement que j'ai utilisé était de mysqldump à l'exclusion des deux affligés tables en ajoutant des options comme cela pour le vidage:
Ensuite ce script BASH hack. Fondamentalement exécuter une sélection qui produit INSÉRER des valeurs NULL dans les colonnes sont manipulés et la colonne binaire est transformé en un UNHEX() comme ceci:
De le coller dans votre éditeur de choix pour jouer avec elle si vous en avez besoin.
Qui me donne un fichier appelé "tous les.sql" qui a besoin de la virgule finale dans l'INSERT transformé en un point-virgule, alors il peut être exécuté en tant que ci-dessus. J'ai besoin de la "grande importation de tampons" tweaks fixé à la fois interactive shell mysql et de la ligne de commande pour traiter ce fichier, car il est grand.
Lorsque j'ai signalé le bug, j'ai été finalement pointé le "--hex-blob" drapeau, qui fait la même chose que ma solution de contournement, mais dans un cas banal de mon côté. Ajouter cette option, les blobs qui se fait larguer comme hex, la fin.
Notez que ce bug est toujours marqué "ne peut pas répéter" deux ans plus tard, malgré mes tentatives de ré-ouvrir et MySQL les gens ne semblent pas enclins à le fixer.
OriginalL'auteur
Les décharges générées à partir de
mysqldump
peuvent être de confiance.Pour éviter les problèmes de codages, de transfert binaire, etc, l'utilisation de la
--hex-blob
option, de sorte qu'il traduit chaque octet dans un nombre hexadécimal (par exemple, 'abc' devient 0x616263). Il fera le vidage de plus grand, mais il va être le plus compatible et sûr moyen d'avoir l'info (il sera pur texte, plus d'étranges erreurs d'interprétation dues à des symboles spéciaux généré avec les données binaires sur un fichier texte).Vous pouvez vous assurer de l'intégrité (et d'accélérer le transfert) des fichiers de vidage de l'emballage sur un rar ou zip fichier. De cette façon, vous pouvez facilement détecter que cela n'a pas été corrompu par le transfert.
Lorsque vous essayez de le charger sur votre serveur, vérifiez que vous avez attribué à votre
my.cnf
fichier de configuration de serveurou plus si nécessaire.
BTW, maintenant, je viens de faire une migration, et l'objet de dumping beaucoup de données binaires avec
mysqldump
et il a parfaitement fonctionné.OriginalL'auteur