crontab
を機能させるのに問題があります。 MySQLデータベースのバックアップを自動化したい。
セットアップ:
シェルからこのコマンドは機能します
mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz
Crontab -eを使用してこれをcrontabに配置すると
* * /usr/bin/mysqldump -u user -pupasswd mydatabase | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/dev/null 2>&1
ファイルは/ home/user/backupディレクトリに毎分作成されますが、0バイトです。
ただし、この出力を2番目のディレクトリbackup2にリダイレクトすると、適切に圧縮された適切なmysqldumpfileが作成されます。最初のディレクトリに0バイトのファイルが作成され、2番目のディレクトリに予想される出力が作成されるという間違いを理解することはできません。
* * /usr/bin/mysqldump -u user -pupasswd my-database | gzip> /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz >/home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1
説明をいただければ幸いです。
ありがとう
最初にmysqldumpコマンドが実行され、生成された出力がパイプを使用してリダイレクトされます。パイプは、標準出力をgzipコマンドに標準入力として送信しています。 filename.gzに続くのは、データが保存される最後のファイル名までデータのリダイレクトを続ける出力リダイレクト演算子(>)です。
たとえば、このコマンドはデータベースをダンプしてgzipで実行し、データは最終的にthree.gzに格納されます
mysqldump -u user -pupasswd my-database | gzip > one.gz > two.gz > three.gz
$> ls -l
-rw-r--r-- 1 uname grp 0 Mar 9 00:37 one.gz
-rw-r--r-- 1 uname grp 1246 Mar 9 00:37 three.gz
-rw-r--r-- 1 uname grp 0 Mar 9 00:37 two.gz
私の最初の答えは、データベースダンプを多くの圧縮ファイルにリダイレクトする例です(二重圧縮なし)。 (私は質問をスキャンし、真剣に見逃したので-ごめんなさい)
これはファイルを再圧縮する例です:
mysqldump -u user -pupasswd my-database | gzip -c > one.gz; gzip -c one.gz > two.gz; gzip -c two.gz > three.gz
$> ls -l
-rw-r--r-- 1 uname grp 1246 Mar 9 00:44 one.gz
-rw-r--r-- 1 uname grp 1306 Mar 9 00:44 three.gz
-rw-r--r-- 1 uname grp 1276 Mar 9 00:44 two.gz
これは、I/Oリダイレクトを説明する優れたリソースです。 http://www.codecoffee.com/tipsforlinux/articles2/042.html
tee
コマンドを使用して、出力をリダイレクトできます。
/usr/bin/mysqldump -u user -pupasswd my-database | \
tee >(gzip -9 -c > /home/user/backup/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz) | \
gzip> /home/user/backup2/mydatabase-backup-`date +\%m\%d_\%Y`.sql.gz 2>&1
ドキュメントを参照してください こちら
バックアップファイル名(Centos7)に日時を追加する必要がある場合は、次を使用します。
/usr/bin/mysqldump -u USER -pPASSWD DBNAME | gzip > ~/backups/db.$(date +%F.%H%M%S).sql.gz
これにより、ファイルdb.2017-11-17.231537.sql.gzが作成されます
個人的に、crontabの順に、この作業を行うファイルであるルートディレクトリにfile.sh(右755)を作成しました。
Crontabコード:
10 2 * * * root /root/backupautomatique.sh
File.shコード:
rm -f /home/mordb-148-251-89-66.sql.gz#(古いものを消去するには)
mysqldump mor | gzip> /home/mordb-148-251-89-66.sql.gz(あなたがしたこと)
scp -P2222 /home/mordb-148-251-89-66.sql.gz root @ otherip:/home/mordbexternes/mordb-148-251-89-66.sql.gz
(私のように古すぎるため、送信サーバーがクラッシュした場合に別の場所にコピーを送信するには;-))
www.tikvamal.org