前言
一个成型的项目不单单是可以运行那么简单,它既要包含日志的收集、异常错误的捕获、运行间的流畅、容错时的处理,此处讲一讲数据库容错!
一、常见问题
- 服务器宕机
- 服务器网络波动导致近乎瘫痪
- 服务器数据误删除
针对以上的认为情况的解决方案:①②采用多服务器解决(主从、主主),③采用数据库解决(备份)
二、数据备份
- crontab实现
- celery实现
- 主备实现
2.1、crontab实现
2.1.1、编写task.sh文件(推荐使用绝对路径)
#!/bin/bash
time=`date +%Y%m%d`
###################MySql数据库配置信息#######################
host=数据库用户名 # 如 "127.0.0.1"
user=数据库密码 # 如 "root"
port=数据库端口 # 如 3306
dbname=数据库名称 # 如 "test"
mysql_back_path=sql数据文件存放位置 # 如 "/home/user/work"
###################数据库配置信息#######################
# 数据导出语法,绝对路径,相应地crontab就不需要写全路径了
mysqldump --defaults-file=$mysql_back_path/my.conf -h $host -u $user -P $port $dbname > $mysql_back_path/$time.sql
# 数据导出语法,相对路径,相应地crontab需要指明路径
# mysqldump --defaults-file=my.conf -h $host -u $user -P $port $dbname > $time.sql
2.1.1、编写my.conf文件
此文件写的是数据库密码。为什么不写在task.sh文件中?因为为了安全性考虑,linux会限制在语句中直接输入密码,会抛出异常错误。
[client]
password=123456
2.1.1、编写crontab任务
# 进入crontab命令管理页
crontab -e
# 编辑定时任务,语法类似vi
# 文件task.sh如果是绝对路径,*/1 表示一分钟执行一次,>>表示将termnal信息重定向到sql.log中(前提是有输出,否则sql.log中依旧为空),2>&1表示正常与错误信息均重定向到sql.log中
*/1 * * * * /home/user/work/task.sh>>/home/user/work/sql.log 2>&1
# 文件task.sh如果是相对路径
*/1 * * * * cd /home/user/work && /home/user/work/task.sh>>/home/user/work/sql.log 2>&1