mysql定时备份

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
对象存储 OSS,标准 - 本地冗余存储 20GB 3个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 最近把公司 devops 总算搞起来了,然后把线上的 mysql 数据库定期备份到 oss 上。中间遇到不少头痛问题,比如 oss 挂载到 centos 中,docker 备份时脚本直接执行正常,放到 crontab 中执行失败,不能发送邮件等。

最近把公司 devops 总算搞起来了,然后把线上的 mysql 数据库定期备份到 oss 上。

中间遇到不少头痛问题,比如 oss 挂载到 centos 中,docker 备份时脚本直接执行正常,放到 crontab 中执行失败,不能发送邮件等。

工作环境

   系统: centos 7
   硬件: Aliyun ECS

oss 挂载

  1. 安装ossfs

aliyun 仓库 中存在 类似 亚马逊云 oss mount 的工具,然后通过如下方式进行安装即可:

# wget https://github.com/aliyun/ossfs/releases/download/v1.80.5/ossfs_1.80.5_centos7.0_x86_64.rpm
# yum localinstall ossfs_1.80.5_centos7.0_x86_64.rpm --nogpgcheck
  1. 账户配置

创建 /etc/passwd-ossfs 文件并添加如下内容:

--- 在 passwd-ossfs 文件中放入 bucket:AccessKeyID:AccessKeySecret 格式存放即可 ---
# echo bucket:XXXX:XXXXX > /etc/passwd-ossfs

--- 修改 passwd-ossfs 访问权限 ---
# chmod 640 /etc/passwd-ossfs
  1. 手动挂载
--- 非阿里云主机 url 使用外部访问链接 ---
# ossfs bucket /srv/ossfs -ourl=http://oss-cn-hangzhou.aliyuncs.com

--- 阿里云主机中 url 使用 内部链接 节约流量 ---
# ossfs bucket /srv/ossfs -ourl=http://oss-cn-hangzhou-internal.aliyuncs.com
  1. 自动挂载

修改 /etc/fstab 文件,实现自动 mount, 在其中增加如下配置即可

--- 非阿里云主机 url 使用外部访问链接 ---
ossfs#bucket /srv/ossfs fuse _netdev,url=http://oss-cn-hangzhou.aliyuncs.com,allow_other 0 0

--- 阿里云主机中 url 使用 内部链接 节约流量 ---
ossfs#bucket /srv/ossfs fuse _netdev,url=http://oss-cn-hangzhou-internal.aliyuncs.com,allow_other 0 0

然后使用 mount -a 来进行测试即可,如果没有报错即配置正确

ossfs 只能用 root 来进行操作

mail 命令发送邮件

由于 aliyun 主机把 25 端口封掉了,所以简单的配置 /etc/mail.rc 不一定好使,这里需要配 465 端口来进行发送邮件

  1. 工具安装
# yum install -y mailx
  1. 配置帐号
    阿里云封掉 25 端口后,使用 465 端口进行发送邮件,因此在 /etc/mail.rc 文件中进行如下修改:
set from=xxx@xxx.com
set smtp=smtps://smtp.exmail.qq.com:465
set smtp-auth-user=xxx@xxx.com
set smtp-auth-password=xxxxxx
set smtp-auth=login
set ssl-verify=ignore
# 证书存放位置
set nss-config-dir=/etc/pki/nssdb/

导入证书:

# echo -n | openssl s_client -connect smtp.exmail.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /etc/pki/nssdb/exmail.qq.crt
# certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/exmail.qq.crt
# certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/exmail.qq.crt
# certutil -L -d /etc/pki/nssdb/
  1. 测试
$ echo '日志内容' | mail -s '系统日志'  xxx@qq.com

定时备份db

mysql 执行在 docker 环境中,在宿主机上执行 docker 命令来生成相应的内容

#!/bin/bash

# 容器名称
docker_name=mysql

data_dir="/srv/ossfs/backup/db/"
docker exec -t ${docker_name} mysqldump -uuser -ppasswd --all-databases > "$data_dir/data_`date +%Y%m%d`.sql"
if [ $? -ne 0 ];then
    # 任务失败,发送邮件
    echo -e "Failed to backup the databases..." | mail -s 'Backup failed!!!' admin@xxx.com
    exit -1
fi
# 删除 7 天前的备份
find $data_dir -mtime +7 -name 'data_[1-9].sql' -exec rm -rf {} \;

然后通过 crontab -e 添加如下内容

0 2 * * * sh /srv/crons/mysql-backup.sh > /srv/logs/backup/mysql_dumps.log 2>&1

通过上述方式备份时 docker exec -it ... 中的 i 选项需要去掉,详细参考 # Error “The input device is not a TTY”

k8s 定时任务

  1. 定义备份存储位置:
# kubectl create -f - <<EOF
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: mysql-backup
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 2Gi
  storageClassName: glusterfs-raid0
EOF
  1. 定义定时任务
