web-dev-qa-db-ja.com

SSHでMySQLサーバーのバックアップを作成するためにCronジョブを実行するにはどうすればよいですか?

MySQLデータベースでCentOSを実行している本番サーバーがあります。自宅には、QNAP NASがあります(小さな組み込みLinuxを実行しています)。 NASでCronジョブを作成して、CentOS本番サーバーからデータをバックアップしたいと思います。問題は、データを圧縮せずに転送したくないということです(SQLダンプは約5GBになります)。サーバーにSSHで接続し、SQLダンプを実行し、結果を圧縮してダウンロードしたいと思います。

これは可能ですか?最も効率的な方法は何でしょうか?

1
Pluc

この便利なワンライナーを使用して、接続のlocal側から実行できます。

ssh user@remoteserver "mysqldump -h myhost -u myuser -pmypass mydb | gzip" > /path/to/my/dump.sql.gz

つまり、mysqldumpSSHコマンドによって生成された出力は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を介してネットワーク経由でコピーし、最後にリモートコピーを削除します。

3
Craig Watson

さて、私はアーカイブで毎日すべてのmysqlデータベースのバックアップを取るために使用した私の個人的な方法を共有しています。

  1. 次のコードを使用して、/ 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
    
  2. そのファイルを保存します
  3. Chmod + xファイル名を使用して、そのスクリプトを実行可能としてマークします
  4. 毎日深夜12時に作成される毎日の実行00 * * */bin/mysqlbackup.sh用にcronでそのスクリプトを設定します。
  5. Cronを使用して毎日あなたにRsync/backupを実行します。 rsyncを設定するには、以下のリンクを使用できます。 http://www.thegeekstuff.com/2011/07/rsync-over-ssh-without-password/https://blogs.Oracle.com/jkini/entry/how_to_scp_scp_and

OR

  1. フォルダのrsyncを含む元のスクリプトを変更することもできます。その場合も、2番目のcronを設定する必要はありません。

幸運を祈ります。

1
Rahul Gupta

これは可能です-私は非常に似たようなことをしていました。 SSHを使用してmysql_dump(またはお気に入りの同等のもの)を実行し、-edでgzipを実行してから、scpを使用して転送し、もう一度SSHを使用してrmに転送します。ダンプファイル。

0
John