# MySQL backup script

**URL:** https://www.batmunkh.net/t/mysql-backup-script/97
**Category:** Linux, \*nix
**Tags:** script, mysql, backup
**Created:** [January 19, 2017, 8:17pm UTC](https://www.batmunkh.net/t/mysql-backup-script/97 "2017-01-19T20:17:06Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![batmunkh](https://www.batmunkh.net/user_avatar/www.batmunkh.net/batmunkh/32/297_2.png) [@batmunkh](https://www.batmunkh.net/u/batmunkh)
#### Post date: [January 19, 2017, 8:17pm UTC](https://www.batmunkh.net/t/mysql-backup-script/97/1 "2017-01-19T20:17:06Z")

</div>

Ихэнх сайтын хувьд MySQL баазыг түлхүү ашигладаг билээ. Тиймээс энэ удаад MySQL санг нөөцлөн өгөгдсөн хугацаагаар хадгалж имэйл ээр мэдэгддэг скрипт оруулъя.

```
###############---MYSQL BACKUP SCRIPT---#############
#
# By: BATMUNKH Moltov
# facebook.com/Batmunkh.Moltov
#
# 
################---WWW.BATMUNKH.NET---################
#
# Боломжууд:
# Нөөцлөх хавтсыг зааж өгч болох бөгөөд тухайн 
# өдрөөр уг хавтсанд шинэ хавтас үүсгэн файлуудыг хадгална
# Шаардлагагүй баазыг алгасах боломжтой
# Бүх баазыг тус тусад нь gzip хэлбэрээр шахаж хадгална
# Хэд хоног хадгалахыг тохируулах боломжтой
# Имэйлээр мэдэгдэнэ
# .........шинэлэгдсээр л байна....
#

# сонордуулга хүлээн авах имэйл
ADMIN_EMAIL="monitoring@domain.com"

#нөөцлөх шаардлагагүй баазын жагсаалт. 'db1','db2' гэх мэт оруулах
DATABASES_TO_EXCLUDE=""

#үндсэн авах шаардлагагүй баазууд
EXCLUSION_LIST="'information_schema','mysql','performance_schema'"

#хаана хадгалах зам
DIR_BACKUP=/backup/db/`date +\%G-\%m-\%d`

#backup файлыг хэд хоног хадгалах
RETENTION_BACKUP_DAY=20

#Үүнээс хойшхи кодыг ойлгохгүй бол засварлах шаардлагагүй

# tsag tootsoolohod ashiglana
TIME_START=`date +%s`

find ${DIR_BACKUP} -mindepth 1 -mtime +${RETENTION_BACKUP_DAY} -delete
mkdir -p ${DIR_BACKUP}
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
    EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
MYSQLDUMP_OPTIONS="--routines --triggers --add-drop-table --skip-lock-tables -v"
for DB in `mysql -ANe"${SQLSTMT}"`
do
    #MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
    mysqldump ${MYSQLDUMP_OPTIONS} ${DB} -u root | gzip > ${DIR_BACKUP}/${DB}.sql.gz
done
TIME_FINISH=`date +%s`

echo `hostname` 'mysql backup done. ' `date` `who` | mail -s `hostname`" mysql backup done"`expr ${TIME_FINISH} - ${TIME_START}`" seconds" ${ADMIN_EMAIL}

```

Уг кодыг жишээ нь /script/backup\_db.sh гэж хадгалаад cronjob дээр нэмж хэдий хугацаанд хэрхэн нөөцлөлт авахаа тохируулна.

Автоматжуулах жишээ комманд:

```
[decoder@linux] crontab -e
# Дараах мөрийг нэмж өгнө
18 03 * * * sh /scripts/backup_db.sh

```

Update:

```
2017.01.21 - Цаг тооцоолол нэмлээ
2017.04.28 - bug fixed. (mysqldump ${MYSQLDUMP_OPTIONS} ${MYSQLDUMP_DATABASES} -u root | gzip > ${DIR_BACKUP}/${DB}.sql.gz)
```

---

<div class="post-metadata">

### Author: ![uurtsaikh](https://www.batmunkh.net/user_avatar/www.batmunkh.net/uurtsaikh/32/570_2.png) [@uurtsaikh](https://www.batmunkh.net/u/uurtsaikh)
#### Post date: [December 10, 2019, 4:38am UTC](https://www.batmunkh.net/t/mysql-backup-script/97/2 "2019-12-10T04:38:46Z")

</div>

Replication tei db deer Option deeree --master-data=2 geed backup avdag bol zugeer. Backup avax ueiin position.

---

<div class="post-metadata">

### Author: ![batmunkh](https://www.batmunkh.net/user_avatar/www.batmunkh.net/batmunkh/32/297_2.png) [@batmunkh](https://www.batmunkh.net/u/batmunkh)
#### Post date: [August 10, 2023, 10:02am UTC](https://www.batmunkh.net/t/mysql-backup-script/97/3 "2023-08-10T10:02:00Z")

</div>

/backup/db/YYYY/MM/ хавтас үүсгэж table тус бүрээр авдаг болголоо. Бүтнээр нь мөн тухайн хавтсанд баазын нэрээр файл үүсгэж хадгална.

```auto
ADMIN_EMAIL="notif@domain.mn"

DATABASES_TO_EXCLUDE=""

EXCLUSION_LIST="'information_schema','mysql','performance_schema'"

DIR_BACKUP=/backup/db/`date +\%G/\%m/\%d`
DIR_BACKUP_ROOT=/backup/db/

#backup файлыг хэд хоног хадгалах
RETENTION_BACKUP_DAY=20

#Үүнээс хойшхи кодыг ойлгохгүй бол засварлах шаардлагагүй

# tsag tootsoolohod ashiglana
TIME_START=`date +%s`

#цэвэрлэгээ хийх
find ${DIR_BACKUP_ROOT} -mindepth 1 -mtime +${RETENTION_BACKUP_DAY} -delete

mkdir -p ${DIR_BACKUP}
for DB in `echo "${DATABASES_TO_EXCLUDE}"`
do
    EXCLUSION_LIST="${EXCLUSION_LIST},'${DB}'"
done
SQLSTMT="SELECT schema_name FROM information_schema.schemata"
SQLSTMT="${SQLSTMT} WHERE schema_name NOT IN (${EXCLUSION_LIST})"
MYSQLDUMP_DATABASES="--databases"
MYSQLDUMP_OPTIONS="--routines --triggers --add-drop-table --skip-lock-tables -v"
for DB in `mysql -ANe"${SQLSTMT}"`
do
    #MYSQLDUMP_DATABASES="${MYSQLDUMP_DATABASES} ${DB}"
    mysqldump ${MYSQLDUMP_OPTIONS} ${DB} -u root | gzip > ${DIR_BACKUP}/${DB}.sql.gz

        for TABLE in `mysql -e "use ${DB}; show tables;" | awk 'NR!=1 {print}'`
        do
            mysqldump ${MYSQLDUMP_OPTIONS} ${DB} -u root ${TABLE} | gzip > ${DIR_BACKUP}/${DB}-${TABLE}.sql.gz
        done
done
TIME_FINISH=`date +%s`

#echo `hostname` 'mysql backup done. ' `date` `who` | mail -s `hostname`" mysql backup done"`expr ${TIME_FINISH} - ${TIME_START}`" seconds" ${ADMIN_EMAIL}
```
