天天看点

Linux自动化远程备份MySQL数据库

一、写在之前

因为需要对我们的数据库进行异地灾备,就考虑通过脚本形式每天定时进行远程备份。

数据库服务器:A

备份服务器:B

要求:对A服务器的data库进行远程备份,每天2:00执行,以压缩包tar.gz格式存储。

二、功能说明

1.数据库授权

因为我对A数据库做了访问限制,只允许指定IP的服务器能够访问数据库,所以要想对A数据库进行备份,需要先在A数据库上对B服务器IP进行授权。

具体授权方式在这里就不写了,想要看的可以找我的另一片文章

Linux下配置mysql允许指定IP远程访问

2.mysqldump工具

对数据库进行备份,要依靠数据库本身提供的mysqldump工具进行备份,所以相应的也需要在B服务器上安装Mysql,以便备份。

具体安装方式在这里就不写了,想要看的可以找我的另一片文章

Linux下通过yum安装MySQL5.7

3.备份命令

直接执行以下命令就可以进行数据库备份。

/usr/bin/mysqldump -u databak -ppassword -h 192.168.1.1 --databases dataname --skip-lock-tables | gzip > dataname.sql.gz
           

但是我们不可能每天都手动执行备份命令,所以就需要使用脚本文件,每天定时自动执行备份。

三、脚本编写

#!/bin/bash
#mysql数据库逻辑备份脚本
#1.定义数据库连接和目标库信息
m_user="databak"
m_pass="password"
m_host="192.168.1.1"
m_conn="-u $m_user -p$m_pass -h $m_host"
m_db="dataname"

#2.定义备份目录、工具、时间、文件名主体
bak_dir="/opt/databak"
bak_cmd="/usr/bin/mysqldump"
bak_time=`date +%Y%m%d-%H%M`

name="$m_db-$bak_time"

cd $bak_dir
$bak_cmd $m_conn $m_db --skip-lock-tables |gzip > $name.sql.gz
           
Linux自动化远程备份MySQL数据库

编辑完之后需要执行

chmod +x databak.sh

给脚本文件执行权限

在编写脚本文件的时候,有几个地方需要注意,或者说有几个坑不要跳,我是爬了半天才爬出来!

1.connect连接的时候,-p和密码之间没有空格!

如果加上空格,会提示让你输入密码,然后就会报错。

2.bak_time里的需要用全角单引号,不是半角!不然也会报错。

四、设置计划任务

我们可以通过crontab来添加定时任务,从而定时执行脚本文件。

crontab -e
00 2 * * * /root/bin/databak.sh #每天2点执行脚本文件
service crond start #启动crontab服务