mysqldump tar.gz

通常,在使用mysqldump命令转储MySQL数据库之后,我会立即tar / gzip结果文件。 我正在寻找一种方法来做到这一点在一个命令:

所以从这个:

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

像这样的东西:

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

甚至更好(因为我通常scp'ing转储文件到另一台服务器):

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

我在debian上运行bash

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

你不能像这样在一个pipe道中使用tar,而且你不需要它,因为你只输出一个文件。 只有当你有多个文件时,tar才有用。

如果您正在本地运行,则使用以下命令备份数据库并使用gzip对其进行压缩:

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

(编辑:固定-c键)

使用命名pipe道。

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

我一直用它,这真棒。

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

我写了一个快速脚本来吸收远程mysql数据库。 它使用mysql压缩,gzip和ssh压缩。 以令人难以置信的速度吸收了一个多GB数据库。

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

另一个好处是它不需要源数据库服务器上的可用空间,因此您可以在修剪数据之前使用它来备份可用磁盘空间为零的服务器上的数据库。

希望它有助于某人。

使用pv和监视率!

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

或者,如果您知道大小(3GB),请准确估算:

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

你可以这样做:

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

例如

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

我一直在这个bash脚本的工作,试图把我见过的所有好的build议,当涉及到转储/使用MySQL恢复。 它针对远程操作。

只需重新configurationvariables,并尝试一下。 🙂

特点是:

  • 你可以传递一个表列表来转储(select性转储)
  • 你可以提示input密码(MySQL / SSH)或者将它们设置为variables
  • networking传输是gzipped
  • 您可以select将gzip转储保存到远程服务器
  • 您可以将转储重新导入到远程服务器(本地/远程服务器上没有临时文件)
  • 你有什么事情的视觉反馈(感谢回声和光伏)
  • 您可以在转储过程之前和之后设置mysqlvariables

什么需要改进:

  • 你需要传递一个表(不能转储所有表)
  • MySQL和密码对于源和目标是相同的
  • 你需要手动授予PRIVILEGES(看起来像MySQL不要让它做remotelly)
  • 你需要安装sshpass
  • 一些innodb巨大的压缩表缓慢转储(可能是mysqldump的错)

我希望在这里分享这个剧本,希望社区能够改进。 (最好用nano或其他编辑器代码来查看)

– – – – – – – – – – – – – – – – – 剪这里 – – – – – – – – ——————-

 #!/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 

尝试这个:

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

请不要说我不擅长这些事情,我只是把2个选项放到网上。

从某种angular度来看,这可能会更好,但是这对我来说很有帮助。

但是,如果要在脚本或crontab使用ssh.keys ,则需要安装和接受ssh.keys