定时自动备份mysql数据库,并发送到远程服务器,删除过期本地备份

在实际项目中,遇到有客户机房断电导致数据库数据丢失的问题,又因为备份容灾不及时,导致部分数据恢复不了。使用Linux的自动定时任务命令crontab对数据库进行定时备份可以减少这种情况发生。但这样还不够安全,万一本地磁盘坏了,造成的损失将无法弥补。


1、创建脚本备份数据库

新建备份文件并赋予可以执行的权限

mkdir -p /home/mysql_backup/

touch /home/mysql_backup/mysql_backup.sh

chmod 551 /home/mysql_backup/mysql_backup.sh

编辑/home/mysql_backup/mysql_backup.sh

vim /home/mysql_backup/mysql_backup.sh


# Name:mysql_backup.sh

# This is a ShellScript For Auto DB Backup and Delete old Backup

#备份地址

backupdir=/home/mysql_backup

#备份文件后缀时间

time=_` date +%Y_%m_%d_%H_%M_%S `

#需要备份的数据库名称

db_name=test

#mysql 用户名

#db_user=

#mysql 密码

#db_pass=

#mysqldump命令使用绝对路径

mysqldump --all-databases -u $db_user -p$db_pass | gzip > $backupdir/$time.sql.gz

#删除7天之前的备份文件

find $backupdir -name "*.sql.gz" -type f -mtime +7 -exec rm -rf {} \; > /dev/null 2>&1


2.定时执行脚本


编辑crontab

vim /etc/crontab

在最后一行加入

* */1 * * * root /home/mysql_backup/mysql_backup.sh

重启crontab

service crond restart


3.备份数据到远程服务器

     远程手动备份数据费时费力且不及时。最好的方法就是通过脚本实现远程自动互备。但远程无论是通过SSH登陆,还是通过scp拷贝文件都需要输入密码。为了克服这个问题,首先需要实现不需要密码的SSH登陆,这样就可以使用 rsync,scp,rexec等命令来做的远程备份了。

前提:本地服务器:A, 远程服务器:B

3.1 生成密钥对

假设A,B两服务器,现在需要在A机上用root登陆B机,而不需要输入密码。那我们可按照下面的步骤来做:

3.1.1 在本地服务器A上生成rsa证书

在本地服务器A上生成rsa证书,运行命令:

ssh-keygen -t rsa

 cp生成rsa公钥证书到远程服务器B

使用scp命令进行远程复制,将A机生成的id_rsa.pub.A拷贝到远程服务器B的/root/.ssh目录下

scp /root/.ssh/id_rsa.pub.A root@远程服务器ip:/root/.ssh/

这里使用scp命令需要输入密码,当我们把下面的第三步执行完毕之后,以后本地服务器A使用scp命令复制文件到远程服务器B的话,就不需要再次输入密码。

3.2、密钥配对

3.2.1 创建authorized_keys文件

当上面将服务器A上的id_rsa.pub.A 文件copy到了服务器B后,现在我们在 B 的/root/.ssh下创建authorized_keys文件,使用如下命令

touch authorized_keys

3.2.2 将id_rsa.pub.A文件内容追加到authorized_keys 文件中

通过 cat 命令 把id_rsa.pub.A 追写到 authorized_keys 文件中,命令依次如下:

cat id_rsa.pub.A >> authorized_keys

3.3 修改authorized_keys文件的权限

执行如下命令,修改authorized_keys文件的权限

chmod 400 authorized_keys


authorized_keys文件的权限很重要,如果设置为777,那么登录的时候,还是需要提供密码的。

3.4 测试

测试服务器A使用scp命令复制文件到服务器B是否还需要密码

在服务A上,再次使用刚才的命令,发现已经可以不需要输入密码。

最后修改mysql_backup.sh的脚本,达到自动备份数据库到远程服务器。

查看:最终脚本

你可能感兴趣的:(定时自动备份mysql数据库,并发送到远程服务器,删除过期本地备份)