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

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

作者: eastpurple | 来源:发表于2019-01-08 16:25 被阅读0次

    在实际项目中,遇到有客户机房断电导致数据库数据丢失的问题,又因为备份容灾不及时,导致部分数据恢复不了。使用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数据库,并发送到远程服务器,删除过期本地备

          本文链接:https://www.haomeiwen.com/subject/azkbrqtx.html