리눅스 셸 스크립트를 데이터베이스 백업

많은 데이터베이스 백업 근데 # 39, t make it couldn& 스크립트에만 찾았다. 매 시간 내 데이터베이스 백업 싶다. 난 또 파일을 &quot /etc/cron.hourly/"; 하지만, t # 39 실행하십시오 didn& 폴더에서는 chmod 755 로 바꿨다. 적어도 난 쓰기 내 dtep 코드입니다.

물론 그렇긴 하지만, 이 작업을 위해 취해하고 스크립트입니다 경우 어떻게 해야 하나요? 나를 더 쓸 수 있습니다. 이 후 추가 스크립트 파일 폴더 '/etc/cron.hourly/'.

  • 날짜 (d_m_y_H_M_S) ',' 날짜 = 현재 날짜와 변수를 만들 수
  • 파일의 이름, '파일_이름 = $ date&quot 변수를 만들 .gz' ";
      • 미스크라트럼프 이 '와 같은 데이터베이스를 덤프합니다 내려받습니다 내 사용자 = - = utf8 my_database 기본 글자셋 my_pass my_user password = gzip &gt. '/var/www/vhosts/system/example.com/httpdocs/backups/ &quot, $ (&quot filename";) 폴더 내의 파일을 삭제하시겠습니까 /var/www/vhosts/system/example.com/httpdocs/backups/ 않는비즈니스 이전의 8 일 '-'
  • ',' 이 텍스트 파일에 대한 &quot, /var/www/vhosts/system/example.com/httpdocs/backup_log.txt&quot 작성됩니다. '의 백업 작성되기 $ (&quot date";)
  • 파일 변경하십시오 소유자 (chown) 로 루트로부터의 my_user&quot ";). 백업 및 로그 파일의 &quot my_user&quot 열어보려면 싶어서;; FTP 계정.
  • I don& # 39, t want e-메일입니다 후 각 cron. '1' &;; / dev / nulll 2&gt &gt 추가될 예정이다.
해결책

몇 시간 후 업무 시간 및 솔루션, 내가 만든 것 같습니다. 난, 복사, 붙여넣기 사람들에게 도움이 될 수 있는.

이 파일 실행 파일 및 열거하십시오 스크립트입니다 처음 만들 수 없습니다.

# cd /etc/cron.daily/
# touch /etc/cron.daily/dbbackup-daily.sh
# chmod 755 /etc/cron.daily/dbbackup-daily.sh
# vi /etc/cron.daily/dbbackup-daily.sh

다음 줄을 를 구성하고 있는 파일을 Shift+Ins

#!/bin/sh
now="$(date +'%d_%m_%Y_%H_%M_%S')"
filename="db_backup_$now".gz
backupfolder="/var/www/vhosts/example.com/httpdocs/backups"
fullpathbackupfile="$backupfolder/$filename"
logfile="$backupfolder/"backup_log_"$(date +'%Y_%m')".txt
echo "mysqldump started at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
mysqldump --user=mydbuser --password=mypass --default-character-set=utf8 mydatabase | gzip > "$fullpathbackupfile"
echo "mysqldump finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
chown myuser "$fullpathbackupfile"
chown myuser "$logfile"
echo "file permission changed" >> "$logfile"
find "$backupfolder" -name db_backup_* -mtime +8 -exec rm {} \;
echo "old files deleted" >> "$logfile"
echo "operation finished at $(date +'%d-%m-%Y %H:%M:%S')" >> "$logfile"
echo "*****************" >> "$logfile"
exit 0

편집: Innodb 및 백업 경우 너무 많은 시간을 사용하는 경우, [단일 트랜잭션까지] [1] &quot &quot 추가할 수 있습니다. 인수를 막기 위해 잠금식. 그래서 미스크라트럼프 줄은 다음과 같습니다.

mysqldump --user=mydbuser --password=mypass --default-character-set=utf8
          --single-transaction mydatabase | gzip > "$fullpathbackupfile"

[1]: http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html # option_mysqldump_single-transaction

해설 (8)

만드시겠습니까 스크랩트 비슷할 것입니다.

#!/bin/sh -e

location=~/`date +%Y%m%d_%H%M%S`.db

mysqldump -u root --password= database_name > $location

gzip $location

그런 다음 편집할지 crontab '사용자' 실행하십시오 작업자쪽에서 스크립트입니다 진행 과정은 다음과 같다.

$> crontab -e

및 덮어쓰기/추가 입력입니다

01 * * * * ~/script_path.sh

이렇게 하면 실행하십시오 매일 매시간 의 첫 번째 분.

그럼 그냥 추가해야 할 수 있는 것처럼 및 기타 기능 및 틀렸다니까 상황보고해 움직일만 합니다.

해설 (3)

나는 attaboy 같은 문제를 해결할 수 있습니다. 하지만 내가 관리하는 쓸 스크립트입니다. ᄋ "이번 보호하리요.

#!/bin/bash
# Database credentials
user="username"
password="password"
host="localhost"
db_name="dbname"
# Other options
backup_path="/DB/DB_Backup"
date=$(date +"%d-%b-%Y")
# Set default file permissions
umask 177
# Dump database into SQL file
mysqldump --user=$user --password=$password --host=$host $db_name >$backup_path/$db_name-$date.sql

# Delete files older than 30 days
find $backup_path/* -mtime +30 -exec rm {} \;

#DB backup log
echo -e "$(date +'%d-%b-%y  %r '):ALERT:Database has been Backuped"    >>/var/log/DB_Backup.log
해설 (0)
#!/bin/sh
#Procedures = For DB Backup
#Scheduled at : Every Day 22:00

v_path=/etc/database_jobs/db_backup
logfile_path=/etc/database_jobs
v_file_name=DB_Production
v_cnt=0

MAILTO="abc@as.in"
touch "$logfile_path/kaka_db_log.log"

#DB Backup
mysqldump -uusername -ppassword -h111.111.111.111 ddbname > $v_path/$v_file_name`date +%Y-%m-%d`.sql 
if [ "$?" -eq 0 ]
  then
   v_cnt=`expr $v_cnt + 1`
  mail -s "DB Backup has been done successfully" $MAILTO < $logfile_path/db_log.log
 else
   mail -s "Alert : kaka DB Backup has been failed" $MAILTO < $logfile_path/db_log.log
   exit
fi
해설 (0)

이 경우, 누군가 내 mysql 백업 스크립트입니다 unbuntu 대한 도움을 줍니다.

#Mysql back up script

start_time="$(date -u +%s)"

now(){
date +%d-%B-%Y_%H-%M-%S
}

ip(){
/sbin/ifconfig eth0 2>/dev/null|awk '/inet addr:/ {print $2}'|sed 's/addr://'
}

filename="`now`".zip
backupfolder=/path/to/any/folder
fullpathbackupfile=$backupfolder/$filename
db_user=xxx
db_password=xxx
db_name=xxx

printf "\n\n"
printf "******************************\n"
printf "Started Automatic Mysql Backup\n"
printf "******************************\n"
printf "TIME: `now`\n"
printf "IP_ADDRESS: `ip` \n"
printf "DB_SERVER_NAME: DB-SERVER-1\n"

printf "%sBACKUP_FILE_PATH $fullpathbackupfile\n"

printf "Starting Mysql Dump \n"

mysqldump -u $db_user -p$db_password $db_name| pv | zip > $fullpathbackupfile

end_time="$(date -u +%s)"

elapsed=$(($end_time-$start_time))

printf "%sMysql Dump Completed In $elapsed seconds\n"

printf "******************************\n"

PS: Zip 에 unbuntu 레메멤버 pv 및 설치

sudo apt install pv
sudo apt install zip

내가 어떻게 슬라이드에서는 'e' 를 사용하여 실행할 수 있는 모든 6 시간 crontab 설정되었습니다 unbuntu crontab -

0 */6 * * * sh /path/to/shfile/backup-mysql.sh >> /path/to/logs/backup-mysql.log 2>&1

Zip 파일 압축을 풀 수 있는 것은 어디서부터든 준활성 생깁니다

해설 (0)
#!/bin/bash

# Add your backup dir location, password, mysql location and mysqldump        location
DATE=$(date +%d-%m-%Y)
BACKUP_DIR="/var/www/back"
MYSQL_USER="root"
MYSQL_PASSWORD=""
MYSQL='/usr/bin/mysql'
MYSQLDUMP='/usr/bin/mysqldump'
DB='demo'

#to empty the backup directory and delete all previous backups
rm -r $BACKUP_DIR/*  

mysqldump -u root -p'' demo | gzip -9 > $BACKUP_DIR/demo$date_format.sql.$DATE.gz

#changing permissions of directory 
chmod -R 777 $BACKUP_DIR
해설 (0)

이는 이 오픈 소스 도구에서는 마티리 https://github.com/AAFC-MBB/matiri 동시에 고려해야 합니다, mysql 에서 메타데이터를 사용하여 백업 스크립트입니다 Sqlite3. 기능:

  • 다중 서버: Mysql 서버) 이 지원됩니까 공존할 있는지를 같은 여러 물리적 서버 또는 별도의.
  • 평행광: 이와는 별도로, 각 데이터베이스 서버의 백업될 완료되어도 병렬로 (동시 설정 가능. 기본. 3)
  • 압축됨: 각 데이터베이스 백업 압축됨
  • 체크섬이 생성된: 뿐만 아니라 sha256 백업 및 아카이브 파일을 저장하는 모든 파일의 각 압축됨
  • 아카이빙된: 모든 데이터베이스 백업 tar& # 39, 에드 함께 하나의 파일
  • 기록했다. Sqlite3 저장된 정보를 데이터베이스 백업

전체 edisclosure: 당초 마티리 작가이다.

해설 (0)

Mysql 데이터베이스를 DBA 로 백업을 스케줄링하는 합니다 모든 문제를 데이터베이스의 경우 복구할 수 있도록 현행 같이해야겠군.

여기서 우리는 미스크라트럼프 에 시행하십시오 와 동일한 mysql 데이터베이스를 사용하여 백업하도록 스크립트입니다 넣을 수 있습니다.

[orahow@oradbdb DB_Backup] $ cat .backup_script.sh

#!/bin/bash
# Database credentials
user="root"
password="1Loginxx"
db_name="orahowdb"
v_cnt=0
logfile_path=/DB_Backup
touch "$logfile_path/orahowdb_backup.log"
# Other options
backup_path="/DB_Backup"
date=$(date +"%d-%b-%Y-%H-%M-%p")
# Set default file permissions

계속하시겠습니까 판독값입니다. MySQL 백업

해설 (0)

내가 위해수치스러운 쉘로 스크립트입니다 백업하도록 만드시겠습니까 MYSQL 데이터베이스. 우리는 우리의 데이터베이스를 %hsmb 백업하도록 도왔으매 사용할 수 있습니다.

    #!/bin/bash
    export PATH=/bin:/usr/bin:/usr/local/bin
    TODAY=`date +"%d%b%Y_%I:%M:%S%p"`

    ################################################################
    ################## Update below values  ########################
    DB_BACKUP_PATH='/backup/dbbackup'
    MYSQL_HOST='localhost'
    MYSQL_PORT='3306'
    MYSQL_USER='auriga'
    MYSQL_PASSWORD='auriga@123'
    DATABASE_NAME=( Project_O2 o2)
    BACKUP_RETAIN_DAYS=30   ## Number of days to keep local backup copy; Enable script code in end of th script

    #################################################################
    { mkdir -p ${DB_BACKUP_PATH}/${TODAY}
        echo "
                                ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
    } || {
        echo "Can not make Directry"
        echo "Possibly Path is wrong"
    }
    { if ! mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e 'exit'; then
        echo 'Failed! You may have Incorrect PASSWORD/USER ' >> ${DB_BACKUP_PATH}/Backup-Report.txt
        exit 1
    fi

        for DB in "${DATABASE_NAME[@]}"; do
            if ! mysql -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -e "use "${DB}; then
                echo "Failed! Database ${DB} Not Found on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt

            else
                # echo "Backup started for database - ${DB}"            
                # mysqldump -h localhost -P 3306 -u auriga -pauriga@123 Project_O2      # use gzip..

                mysqldump -h ${MYSQL_HOST} -P ${MYSQL_PORT} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} \
                          --databases ${DB} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DB}-${TODAY}.sql.gz

                if [ $? -eq 0 ]; then
                    touch ${DB_BACKUP_PATH}/Backup-Report.txt
                    echo "successfully backed-up of ${DB} on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
                    # echo "Database backup successfully completed"

                else
                    touch ${DB_BACKUP_PATH}/Backup-Report.txt
                    echo "Failed to backup of ${DB} on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
                    # echo "Error found during backup"
                    exit 1
                fi
            fi
        done
    } || {
        echo "Failed during backup"
        echo "Failed to backup on ${TODAY}" >> ${DB_BACKUP_PATH}/Backup-Report.txt
        # ./myshellsc.sh 2> ${DB_BACKUP_PATH}/Backup-Report.txt
    }

    ##### Remove backups older than {BACKUP_RETAIN_DAYS} days  #####

    # DBDELDATE=`date +"%d%b%Y" --date="${BACKUP_RETAIN_DAYS} days ago"`

    # if [ ! -z ${DB_BACKUP_PATH} ]; then
    #       cd ${DB_BACKUP_PATH}
    #       if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then
    #             rm -rf ${DBDELDATE}
    #       fi
    # fi

    ### End of script ####
  • 사용자 이름, 비밀번호, 이름 있는 스크립트입니다 전달자로써 누르기만 하면 우리 데이터베이스 (또는 데이터베이스 둘 이상의) * 포트 번호를 또 다른 경우.

스크립트입니다 명령을 사용하여 실행할 수 있다.

sudo ./script.sc

난 또 볼 수 있는 제안하세요 스케쳐내 결과적으로 같은 파일이: 장애 발생 또는 성공적인 백업, 다음 명령을 사용하여 다음과 같이.

sudo ./myshellsc.sh 2>> Backup-Report.log

감사합니다.

해설 (0)