La question est toujours d'actualité, la plupart des gens trouveront ce genre de questions car elles souffrent de la conception monofilaire de mysql et mysqldump.
Si vous avez des millions ou des milliards de lignes, l'exportation peut prendre des jours (voire des semaines) et vous finissez par n'exporter que des parties des données.
Une solution rapide pour résoudre ce problème consiste à exporter des parties des données, ce qui fonctionne mieux si vous avez une clé numérique (comme un identifiant à incrémentation automatique).
Vous trouverez ci-dessous un exemple pour linux/unix sur la façon d'exporter une table 20 à 100 fois plus vite que la normale.
Assumed column "id" is from 1 to 10000000
Assumed cpu has 16 threads
Assumed disk is an ssd or nvme
seq 0 1000 | xargs -n1 -P16 -I{} | mysqldump -h localhost --password=PASSWORD --single-transaction DATABASE TABLE --where "id > {}*10000 AND id < {}*10000+10000" -r output.{}
Le code ci-dessus fera tourner 16 threads, réduisant ainsi le temps d'exportation à 1/10 de la normale. Il crée 16 fichiers qui peuvent également être chargés en parallèle, ce qui accélère le chargement jusqu'à 10 fois.
Sur un serveur puissant, j'utilise jusqu'à 150 threads parallèles, cela dépend du type de disque et de processeur que vous utilisez.
Cette méthode, un peu raffinée, peut réduire à quelques heures le chargement ou l'exportation d'une semaine.
Lorsque vous effectuez cette opération sur le réseau, le paramètre --compress peut être d'une grande aide. De même, ignorer les instructions d'insertion peut aider à résoudre les problèmes d'indexation de mysql, qui sont inévitables pour les données volumineuses.
P.S. N'utilisez jamais les options mysql pour ajouter des index et des clés à la fin sur les grandes tables.