crontab을 사용하여 MySQL 데이터베이스의 압축 파일을 올바르게 생성하기위한 mysqldump 및 gzip 명령
crontab
일하는 데 문제가 있습니다. MySQL 데이터베이스 백업을 자동화하고 싶습니다.
설정:
- Debian GNU / Linux 7.3 (wheezy)
- MySQL Server 버전 : 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 디렉토리에 1 분마다 생성되지만 0 바이트가 있습니다.
그러나이 출력을 두 번째 디렉토리 인 backup2로 리디렉션 할 때 적절하게 압축 된 적절한 mysqldumpfile이 그 안에 생성되었음을 알 수 있습니다. 첫 번째 디렉토리에 0 바이트 파일이 생기고 두 번째 디렉토리에 예상되는 출력이 발생하는 실수가 무엇인지 알 수 없습니다.
* * /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/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 (what you have done)
scp -P2222 /home/mordb-148-251-89-66.sql.gz root@otherip:/home/mordbexternes/mordb-148-251-89-66.sql.gz
(to send a copy somewhere else if the sending server crashes, because too old, like me ;-))
'Programing' 카테고리의 다른 글
Jekyll과 함께 MathJax 사용 (0) | 2020.11.18 |
---|---|
패키지 관리자에 액세스 할 수 없습니다. (0) | 2020.11.18 |
다른 역할의 Ansible 알림 핸들러 (0) | 2020.11.18 |
개체의 모든 메서드를 인쇄하는 방법이 있습니까? (0) | 2020.11.18 |
Python의 전용 변수 및 메서드 (0) | 2020.11.18 |