Question

J'essaie de déplacer une table de base de données vers un autre serveur; La complication est que la machine exécute actuellement le tableau n'a plus ou pas d'espace; Je recherche donc une solution qui peut fonctionner sur le net.

J'ai essayé MySQLDump de la base de données de la machine SRC et de la tuyau dans MySQL au DEST; Mais ma base de données a des lignes de 48 m et même lorsque vous éteignez Auto_Commit OFF & trx_commit CMD à 2; Je reçois des temps lents de chien.

mysqldump -uuser -ppass --opt dbname dbtable  | mysql -h remove.server  -uuser -pass dbname

J'ai ensuite essayé de mysqldump les rangées un million à la fois; SCP à la machine dest et faites un mysql <file.sql mais cela semblait devenir progressivement plus lent. J'ai atteint le 7e dossier (7 000 000) des lignes; Et le million d'importants suivants ont duré 240 minutes.

J'ai fait un peu de lecture et MySQL suggère que l'utilisation de la charge CSV dans les importations de style de fichier est ~ 20x plus rapide que les inserts. Alors maintenant, je suis coincé.

Je peux déterminer comment exporter comme CSV en utilisant la syntaxe SQL standard:

SELECT *
INTO OUTFILE '/tmp/tmpfile'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\n'
FROM table;

Mais cela ne fonctionne évidemment pas car il mâchera rapidement mon espace disque déjà bas. Je cherchais donc un interrupteur qui permet à MySQLDUP de vider les CSV à Stdout. D'après ce que j'ai lu, cela ne semble pas possible. La seule façon dont je peux penser à le faire est de créer un FIFO et de pointer MySQL pour y vider - puis écrire un script qui lit le FIFO en même temps et l'envoie au serveur DEST. Pas vraiment sûr sur la syntaxe de la façon de se synchroniser avec l'autre serveur; Ce qui m'amène à mon prochain problème.

En supposant que je peux amener MySQL à vider les CSV sur stdout plutôt qu'un fichier; Comment puis-je ensuite tuer cette sortie vers le serveur DEST? Je suis heureux si je peux simplement obtenir un seul fichier CSV sur le serveur DEST car il a plus d'espace; Parce que je peux simplement utiliser MySqlimport à partir du fichier.

Ce qui m'amène à mon prochain point ... J'adorerais pouvoir faire ceci:

mysqldump -uuser -ppass --opt dbname --tab /dev/stdout dbtable  | mysqlimport -h remove.server  -uuser -pass dbname 

Mais il semble que MySqlimport ne prenne pas en charge la tuyauterie; Vous devez le transmettre un fichier.

Je viens de penser en tapant ceci;

Serait-il possible d'utiliser la méthode FIFO répertoriée ci-dessus; Ensuite, faites lire MySqlimport à partir du FIFO et insérez dans le serveur DEST? Je suppose que le seul problème serait que MySQL peut vider plus rapidement qu'il ne peut faire les importations sur le serveur DEST; Remplissant par la suite le serveur SRC.

Je suis un peu perdu sur la façon de faire un vidage CSV MySQL à STDOUT et de le transférer sur le net vers un serveur DEST (de préférence en importation en même temps, mais heureux de simplement vider en tant que fichier sur le dest).

Toute aide serait grandement appréciée!

Bravo, Ben


METTRE À JOUR: J'utilise des tables InNODB; Et je ne peux pas fermer la boîte SRC pendant une période de plus de 10 minutes.


METTRE À JOUR: J'utilise maintenant SSHFS pour monter un DIR sur le DEST sur le SRC et faire en sorte que MySQL vide un CSV dans ce dossier - semble fonctionner parfaitement. Ensuite, il suffit d'utiliser MySqlimport pour le charger dans la base de données du DEST.


METTRE À JOUR: Alors maintenant, j'ai réussi à obtenir les données sur la boîte dest - l'importation est toujours aussi lente que si elle était effectuée avec des inserts. 9m lignes importées en 12 heures. Quelque chose n'est pas ici. Des idées?


METTRE À JOUR: Pour les personnes intéressées ... cela ne fonctionne pas non plus: http://forums.mysql.com/read.php?22,154964

Était-ce utile?

La solution 2

Il s'avère que le problème était avec l'hôte dans lequel je insérait. Pas assez de RAM + Machine lente a provoqué la sauvegarde des requêtes.

Autres conseils

tu aurais besoin mysqlhostcopy quel support scp, bien sûr, la distance physique entre les serveurs va causer un problème sur le trafic

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top