mysql定时备份
最近把公司 devops 总算搞起来了,然后把线上的 mysql 数据库定期备份到 oss 上。
中间遇到不少头痛问题,比如 oss 挂载到 centos 中,docker 备份时脚本直接执行正常,放到 crontab 中执行失败,不能发送邮件等。
工作环境
系统: centos 7 硬件: Aliyun ECS
oss 挂载
- 安装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
- 账户配置
创建 /etc/passwd-ossfs
文件并添加如下内容:
--- 在 passwd-ossfs 文件中放入 bucket:AccessKeyID:AccessKeySecret 格式存放即可 --- # echo bucket:XXXX:XXXXX > /etc/passwd-ossfs --- 修改 passwd-ossfs 访问权限 --- # chmod 640 /etc/passwd-ossfs
- 手动挂载
--- 非阿里云主机 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
- 自动挂载
修改 /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 端口来进行发送邮件
- 工具安装
# yum install -y mailx
- 配置帐号
阿里云封掉 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/
- 测试
$ 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 定时任务
- 定义备份存储位置:
# kubectl create -f - <<EOF kind: PersistentVolumeClaim apiVersion: v1 metadata: name: mysql-backup spec: accessModes: - ReadWriteOnce resources: requests: storage: 2Gi storageClassName: glusterfs-raid0 EOF
- 定义定时任务
# 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
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
成本和性能兼得,ECS推出t5实例无性能约束模式
如果你是阿里云突发性能实例的使用者,或者正打算入手一款入门级云主机,你是否注意到在2018杭州云栖大会弹性计算平台技术专场上提到的新款突发性能实例 – t5无性能约束实例? 无性能约束是什么概念?先来看看当时现场的介绍图: 简而言之,对于突发性能实例来说,在性能负载大于基线时会消耗积分(当然,反之性能负载小于基线时会积累积分),当积分消耗完后,t5标准实例的性能会被限制在基线。而t5无性能约束实例可以通过预支积分,或者付费的方式,继续维持系统性能,相当于信用卡版本的t5实例,灵活度更高,对突发场景的适应性更好,说是成本和性能兼得完全合适。 现在我们来看看这个“信用卡版本t5”怎么玩: 小A购买了一台1核1G的t5,规格:ecs.t5-lc1m1.small,安装Linux系统。 实例创建后,小A会获取初始CPU积分30分,在实例启动时,小A
- 下一篇
Auto Scaling 通过启动模板来使用伸缩服务
功能说明 AutoScaling伸缩组长期依赖的伸缩配置信息本质上就是Ecs实例配置,考虑到Ecs推出了持久化Ecs实例配置的启动模板,因此AutoScaling 将伸缩组与启动模板结合,用户可以通过直接在创建伸缩组时选择启动模板来使用弹性伸缩 伸缩组使用启动模板的默认版本与最新版本而非指定版本时,可以直接通过更改启动模板的默认版本与最新版本,来达到修改伸缩组内伸缩实例的配置的目的,使用伸缩组更灵活 用户可以通过【Ecs售卖页】、【启动模板页】、现有Ecs实例的【实例设置】-> 【保存为启动模板】等多种方式创建启动模板,然后在通过启动模板创建伸缩组,降低了弹性伸缩的使用成本 后续Ecs控制台的【实例启动模板】列表将增加创建弹性伸缩的入口,方便用户通过启动模板使用弹性伸缩 操作步骤 1.前往 Auto Scaling 控制台 点击【创建伸
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS7编译安装Cmake3.16.3,解决mysql等软件编译问题
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8编译安装MySQL8.0.19
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Hadoop3单机部署,实现最简伪集群