별도의 파일에 MySQL 데이터베이스를 백업하는 스크립트를 만드는 방법은 무엇입니까?

별도의 파일에 MySQL 데이터베이스를 백업하는 스크립트를 만드는 방법은 무엇입니까?

데이터베이스 서버의 백업 프로세스를 자동화하는 스크립트를 작성해야 합니다. 현재 서버에는 19개의 데이터베이스가 있으며, 스크립트가 고려하는 것 이외의 특정 스키마가 생성되는 것을 방지하기 위해 "스키마 표시" 쿼리에 나열된 모든 데이터베이스를 백업하고 싶습니다.

내 생각은 각 패턴을 하루에 두 번(예: 0h00 및 12h00) 덤프하고 압축하여 폴더에 저장하는 것입니다 /home/{user}/database_backup/daily/[day_of_week].

일주일에 한 번씩 모든 [day_of_week]폴더가 압축되어 /home/{user}/database_backup/weekly/[week_of_month].

마지막으로, 한 달에 한 번씩 모든 것이 [week_of_month]압축되어 저장 /home/{user}/database_backup/monthly/되고 다른 애플리케이션에서 테이프에 백업할 수 있도록 그대로 유지됩니다.

/var/lib/mysql요즘에는 이러한 테이프 백업 애플리케이션이 매일 백업을 수행하지만 필요한 것은 이러한 파일을 복원하거나 다른 데이터베이스 서버에서 사용하는 것이 다소 어렵다는 것입니다.

너무 공개적인 질문이라는 걸 알지만, 언제나 그렇듯이 여러분의 도움에 진심으로 감사드립니다.

답변1

서버의 모든 데이터베이스를 반복하여 셸 스크립트에서 하나씩 내보낼 수 있습니다.

#!/bin/sh
HOSTNAME='localhost'
MYSQLUSER='root'
MYSQLPASS='xyz'
for DB in $(mysql -h $HOSTNAME -u $MYSQLUSER --password=${MYSQLPASS} --batch --skip-column-names --execute="show databases");
do
    local FILENAME=${HOSTNAME}_Database_${DB}.sql.gz
    mysqldump $DB -h $HOSTNAME -u $MYSQLUSER --password=${MYSQLPASS} --triggers --routines --event | gzip -c > $FILENAME
done

관련 정보