web-dev-qa-db-ja.com

crontabを使用してMySQLデータベースの圧縮ファイルを適切に作成するmysqldumpおよびgzipコマンド

crontabを機能させるのに問題があります。 MySQLデータベースのバックアップを自動化したい。

セットアップ:

  • Debian GNU/Linux 7.3(wheezy)
  • MySQLサーバーのバージョン:5.5.33-0 + wheezy1(Debian)
  • ディレクトリユーザー、バックアップおよびバックアップ2には755のアクセス許可があります
  • MySQL dbとDebianアカウントのユーザー名は同じです

シェルからこのコマンドは機能します

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

説明をいただければ幸いです。

ありがとう

61
user3397547

最初に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

87
m79lkm

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

ドキュメントを参照してください こちら

9
m79lkm

バックアップファイル名(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が作成されます

5
Unmesh

個人的に、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

0