最近公司服务器到期,需要迁移到新服务器上,为了以后不再麻烦,所以把所有用到的软件使用Docker部署起来,先来处理数据库。此处不再详解Docker的安装,网上有很多。
一.MySQL数据库的部署
首先来安装MySQL
创建持久化文件
mkdir -p /u01/mysql/data && mkdir -p /u01/mysql/conf
部署mysql
docker run -d --name mysql -v /u01/mysql/data:/var/lib/mysql -v /u01/mysql/conf:/etc/mysql/ -e MYSQL_ROOT_PASSWORD=数据库密码 -e TZ="Asia/Shanghai" -p 3306:3306 mysql:5.7.30 --lower_case_table_names=1 --default-time_zone='+8:00' --sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
- 参数说明(注意:参数横线都为英文的短横线):
- --name:部署MySQL的docker容器
- -v:目录挂载
- -e:指定环境变量参数-p:端口映射,前面为宿主机开放端口,后面为MySQL容器中开放给MySQL使用的端口
-
MYSQL_ROOT_PASSWORD:数据库密码
-
TZ:时区,国内一般使用的都是Asia/Shanghai
-
- mysql:5.7.30:镜像版本,这里使用的是5.7
-
--lower_case_table_names=1:设置MySQL数据库不区分大小写
-
--default-time_zone='+8:00':设置MySQL时区
-
--sql_mode:定义了mysql应该支持的sql语法,数据校验等
其次,做数据库备份
创建mysql_backup.sh
#!/bin/bash #设置mysql的登录用户名和密码 mysql_user="root" mysql_password="数据库密码" mysql_host="IP地址" mysql_port="数据库端口" # 需要备份的数据库 #备份一个或者多个库,中间空格 #database="--databases 数据库1 数据库2" #备份全部 database="--all-databases" # mysql容器名称 docker_name="mysql容器名称" # 备份文件存放地址(此处是我使用的地址,自行创建文件) backup_location=/u01/backup/backupFile/mysql # 是否删除过期数据 expire_backup_delete="ON" #设置过期时长(天) expire_days=10 backup_time=`date +%Y%m%d%H%M` backup_dir=$backup_location # 备份指定数据库中数据 docker exec ${docker_name} mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database > $backup_dir/$backup_time.sql # 删除过期数据 if [ "$expire_backup_delete" == "ON" -a "$backup_location" != "" ];then `find $backup_location -name "*.sql" -type f -mtime +$expire_days -exec rm -rf {} ; > /dev/null 2>&1` echo "Expired backup data delete complete!" fi
# 下面两步如果不需要的话注释掉就可以了 # 打包 tar -czvf $backup_dir/$backup_time.sql.tar.gz –C $backup_dir/$backup_time.sql
# 发送邮件提醒 echo $(date +%F)"日MySQL数据库已完成备份!"|mail -s $(date +%F)"日数据库备份" xxxx@126.com
保存文件,并给文件赋权 chmod 777 mysql_backup.sh
增加Linux定时任务 crontab -e
1 0 * * * /u01/backup/mysql_backup.sh #我这里是每天晚上12点备份文件
如果使用邮件提醒,则需要配置邮件信息(此处已126邮箱为例)
- 开启服务POP3/SMTP服务,如图
-
开启后会生成一个密匙,请拷贝下来,只会出现一次,别丢失了
- 在Linux服务器中执行安装邮箱命令:yum -y install mailx
- 修改文件,添加以下内容: vim /etc/mail.rc
可能遇到的问题
-
单独执行mysql_buckup.sh文件可以执行成功,但是通过定时任务时失败
- 原因:使用docker exec 备份数据时不能加 -it ,刚开始部署时一直不成功,因为加这个参数就相当于开启了一个终端,计划任务是无法进入任何终端的
- 发送邮件加附件时无法发送成功
- 原因:邮件使用-a可以增加附件,如最后一行可以改为:echo $(date +%F)"日MySQL数据库已完成备份,具体内容见附件"|mail -s $(date +%F)"日数据库备份" -a $backup_dir/$backup_time.sql.tar.gz xxxx@126.com,但是当附件超过限制大小后会导致发送不成功,可以使用/usr/sbin/postconf | grep size命令查看限制,如果确实需要发送大文件,则可以修改配置文件,vim /etc/postfix/main.cf增加以下内容:
mailbox_size_limit = 字节数
message_size_limit = 字节数
- 原因:邮件使用-a可以增加附件,如最后一行可以改为:echo $(date +%F)"日MySQL数据库已完成备份,具体内容见附件"|mail -s $(date +%F)"日数据库备份" -a $backup_dir/$backup_time.sql.tar.gz xxxx@126.com,但是当附件超过限制大小后会导致发送不成功,可以使用/usr/sbin/postconf | grep size命令查看限制,如果确实需要发送大文件,则可以修改配置文件,vim /etc/postfix/main.cf增加以下内容: