MySQLデータベースでCentOSを実行している本番サーバーがあります。自宅には、QNAP NASがあります(小さな組み込みLinuxを実行しています)。 NASでCronジョブを作成して、CentOS本番サーバーからデータをバックアップしたいと思います。問題は、データを圧縮せずに転送したくないということです(SQLダンプは約5GBになります)。サーバーにSSHで接続し、SQLダンプを実行し、結果を圧縮してダウンロードしたいと思います。
これは可能ですか?最も効率的な方法は何でしょうか?
この便利なワンライナーを使用して、接続のlocal側から実行できます。
ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass mydb | gzip" > /path/to/my/dump.sql.gz
つまり、mysqldump
SSHコマンドによって生成された出力はgzip
接続のリモート側にパイプされ、次にstdout
にリダイレクトされます。 、NASの/path/to/my/dump.sql.gz
にリダイレクトされます。圧縮されたデータのみがネットワーク経由で送信されます。
スクリプトで以下を実行することにより、これをわずかに拡張できます(これは、ジョンが回答で指定したものと同等です)。
ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass -D mydb | gzip > /tmp/dump.sql.gz"
scp user@remoteserver:/tmp/dump.sql.gz /path/to/my/dump.sql.gz
ssh user@remoteserver "rm -f /tmp/dump.sql.gz"
これは少し時間がかかるアプローチであり、最初にデータベース全体をダンプ/圧縮し、次にscp
を介してネットワーク経由でコピーし、最後にリモートコピーを削除します。
さて、私はアーカイブで毎日すべてのmysqlデータベースのバックアップを取るために使用した私の個人的な方法を共有しています。
次のコードを使用して、/ binまたはその他の任意の場所にファイルmysqlbackup.shを作成します。
#!/bin/bash
# modify the following to suit your environment
export DAYS="3"
export DB_BACKUP="/backup/"
export DB_USER="root"
export DB_PASSWD="<you root password>"
# title and version
echo ""
echo "mySQL_backup"
echo "----------------------"
echo "* Deleting OLD Backup ..."
# this will delete old file older than DAYS
find $DB_BACKUP -mtime +$DAYS -exec rm -rf {} \;
echo "* Creating new backup..."
# Next command take backup compressed with bzip2 save in directory DB_BACKUP
mysqldump --all-databases | bzip2 > $DB_BACKUP/mysql-`date +%Y-%m-%d-%H:%M`.bz2
echo "----------------------"
echo "Done"
exit 0
OR
幸運を祈ります。
これは可能です-私は非常に似たようなことをしていました。 SSHを使用してmysql_dump
(またはお気に入りの同等のもの)を実行し、-edでgzip
を実行してから、scp
を使用して転送し、もう一度SSHを使用してrm
に転送します。ダンプファイル。