Mysql定时数据库备份实现的保姆级教程
作者:拙野
MySQL 是一种全球广泛使用的关系型数据库管理系统,它存储的数据不仅非常宝贵,而且往往无法替代。因此,确保这些重要数据的安全至关重要,定期进行备份就显得尤为重要。为了进一步增强数据的安全性,我们建议采用跨服务器备份策略,即将数据备份到不同的物理或虚拟服务器上。这样做可以作为一个额外的安全保障,有效防止因单点故障而导致的数据丢失风险。简单来说,就是把重要文件同时保存在几个不同的地方,这样即使一个地方出了问题,其他地方还有备份,从而更好地保护我们的资料安全。
一、需要解决的问题
想要实现mysql数据跨服务器备份,需要先解决如下问题:
1、如何传输文件?
在Linux系统中,我们可以利用scp
命令来实现文件和目录的安全传输。scp
是“secure copy”的缩写,它基于SSH协议,能够在远程服务器之间提供加密的文件拷贝服务,确保数据传输的安全性。简易语法如下:
scp file_source file_target
此处,我们是从本地复制文件到远程,所以,大概命令就如下:
scp /opt/backup/mysql/database.sql root@12.17.11.170:/opt/backup/mysql
上面命令的意思就是将本地文件/opt/backup/mysql/database.sql复制到12.17.11.170服务器的/opt/backup/mysql目录下。所以,执行这个命令之前,要保证本地对应目录和文件都存在。12.17.11.170服务器上的对应目录也应该存在。
2、如何备份数据库?
备份数据库我们使用mysql自带的备份命令mysqldump即可。基本语法如下:
mysqldump -h [IP] -u[mysql用户] -p[mysql密码] [数据库] >脚本名
3、如何建立一个定时任务?
我们可以利用Linux系统的crontab定时任务,去实现固定时间自动执行脚本。基本语法如下:
[定时频率表达式] sh [sh脚本文件]
上述问题,解决后,我们就不难得出实施的步骤。
二、实施步骤
1、建立SSH公钥,实现无密码登录
我们使用scp命令传输文件的时候,是需要输入对方服务器的密码的。这里,我们为了不使用密码登录,来采取建立公钥的方式,达到免登录的效果。
1)服务器A上添加ssh公匙
ssh-keygen -t rsa
直接按回车建默认目录生成即可。如果再提示已经生成过shh公钥,则取消,去/root/.ssh目录下查看即可。 产生如下两个文件:
2)将id_rsa.pub文件拷贝到服务器B的/root/.ssh目录下,并命名authorized_keys,如果B服务器已经有authorized_keys文件,就直接将id_rsa.pub文件内容直接拷贝到authorized_keys中即可。
2、编写备份数据库脚本
1)、创建如下sh脚本文件backupsql.sh
#!/bin/bash #备份路径 BACKUP=/opt/backup/mysql #当前时间 DATETIME=$(date +%Y-%m-%d) echo "===备份开始===" echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql" #数据库地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=zhuoye521 #创建备份目录 #[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME" #后台系统数据库 DATABASE=zhuoye echo $DATABASE-$DATETIME #mysqldump -u${DB_USER} -p${DB_PW} --single-transaction --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql mysqldump -h localhost -u${DB_USER} -p${DB_PW} ${DATABASE} >${BACKUP}/$DATABASE-$DATETIME.sql echo "===导出成功,开始传输===" #压缩成tar.gz包 cd $BACKUP #tar -zcvf $DATETIME.tar.gz $DATETIME #备份到服务器B scp $DATABASE-$DATETIME.sql root@12.17.11.170:/opt/backup/mysql #删除备份目录 #rm -rf ${BACKUP}/$DATETIME #删除10天前备份的数据,这边可以自行更改 #find $BACKUP -mtime +10 -name "*.sql" -exec rm -rf {} \; echo "===数据库备份到服务器成功==="
注意:要保证A、B服务器上都已经有/opt/backup/mysql这个目录。
脚本赋权:
chmod 775 backupsql.sh
2)、执行脚本文件可以在B服务器上/opt/backup/mysql成功出现sql脚本,即脚本无问题。
这一步手动执行不仅是验证你的脚本是不是能够正确产生并传输到B服务器的指定目录,还因为首次执行的时候会需要手动确认一次。如下图,输入yes即可:
如果你不手动执行一次,可能导致定时任务每次执行的时候都会卡到这个需要确认是否继续的步骤。
注意:细心点你会发现navicate导出的sql脚本要比我们使用mysqldump导出的脚本要大,这并不是因为你的数据缺失了,而是使用mysqldump导出的sql文件中会把尽可能多的数据放到一条“insert”语句中,而navicat导出的sql文件每条“insert”语句只对应一条数据。这也就是,使用mysqldump导出的备份脚本,在执行的时候速度更快的原因。
3、编写定时任务
1)、编辑定时任务文件
crontab -e
2)、输入如下内容,后保存退出
#表示每天23:59自动执行代码。需要注意的是前面是分钟,后面是小时
59 23 * * * sh /opt/backup/mysql/backupsql.sh
3)、重启服务
service crond restart
注:如果重启失败,可能就是你第二步的时间写错了。要注意前面是分钟,后面是小时,不要写反了!
总结
到此这篇关于Mysql定时数据库备份实现的文章就介绍到这了,更多相关Mysql定时数据库备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!