mysqldump to a tar.gz

Habituellement, après avoir jeté une database MySQL avec la command mysqldump j'ai immédiatement gadget / gzip le file résultant. Je cherche une façon de le faire en une seule command:

Donc, à partir de ceci:

 mysqldump dbname -u root -p > dbname.sql tar czvf dbname.sql.tgz dbname.sql rm dbname.sql 

À quelque chose comme ça:

 mysqldump dbname -u root -p > some wizardry > dbname.sql.tgz 

Ou encore mieux (puisque je suis habituellement scp'ing le file de vidage vers un autre server):

 mysqldump dbname -u root -p > send dbname.sql.tgz to user@host 

Je suis en train de bash sur Debian.

8 Solutions collect form web for “mysqldump to a tar.gz”

 mysqldump --opt <database> | gzip -c | ssh user@wherever 'cat > /tmp/yourfile.sql.gz' 

Vous ne pouvez pas utiliser le goudron dans un tuyau comme celui-ci, et vous n'en avez pas besoin de toute façon, car vous ne sortez qu'un seul file. tar n'est utile que si vous avez plusieurs files.

Si vous utilisez ce site, utilisez simplement la command suivante pour sauvegarder votre database et le download en utilisant gzip:

 mysqldump -u userName -p (passwordPrompt) yourDatabaseName | gzip -c > output.gz 

(Modifier: key fixe -c)

Utilisez un canal nommé.

 mkfifo mysql_pipe gzip -9 -c < mysql_pipe > name_of_dump.gz & mysqldump database > mysql_pipe rm mysql_pipe 

Je l'utilise tout le time, c'est incroyable.

http://fr.wikipedia.org/wiki/Named_pipe

J'ai écrit un script rapide pour extraire une database mysql distante. Il utilise la compression mysql, la compression gzip et ssh. Sucked down une database multi GB à un taux incroyable.

  ssh -C user@host "mysqldump --opt --compress database <table> | gzip -9 -c" > outputfile.sql.gz 

Un avantage secondaire est qu'il ne nécessite pas d'espace libre sur le server de database source, afin que vous puissiez l'utiliser pour sauvegarder une database sur un server sans espace disque libre avant d'effectuer une élagage de vos données.

J'espère que ça aide quelqu'un.

Utilisez le taux de pv et de moniteur!

 mysqldump prod_db -h dbslave | pv | gzip -c > prod_2012_08_20.dump.tgz 

Ou, si vous connaissez la taille (3 Go), obtenez une estimation précise:

 mysqldump prod_db -h dbslave | pv -s 3g | gzip -c > prod_2012_08_20.dump.tgz 

Vous pouvez faire comme:

mysqldump --add-drop-table -h dbhost -u dbuser -p dbname (tablename tablename ... ) | gzip -c > wp.sql.gz

par exemple

mysqldump --add-drop-table -h localhost -u root -p wordpress | gzip -c > wp.sql.gz

J'ai travaillé sur ce script bash ci-dessous qui essaie de rassembler tous les bons conseils que j'ai vus en matière de vidage / restauration avec mysql. Il est destiné aux opérations à distance.

Il suffit de reconfig vars et essayez. 🙂

Les caractéristiques sont:

  • vous pouvez passer une list de tables à vider (vidage sélectif)
  • vous pouvez vous inviter à find des passwords (MySQL / SSH) ou les configurer dans des variables
  • la transmission réseau est gzipée
  • vous pouvez choisir de sauvegarder le vidage gzip sur le server distant
  • vous pouvez reimporter le vidage vers le server distant à la volée (pas de files temporaires sur le server local / distant)
  • vous avez des commentaires visuels de ce qui se passe (grâce à echo et pv)
  • vous pouvez définir les variables mysql avant et après le process de vidage

Ce qui nécessite une amélioration:

  • vous devez passer une list de tables (ne pas décharger toutes les tables)
  • Le mot de passe MySQL est le même pour la source et la cible
  • vous devez GRANT PRIVILEGES manuellement (il semble que MySQL ne le laisse pas remodelément)
  • vous devez avoir installé sshpass
  • Certaines tables compressées innodb sont lentes à décharger (peut-être la faute de mysqldump)

Je partage ce script ici en espérant qu'il puisse être amélioré par la communauté. (mieux vu avec nano ou autre éditeur qui colore le code)

——————————— couper ici ————— ——————-

 #!/bin/bash #set -x #REQUIRED VARS SOURCE_USER=root #MySQL user SOURCE_HOST=localhost SOURCE_PASSWORD=yourmysqlpass #optional SOURCE_DBNAME=yourdbname TARGET_HOST=192.168.1.2 TARGET_DBNAME=yourdbname TARGET_SSHUSER=root TARGET_SSHPASSWORD=yoursshpass #optional TABLES='table1 table2 table3 table4' TARGET_DIR="/data/dumpfiles" EXEC_ACTION_TEXT[0]='Reimport TABLES directly into remote MySQL database' EXEC_ACTION_TEXT[1]='Backup gzipped data to TARGED_DIR on remote TARGET_HOST' EXEC_ACTION=0 #print config echo "---------------------------------" echo " SOURCE_USER: $SOURCE_USER (MySQL)" if [ "SOURCE_PASSWORD" != "" ]; then echo " SOURCE_PASSWORD:<present> "; else echo " SOURCE_PASSWORD:<to be asked> " fi echo " SOURCE_HOST: $SOURCE_HOST " echo " SOURCE_DBNAME: $SOURCE_DBNAME " echo " TARGET_HOST: $TARGET_HOST " echo " TARGET_DBNAME: $TARGET_DBNAME " echo " TARGET_SSHUSER: $TARGET_SSHUSER " if [ "TARGET_SSHPASSWORD" != "" ]; then echo " TARGET_SSHPASS: <present> "; else echo " TARGET_SSHPASS: <to be asked> " fi echo " TABLES: $TABLES " echo " EXEC_ACTION: $EXEC_ACTION - ${EXEC_ACTION_TEXT[$EXEC_ACTION]}" echo " TARGET_DIR: $TARGET_DIR (only for action 1)" echo "---------------------------------" echo "PRESS <ENTER> to continue..."; read; echo #read the mysql password from command-line (SOURCE and TARGET uses the same password) if [ "$SOURCE_PASSWORD" == "" ]; then echo -n "Type $SOURCE_USER password for MySQL servers: "; read -s SOURCE_PASSWORD; echo fi echo "Creating database $TARGET_DBNAME on $TARGET_HOST if not exists ... " mysql \ --user=$SOURCE_USER \ --password=$SOURCE_PASSWORD \ --host=$TARGET_HOST \ --execute "create database if not exists $TARGET_DBNAME;" echo '--------------------------------------------------------------------------------------' echo "**** ATTENTION ****: execute this command on mysql server at $TARGET_HOST :" echo "GRANT ALL PRIVILEGES ON $TARGET_DBNAME.* TO '$SOURCE_USER'@'%' IDENTIFIED BY 'yourpass';" echo '--------------------------------------------------------------------------------------' echo "PRESS <ENTER> to continue..."; read; echo #read the password from command-line if [ "$TARGET_SSHPASSWORD" == "" ]; then echo -n "Type the password for remote SSH Server (TARGET) ['$TARGET_SSHUSER'@'$TARGET_HOST']: "; read -s TARGET_SSHPASSWORD; echo fi for thistable in $TABLES do case "$EXEC_ACTION" in 0) thisaction="gunzip | mysql --user=$SOURCE_USER --password=$SOURCE_PASSWORD -D $TARGET_DBNAME" endmessage='remote reimporting has finished' ;; 1) thisaction="cat > $TARGET_DIR/`date +%Y.%m.%d`-"$thistable".gz" endmessage="$thisaction has finished" ;; *) echo "EXEC_ACTION=$EXEC_ACTION not supported" && exit 1 esac echo "---------------------------------------------------------------------" echo "-- table $thistable" echo "---------------------------------------------------------------------" ( echo -n "-- setting variables... " > /dev/stderr #talk to user via stderr echo "SET AUTOCOMMIT=0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;" echo -n "starting mysqldump... " > /dev/stderr mysqldump --opt --user=$SOURCE_USER --password=$SOURCE_PASSWORD --host=$SOURCE_HOST $SOURCE_DBNAME $thistable echo -n "done mysqldump, reseting variables... " > /dev/stderr echo "SET FOREIGN_KEY_CHECKS=1; SET UNIQUE_CHECKS=1; SET AUTOCOMMIT=1;" echo -n "commiting... " > /dev/stderr echo "COMMIT;" echo "done!" > /dev/stderr ) | \ gzip -c -2 | \ pv | \ sshpass -p $TARGET_SSHPASSWORD ssh $TARGET_SSHUSER'@'$TARGET_HOST $thisaction echo $endmessage ' with exit status '$? done 

Essaye ça:

 mysqldump --all-databases --password=dbpassword | gzip -c | ssh user@servername "cat >/tmp/filename_of_your_choice.gz" 

S'il vous plaît, je ne suis pas du tout bon pour ces choses, je viens de combiner 2 options sur le Web en une seule.

Il se peut qu'il contienne quelques imprécisions par rapport à l'original. Nous espérons néanless que cela vous aidera dans vos searchs.

Cependant, il faut que ssh.keys soit installé et accepté si vous souhaitez l'utiliser dans des scripts ou crontab ou similaires.

  • propriétaires de swaps de tar lorsque vous déplacez des files depuis dev to prod server
  • Segmenter les sauvegardes mysql en utilisant du goudron
  • exclure le directory avec la command tar
  • gère un directory et n'incluez que certains types de files
  • Linux - Diviser une sauvegarde en deux étapes
  • Comparer le contenu du goudron avec le dossier local
  • Est-ce que je peux get un bit pour ne pas utiliser le cache du système de files lors de la lecture de files?
  • Comment gérez-vous uniquement les files dans un directory en fonction d'un nom de file spécifique?
  • Dans tar Comment puis-je exclure le contenu du directory, mais laisser le directory vide
  • Problèmes lors du démarrage dans Linux - tarball créé à partir de Solaris
  • Comment ne gagnez-vous que les fichiers dans un répertoire en fonction d'un nom de fichier spécifique?
  • Les astuces du serveur de linux et windows, tels que ubuntu, centos, apache, nginx, debian et des sujets de réseau.