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定时数据库备份内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL如何查询客户端连接情况

    MySQL如何查询客户端连接情况

    这篇文章主要介绍了MySQL如何查询客户端连接情况,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08
  • MySQL prepare语句的SQL语法

    MySQL prepare语句的SQL语法

    PREPARE语句用于预备一个语句,并指定名称statement_name,以后引用该语句
    2012-01-01
  • ssm框架如何调用mysql存储过程

    ssm框架如何调用mysql存储过程

    这篇文章主要介绍了ssm框架如何调用mysql存储过程,首先是建表,创建存储过程,本文结合示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 如何解决安装MySQL5.0后出现1607异常

    如何解决安装MySQL5.0后出现1607异常

    小伙们在安装mysql5.0的时候是不是遇到过1607异常问题,大家都是怎么解决的呢?下面小编跟大家分享我是如何解决安装MySQL5.0后出现1607异常的,需要的朋友可以参考下
    2015-10-10
  • linux mysql5.5升级至mysql5.7的步骤与踩到的坑

    linux mysql5.5升级至mysql5.7的步骤与踩到的坑

    这篇文章主要介绍了linux mysql5.5升级至mysql5.7的详细步骤,后面脚本之家小编为大家整理了多个补充,大家可以参考一下
    2021-01-01
  • MySql开发之自动同步表结构

    MySql开发之自动同步表结构

    这篇文章主要给大家介绍了关于MySql开发之自动同步表结构的相关资料,这样可以避免在开发中由于修改数据库字段导致的数据库表不一致问题,需要的朋友可以参考下
    2021-05-05
  • MySQL 8.0 可以操作 JSON 了

    MySQL 8.0 可以操作 JSON 了

    这篇文章主要介绍MySQL 8.0 如何操作 JSON ,经过漫长的测试,即将整体迁移至Mysql8.0; Mysql8.0 对于Json操作新增/优化了很多相关Json的API操作; 阅读了一下官方文档,虽然绝大多数的JSON操作都是应用层完成,下面来看文章的详细内容吧
    2021-10-10
  • MySQL无法启动几种常见问题小结

    MySQL无法启动几种常见问题小结

    在群里看到有新同学还在问MySQL无法启动的问题,于是总结了几个常见情况与解决方法,需要的朋友可以参考下
    2013-09-09
  • mysql字符串的‘123’转换为数字的123的实例

    mysql字符串的‘123’转换为数字的123的实例

    下面小编就为大家带来一篇mysql字符串的‘123’转换为数字的123的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • mysql快速添加百万条记录的语句

    mysql快速添加百万条记录的语句

    本文介绍一下关于MySQL使用INSERT SELECT批量插入数据的方法
    2013-11-11

最新评论