Diviser la sortie Mysqldump en fichiers plus petits pour les télécharger sur un serveur distant avec une capacité limitée
La nécessité de transférer des données volumineuses d'une base de données MySQL à une autre Cela se produit souvent, mais des limitations telles que des tailles de téléchargement de fichiers restreintes peuvent constituer un défi. Ceci est particulièrement pertinent lors de l'utilisation de phpMyAdmin, qui autorise uniquement les fichiers .sql compressés de moins de 2 Mo. Heureusement, une solution existe pour surmonter cet obstacle.
Pour résoudre ce problème, la sortie de mysqldump peut être méticuleusement fragmentée en morceaux gérables, permettant de les télécharger sous leurs formes plus petites. Malheureusement, l'utilitaire split(1) ne peut pas être utilisé en raison de l'impossibilité de concaténer les fichiers ensemble sur le serveur distant.
Une solution alternative : fragmenter la sortie de vidage MySQL
Une alternative pratique à split(1) est présentée dans le script bash suivant. Il divise habilement un fichier de vidage de base de données en fichiers .sql individuels, chacun correspondant à une table distincte. Le script exploite csplit, un outil polyvalent pour diviser des fichiers, et utilise stratégiquement START pour identifier les limites des tables.
#!/bin/bash # Adjust this to your specific scenario: START="/-- Table structure for table/" if [ $# -lt 1 ] || [[ == "--help" ]] || [[ == "-h" ]]; then echo "USAGE: extract all tables:" echo " DUMP_FILE" echo "extract one table:" echo " DUMP_FILE [TABLE]" exit fi if [ $# -ge 2 ]; then # Extract a specific table csplit -s -ftable "/-- Table structure for table/" "%-- Table structure for table \`\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1" else # Extract all tables csplit -s -ftable "$START" {*} fi [ $? -eq 0 ] || exit mv table00 head FILE=`ls -1 table* | tail -n 1` if [ $# -ge 2 ]; then # Cut off all other tables mv $FILE foot else # Cut off the end of each file csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*} mv ${FILE}1 foot fi for FILE in `ls -1 table*`; do NAME=`head -n1 $FILE | cut -d$'\x60' -f2` cat head $FILE foot > "$NAME.sql" done rm head foot table*
Cette solution divise méticuleusement le fichier de vidage en fichiers .sql individuels spécifiques à la table, garantissant ainsi un téléchargement réussi vers le serveur distant même avec une capacité de fichiers restreinte.
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!