Mysql定时数据库备份实现的保姆级教程

 更新时间:2024年12月13日 08:33:16   作者:拙野  
数据备份本身主要是为了预防一些意外,例如服务器或者个人电脑的硬件故障、人为的错误操作等情况,这篇文章主要给大家介绍了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定时数据库备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL如何按照年月来查询数据问题

    SQL如何按照年月来查询数据问题

    这篇文章主要介绍了SQL如何按照年月来查询数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • phpmyadmin中为站点设置mysql权限的图文方法

    phpmyadmin中为站点设置mysql权限的图文方法

    在一个服务器上一般来讲都不止一个站点,更不止一个MySQL(和PHP搭配之最佳组合)数据库。
    2011-03-03
  • MySQL 常见时间字段设置小结

    MySQL 常见时间字段设置小结

    本文详细探讨了MySQL中常见时间字段的设置和处理,包括DATETIME、DATE、TIME和TIMESTAMP等类型的介绍,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-11-11
  • Mysql排序的特性详情

    Mysql排序的特性详情

    这篇文章主要介绍Mysql排序的特性,新写了一个功能,自测和测试环境测试都没问题,但在生产环境会出现偶发问题。于是,加班到12点一直排查问题,终于定位了的问题原因:Mysql Limit查询优化导致。现抽象出问题模型及解决方案,分析给大家,避免大家踩坑,需要的朋友可以参考一下
    2021-10-10
  • Linux中安装MySQL5.7.42的详细教程

    Linux中安装MySQL5.7.42的详细教程

    这篇文章主要介绍了Linux中安装MySQL5.7.42,本文通过实例图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-09-09
  • MySQL中Union子句不支持order by的解决方法

    MySQL中Union子句不支持order by的解决方法

    这篇文章主要介绍了MySQL中Union子句不支持order by的解决方法,结合实例形式分析了在mysql的Union子句中使用order by的方法,需要的朋友可以参考下
    2016-06-06
  • Mysql中InnoDB与MyISAM索引差异详解(最新整理)

    Mysql中InnoDB与MyISAM索引差异详解(最新整理)

    InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存储结构等方面,InnoDB更适合事务型应用,而MyISAM适合只读或读多写少的场景,本文介绍Mysql中InnoDB与MyISAM索引差异,感兴趣的朋友一起看看吧
    2025-03-03
  • MySQL 实现数据分片进行数据查询的方案

    MySQL 实现数据分片进行数据查询的方案

    本文介绍MySQL数据分片技术,包括垂直分片和水平分片,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • mysql并发控制原理知识点

    mysql并发控制原理知识点

    在本篇文章里小编给大家整理的是一篇关于mysql并发控制原理知识点内容,需要的朋友们参考下吧。
    2020-02-02
  • MySQL常见的底层优化操作教程及相关建议

    MySQL常见的底层优化操作教程及相关建议

    这篇文章主要介绍了MySQL常见的底层优化操作教程及相关建议,包括对运行操作系统的硬件方面及存储引擎参数的调整等零碎方面的小整理,需要的朋友可以参考下
    2015-12-12

最新评论