本编主要是给大家讲述下数据库备份相关知识,我们的备份服务器为192.168.42.15,数据库服务器为192.168.42.101,采用默认的mysqldump工具进行备份。首先是登录数据库服务器,用root用户登录:

mysql -uroot -p

登录后创建专门备份的备份用户bakuser:

CREATE USER 'bakuser'@'192.168.42.15' IDENTIFIED BY 'yourpasswd';
GRANT SELECT,SHOW VIEW,TRIGGER,LOCK TABLES,RELOAD,FILE ON dbname.* TO 'bakuser'@'192.168.42.15';

这里需要注意下,第二条mysql命令中,相应的select等权限为通常备份需要的权限,对于备份来说应该足够了,千万不要授予all priviliges,授权dbname填写你需要备份的数据库即可,如果有多个数据库要备份,就写成通配符*号。创建用户使用的密码用你们自己的复杂密码,不要使用yourpasswd。

在相应的备份服务器192.168.42.15中,创建一个备份脚本db101bak.sh,内容如下:

!# /bin/bash
#定义时间变量
yesterday=$(date +%F -d yesterday)

#数据机器信息
db_username="bakuser"
db_password="yourpasswd"
db_host="192.168.42.101"

######################
# 同步库数据
######################

echo "DB Sync Start... "`date +'%F %T'`

for db in dbname
do
        sql_file="/backup/101_mysql/$db-$yesterday.sql"
        rar_file="/backup/101_mysql/$db-$yesterday"
        echo "$db Export Start...$sql_file "`date +'%F %T'`
        /usr/bin/mysqldump -h $db_host -u $db_username -p"$db_password" $db > $sql_file
        /usr/local/bin/rar m -ma -r -rr5 -hpyourpassword $rar_file $sql_file
        echo "DB $db backup End... "`date +'%F %T'`
done
echo "DB ALL back End... "`date +'%F %T'`

此备份的shell脚本中,我们使用linux版本的rar进行了备份,并没有使用系统默认的tar进行备份,主要是因为rar的自带恢复信息的功能很好,免除了使用第三方软件,创建恢复卷信息的麻烦,另外,rar5格式自带的加密也比较好用,免除了使用openssl加密的麻烦,另外,如果要恢复数据,rar在pc上基本都会有,可以让普通用户,也能自己恢复数据。RAR的相关使用参考前面的文章

最后for循环中,可以一次备份多个文件,如果你要备份dbname1,dbname2,dbname3三个数据库,直接写成for db in dbname1 dbname2 dbname3这类样式即可,网络备份免去了数据库本地备份后在scp或者rsync的麻烦,在公司内网环境下,也是比较安全的,mysql密码默认好像是sha256 hash出来的(这点待核实),即使内网有人抓包,要暴力破解相应的密码,在绝大部分公司应该也是不可能的。

我们把脚本设置成可执行:

chmod a+x /opt/scripts/db101bak.sh

最后就是建立备份的计划任务输入:

crontab -e

输入如下内容:

0 0 * * 6 /opt/scripts/db101bak.sh >> /opt/scripts/dbbak.log 2>&1

这样的话,在每个周六的0点,就把本周的内容备份完毕了,生成的文件格式按照脚本中的写法,应该是类似这样的,dbname-2016-12-12.rar这样的命名方式。

网络备份MySQL数据库
Tagged on:             

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注