MySQL数据库自动备份脚本(Docker 容器或 linux 直装)


1.脚本内容:

#!/bin/bash
echo '##########################################'
echo '###### The database is automatically backed up at 01:00 am every day ######'
echo '##########################################'
# Setting environment variables
DATE=$(date +%Y%m%d)
# 数据库用户名
USERNAME=root
# 密码
PASSWORD=123
# 要备份的数据库
DB=database_name
#DB1=xxxx
# ubuntu 系统非 root 用户,要将备份产生的文件放到 xxx 用户所在的目录下,否则必须使用 sudo 输入管理员密码执行此脚本。
DIR=/home/xxx/data/mysqk_bak/mysql-xxxx_bak
echo 'Get system date: ' $DATE
 
if [ ! -d "$DIR" ]; then
mkdir $DIR
fi
cd $DIR
 
echo 'backup started...' $(date "+%Y-%m-%d %H:%M:%S")
# 备份 docker 容器中的数据库
# docker exec -i 容器名称 mysqldump -u用户名 -p密码 要备份的数据库名称 | gzip > 要打包到的文件名称
docker exec -i q18qtjtx7z0qhc mysqldump -u$USERNAME -p$PASSWORD $DB | gzip > database_name_$DATE.sql.gz
# 备份 直接安装在 linux 系统中的数据库
#/usr/bin/mysqldump -u$USERNAME -p$PASSWORD $DB2 | gzip > xxx_$DATE.sql.gz
# just backup the latest 7 days
find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
#find ${DIR} -name "database_name_*.sql.gz" -type f -mtime +7 -exec rm {} \; > /dev/null 2>&1
echo 'backup completed!' $(date "+%Y-%m-%d %H:%M:%S")

2.Linux添加定时任务

2.1 Ubuntu

# 给脚本文件赋权

chmod +x bak_mysql.sh 或 chmod 777 bak_mysql.sh

# 添加定时任务,每天1点执行

crontab -e
0 1 * * * sudo sh /home/xxxx/bak_mysql.sh

# 重启crond 生效,或直接service cron reload

[sudo] service cron reload

[sudo] service cron restart

2.2 CentOS

# 给脚本文件赋权

chmod +x bak_mysql.sh

# 添加定时任务,每天1点执行

crontab -e
00 1 * * * /usr/local/mysql/bak_mysql.sh

# 重启crond 生效,或直接service crond reload

service crond status

service crond stop

service crond start


3.可能遇到的问题

3.0 如执行脚本出现 command not found

3.0.1. 将新编写的shell脚本路径添加到系统的环境变量中:

export PATH=$PATH:/path   # 当时有效


3.0.2. 给新编写的shell脚本添加可执行权限:

chmod +x /path/脚本.sh

3.1Ubuntu

3.1.1更改crontab的默认编辑器

vi /root/.selected_editor

修改以下内容:

SELECTED_EDITOR="/usr/bin/vim.basic"

保存,退出。crontab -e,即可使用vim编辑器。

3.1.2执行sh脚本报错

报错内容:/bin/sh^M: bad interpreter: No such file or directory

解决方法:

vi 报错脚本,按Esc,在命令模式下输入

: set ff=unix

回车,保存退出,再次执行脚本即可。

————————————————

版权声明:本文为CSDN博主「Engine523」的原创文章,

遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_32482743/article/details/115104259