通常、mysqldump
コマンドを使用してMySQLデータベースをダンプした後、結果のファイルをすぐにtar/gzipします。これを1つのコマンドで実行する方法を探しています。
だからこれから:
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しているため):
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'
このようなパイプでtarを使用することはできません。単一のファイルを出力するだけなので、とにかくそれを必要としません。 tarは、複数のファイルがある場合にのみ役立ちます。
これをローカルで実行している場合は、次のコマンドを使用してデータベースをバックアップし、gzipを使用してデータベースを圧縮します。
mysqldump -u userName -p (passwordPrompt) yourDatabaseName | gzip -c > output.gz
(編集:固定-cキー)
名前付きパイプを使用します。
mkfifo mysql_pipe
gzip -9 -c < mysql_pipe > name_of_dump.gz &
mysqldump database > mysql_pipe
rm mysql_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 --all-databases --password=dbpassword | gzip -c | ssh user@servername "cat >/tmp/filename_of_your_choice.gz"
私はこれらのことは決して得意ではないことに注意してください。ウェブ上の2つのオプションを1つにまとめただけです。
それは他のいくつかの点で非常に良いかもしれませんが、これは私のために働くワンライナーです。
ただし、ssh.keys
スクリプトまたはcrontab
などで使用する場合は、インストールして受け入れます。
あなたは次のようにすることができます:
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スクリプト以下は、mysqlでダンプ/復元するときに私が見たすべての良いアドバイスをまとめようとしています。リモート操作を対象としています。
Varsを再構成して試してみてください。 :)
機能は:
改善が必要なもの:
コミュニティで改善できることを願って、このスクリプトをここで共有しています。(コードを色付けする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
パスワードを設定ファイルに保存して、このオプション--defaults-extra-fileを使用することもできます。
mysqldump --defaults-extra-file=mysqldump.cnf DataBaseName | gzip -c > DBOutputName.sql.gz
構成ファイルは次のようになります。
[mysqldump]
Host = localhost
user = username
password = "password"