# kubectl create -f - <<EOF
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: mysql-backup
spec:
  schedule: "0 0 * * *"
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: mysql-backup
            imagePullPolicy: IfNotPresent
            image: mysql
            env:
            - name: MYSQL_BACKUP_USER
              value: root
            - name: MYSQL_BACKUP_USER_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: mysql-user-pwd
                  key: mysql-root-pwd
            - name: MYSQL_HOST
              value: mysql
            command:
            - /bin/sh
            - -c
            - |
              set -ex
              mysqldump --host=$MYSQL_HOST --user=$MYSQL_BACKUP_USER \
                        --password=$MYSQL_BACKUP_USER_PASSWORD \
                        --routines --databases appdb --single-transaction \
                        > /mysql-backup/mysql-`date +"%Y%m%d"`.sql
            volumeMounts:
            - name: mysql-backup
              mountPath: /mysql-backup
          restartPolicy: OnFailure
          volumes:
          - name: mysql-backup
            persistentVolumeClaim:
              claimName: mysql-backup
EOF

参考 在K8S集群中一步步构建一个复杂的MySQL数据库

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
目录
相关文章
|
存储 关系型数据库 MySQL
mysql数据库备份与恢复
MySQL数据库的备份与恢复是确保数据安全性和业务连续性的关键操作。
566 4
|
3月前
|
存储 关系型数据库 MySQL
在CentOS 8.x上安装Percona Xtrabackup工具备份MySQL数据步骤。
以上就是在CentOS8.x上通过Perconaxtabbackup工具对Mysql进行高效率、高可靠性、无锁定影响地实现在线快速全量及增加式数据库资料保存与恢复流程。通过以上流程可以有效地将Mysql相关资料按需求完成定期或不定期地保存与灾难恢复需求。
307 10
|
8月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
5月前
|
存储 关系型数据库 MySQL
【赵渝强老师】使用select...into outfile语句备份MySQL
本文介绍了MySQL中使用`SELECT...INTO OUTFILE`语句将表数据导出为文本文件的方法。通过示例演示了如何备份员工表(emp)的数据,包括创建存储目录、设置权限、配置参数`secure_file_priv`以及解决相关错误的过程。字段分隔符和行终止符可自定义,确保数据格式符合需求。最后展示了备份文件的内容,验证操作成功。
379 36
|
5月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mysqldump备份MySQL
本文介绍了 MySQL 自带的逻辑备份工具 mysqldump 的使用方法。通过 mysqldump,可以将数据库中的数据转换为对应的 SQL 插入语句,便于备份和还原。文章详细说明了如何备份所有数据库、指定数据库及特定表,排除某些表不备份的操作,以及删除数据库后如何通过备份文件恢复数据。同时提供了视频讲解和具体命令示例,帮助用户更好地理解和应用该工具。
241 5
|
6月前
|
关系型数据库 MySQL Linux
实现MySQL数据库的定时自动备份脚本。
拿走,不谢,这个脚本配方(指引)保证你的数据库数据像蛋糕店一样地天天更新,还能确保老旧的蛋糕(数据)不会堆积满仓库。这下可好,数据安全有保障,数据库管理员也能轻松一点,偶尔闲下来的时候,煮杯咖啡,看个剧岂不美哉?别忘了偶尔检查一下你的自动备份是否正常工作,以防万一蛋糕机器出了点小差错。
320 20
|
5月前
|
存储 SQL 关系型数据库
【赵渝强老师】使用mydumper备份MySQL
本文介绍了使用mydumper工具进行MySQL数据库备份与恢复的操作方法。相比单线程工作的mysqldump,mydumper支持多线程,速度提升可达10倍。其功能包括事务性表快照、快速压缩、导出binlog等,并提供详细的参数说明和操作步骤。文章通过实例演示了安装mydumper、创建存储目录、全库备份、指定数据库及表备份、删除数据库以及使用myloader恢复数据的完整流程,并附带视频讲解,帮助用户更好地理解和应用该工具。
221 0
|
7月前
|
关系型数据库 MySQL Linux
在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾
以上就是在Linux环境下备份Docker中的MySQL数据并传输到其他服务器以实现数据级别的容灾的步骤。这个过程就像是一场接力赛,数据从MySQL数据库中接力棒一样传递到备份文件,再从备份文件传递到其他服务器,最后再传递回MySQL数据库。这样,即使在灾难发生时,我们也可以快速恢复数据,保证业务的正常运行。
339 28
|
7月前
|
存储 关系型数据库 MySQL
利用Cron表达式实现MySQL数据库的定时备份
以上就是如何使用Cron表达式和mysqldump命令实现MySQL数据库的定时备份。这种方法的优点是简单易用,而且可以根据需要定制备份的时间和频率。但是,它也有一些限制,例如,它不能备份MySQL服务器的配置文件和用户账户信息,也不能实现增量备份。如果需要更复杂的备份策略,可能需要使用专门的备份工具或服务。
189 15
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
710 3

推荐镜像

更多