1. ホーム
  2. crontab

[解決済み] mysqldumpとgzipコマンドで、MySQLデータベースの圧縮ファイルをcrontabで正しく作成する。

2023-05-07 21:04:19

質問

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

設定です。

  • Debian GNU/Linux 7.3 (wheezy)
  • MySQL サーババージョン: 5.5.33-0+wheezy1(Debian)
  • user、backup、backup2 の各ディレクトリは 755 パーミッションを持ちます。
  • MySQL db と Debian アカウントのユーザー名は同じです。

シェルからこのコマンドは動作します

mysqldump -u user -p[user_password] [database_name] | gzip > dumpfilename.sql.gz

これをcrontab -eでクーロンタブに置くと

* * /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ディレクトリに1分ごとにファイルが作成されますが、0バイトです。

しかし、この出力を 2 番目のディレクトリである backup2 にリダイレクトすると、適切な mysqldumpfile duly compressed がその中に作成されることに気づきました。最初のディレクトリに 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