1 先确保安装了 crontab:
操作步骤
1. 确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
2. 安装 crontab
执行 yum install -y vixie-cron
3. 确认是否安装成功:
执行 crontab -l
4. 看是否设置了开机自动启动
chkconfig --list crond5. 启动crontab
service crond start
2 建立 文件夹 可以自行设置
/home/mysql_dump
/home/mysql_dump/data
3 编写脚本
cd /home/mysql_dump
touch mysql_back.sh
vi mysql_back.sh
内容为:
DB_NAME="数据库名"
DB_USER="账号"
DB_PASS="密码"
BIN_DIR="/home/mysql5.6.27/bin"
BCK_DIR="/home/mysql_dump/data"
DATE=`date "+%Y-%m-%d"`
mkdir -p $BCK_DIR
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME > $BCK_DIR/$DB_NAME.dump_$DATE.sql
4 设置 定时任务
root用户登录
crontab -e
输入59 23 * * * /home/mysql_dump/mysql_back.sh
说明:
前面5列 分别代表 分钟/小时/日/月/周 *表示所有
例子是 每天 23:59执行
5 如果失败呢?
1 手工执行 /home/mysql_dump/mysql_back.sh 检查错误
2 如果1成功,则说明脚本没问题
可以crontab -e 把时间设置为下一分钟
然后再打开一个终端 查看 日志 tail -f /var/log/cron
3 注意!mysql_back.sh的所有者必须是root否则 出错!
-------------------------------上面完成了,每天 23:59自动 备份数据库的功能--------------------------------------------
-----------如果 服务器奔溃了,数据就丢掉了, 我的天,为了安全起见,可以单独搞一个专用的备份服务器,所有业务系统的数据库都存一份到这里备份------------
自动将不同服务器的 自动备份数据库文件 放到统一的服务器上,防止单个服务器奔溃,导致数据丢失
1 备份服务器 a (192.168.0.1),业务系统服务器 b(192.168.0.2) 和c (192.168.0.3)
2 在a服务器 建立2个文件夹 mkdir /home/zms/backupdb/a mkdir /home/zms/backupdb/b
3 分别登录 b和c 生成 授权文件,以便 scp传输文件的时候不用输入密码
ssh登录到b : ssh-keygen -t rsa 回车,提示存放的位置,一直回车
[root@iZbp11470vqghi5nzu90vmZ ~]# ssh-keygen -t rsa
ssh登录到a: cd ~
mkdir .ssh (如果存在则不需要建立)
在b上操作: scp -P22 /root/.ssh/id_rsa.pub root@192.168.0.1:~/.ssh/authorized_keys
输入密码复制文件
测试,重启服务器a后发现,在b上再传输任何一个文件到 b ,已经不提示要密码了
scp -P22 测试文件.sql root@192.168.0.1:/home/zms/backupdb/a
接着搞第2台服务器 c
ssh登录到c : ssh-keygen -t rsa 回车,提示存放的位置,一直回车
由于备份服务器已经存在authorized_keys文件了,所以这里需要使用cat
scp -P22 /root/.ssh/id_rsa.pub root@192.168.0.1:~/.ssh/c.pub
输入密码 复制
cat ~/.ssh/c.pub >> ~/.ssh/authorized_keys
重启服务器a ,这个时候从c复制文件到A 也 不需要密码了
4 分别修改 b和c 上的 自动计划任务
vi mysql_back.sh
在最后面一行加入 自动搬迁 文件的命令
scp -P1981 $BCK_DIR/$DB_NAME.dump_$DATE.sql root@192.168.0.1:/home/zms/backupdb/gc
5 测试
mysql_back.sh //可以在 服务器a 看到 刚才创建的sql文件了。 Ok