ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • mysql 데이터베이스 백업 스크립트
    프로그래밍/DB 2020. 5. 2. 17:20
    728x90
    반응형




    mysqldump를 사용하여 데이터베이스를 매일 백업하는 쉘스크립트를 작성하였다. 



    mysqldump 사용법 

       mysqldump는 DB에서 원하는 DB만, table만 백업 할 수 있고, 전체 DB를 백업 할 수 있다.


      (1) 전체 백업

        mysqldump -u계정이름 -p -A > all.sql


      (2) 특정 DB 백업

        mysqldump -u계정이름 -p 특정DB명 > 특정DB명.sql


      (3) 특정 DB에 특정 테이블 백업

        mysqldump -u계정이름 -p 특정DB명 특정table명 > 특정DB명.특정table.sql


      복원법

         mysql -u [userId] -p [password] [DB명] < 특정DB(특정table).sql


    - DB 백업 스크립트 작성  

    # vi /root/dbbackup.sh


    mysqldump를 이용하여 디비나 테이블을 백업하고 백업한 파일은 gzip을 이용하여 압축하여 백업 폴더에 저장한다. 


    - db 계정정보를 스트립트 안에 명시하는 경우 

      (스크립트에 명시적으로 계정정보를 입력하는 것은 보안상 위험 있음. 사용 예시로만 참고할 것


    #!/bin/bash

    DB_BACKUP="/home/dbbackup/"

    DB_USER="username"

    DB_PASSWD="passwd"

    db="dbname"

    table="tablename"


    # Remove backups older than 3 days

    find $DB_BACKUP -ctime +3 -exec rm -f {} \;




    # 데이터베이스를 모두 백업할경우 

    mysqldump --user=$DB_USER --password=$DB_PASSWD -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";




    # 데이터베이스를 백업할경우 

    mysqldump --user=$DB_USER --password=$DB_PASSWD $db | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";



    # 데이터베이스의 특정 테이블을 백업할경우 

    mysqldump --user=$DB_USER --password=$DB_PASSWD $db $table | gzip > "$DB_BACKUP/mysqldump-$db-$table-$(date +%Y-%m-%d).gz";






    - db 계정정보를 my.cnt에 명시하는 경우 


    my.cnt 




    [mysqldump]


    user=사용자이름

    password=암호




    스크립트 


    #!/bin/bash

    DB_BACKUP="/home/dbbackup/"

    db="dbname"

    table="tablename"


    # Remove backups older than 3 days

    find $DB_BACKUP -ctime +3 -exec rm -f {} \;




    # 데이터베이스를 모두 백업할경우 

    mysqldump  -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";




    # 데이터베이스를 백업할경우 

    mysqldump  $db | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";



    # 데이터베이스의 특정 테이블을 백업할경우 

    mysqldump  $db $table | gzip > "$DB_BACKUP/mysqldump-$db-$table-$(date +%Y-%m-%d).gz";









    /root/dbbackup.sh 를 실행하여 정상적으로 스크립트가 작동하는지 확인한다. 


    위와 같이 스크립트를 실행하면 정상적으로 되는데 crontab에서 실행할때는 아래와 같이  오류가 발생할 수 있다. 

    cat /home/bitnami/backup_db.log
    dbbackup.sh: line 8: ./mysqldump: No such file or directory




    이럴 경우 which로 mysqldump 명령어의 전체 경로를 확인하여 스크립트에 명시해주면 된다. 


    $ which mysqldump
    /opt/bitnami/mysql/bin/mysqldump


    아래와 같이 해주면 된다. 

    # 데이터베이스를 모두 백업할경우 

    /opt/bitnami/mysql/bin/mysqldumpmysqldump --user=$DB_USER --password=$DB_PASSWD -A | gzip > "$DB_BACKUP/mysqldump-$db-$(date +%Y-%m-%d).gz";




    정상적으로 스크립트가 실행이 되면 보안을 위해 root만 수정하고 실행할수 있도록 권한 설정 

     chmod 700 /root/dbbackup.sh


    - 크론택에 작업 등록 

    #crontab -e



    00 04 * * * /root/dbbackup.sh




    매일 새벽 4시마다 디비 백업을 하도록 크론택을 등록하고 작업 완료. 




    728x90
    반응형

    댓글 0

Designed by Tistory.