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

打印 上一主题 下一主题

主题 1000|帖子 1000|积分 3000

       
目录
一、需要解决的问题
1、怎样传输文件?
2、怎样备份数据库?
3、怎样建立一个定时使命?
二、实行步骤
1、建立SSH公钥,实现无暗码登录
2、编写备份数据库脚本 
3、编写定时使命


       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 
  注:如果重启失败,大概就是你第二步的时间写错了。要注意前面是分钟,背面是小时,不要写反了!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

立聪堂德州十三局店

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表