加入收藏 | 设为首页 | 会员中心 | 我要投稿 云计算网_宿迁站长网 (https://www.0527zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

Linux下定时自动备份远程主机mysql数据库并拷贝到其他主机

发布时间:2022-10-26 14:31:31 所属栏目:MySql教程 来源:未知
导读: 环境:
操作系统CentOS6.5、mysql5.1
主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C)
主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。
实施

环境:

操作系统CentOS6.5、mysql5.1

主数据库服务器(A)、备数据库服务器(B)、异地备份服务器(C)

主、备数据库服务器的mysql数据库完全一致,异地备份服务器用于存储备份文件。

实施方案:在主机B建立计划任务,每天凌晨3:00自动定时备份主机A的数据库到主机B,备份文件从主机B拷贝至主机C存储,再删除主机B的数据库备份文件。

实施步骤:

1)在主机B的目录 /usr/local/bin 下新建脚本文件dbbak.sh,实现功能逻辑:

#!/bin/bash

#这是一个简单的mysql数据库逻辑备份脚本

#1.定义数据库连接、目标库信息

MY_USER="这里是主机A的mysql数据库的用户"

MY_PASS=" 这里是主机A的mysql数据库的密码 "

MY_HOST="192.168.1.X" #这里是主机A的IP

MY_CONN="-u $MY_USER -p$MY_PASS -h $MY_HOST"

MY_DB1="这里是主机A的mysql数据库的库名"

#2.定义备份目录、工具、时间、文件名主体

BF_DIR="/data/BAK/"

BF_CMD="/usr/bin/mysqldump"

BF_TIME=`date +%Y%m%d`

NAME_1="$MY_DB1-$BF_TIME"

#3.先导出为.sql脚本,然后再进行压缩(打包后删除原文件)

cd $BF_DIR/

$BF_CMD $MY_CONN $MY_DB1 --default-character-set=utf8 --opt -Q -R --skip-lock-tables | gzip > $BF_DIR$NAME_1.sql.gz

scp $BF_DIR$NAME_1.sql.gz root@192.168.1.X:/data/BAK/DB/FullBackup/ #这里的IP是主机C的IP

rm -rf $BF_DIR$NAME_1.sql.gz

建立好以上脚本内容后,用命令chmod 修改一下.sh权限即可:

如chmod u+x *.sh赋予.sh权限

2)实现主机B和主机C之间用SCP命令免密码传输数据。

在主机B运行:

#ssh-keygen -t rsa

结果如下

QUOTE:

Generating public/private rsa key pair.

Enter file in which to save the key (/home/.username/ssh/id_rsa):#回车

Enter passphrase (empty for no passphrase):#回车

Enter same passphrase again:#回车

Your identification has been saved in /home/.username /.ssh/id_rsa.

Your public key has been saved in /home/.username /.ssh/id_rsa.pub.

The key fingerprint is:

38:25:c1:4d:5d:d3:89:bb:46:67:bf:52:af:c3:17:0c username@localhost

Generating RSA keys:

Key generation complete.

会在用户目录~/.ssh/产生两个文件,id_rsa,id_rsa.pub

将id_rsa.pub文件拷贝到主机C的root用户主目录下的.ssh目录下,并且改名为authorized_keys(即:cd ~/.ssh)

这样主机B上使用scp命令复制文件到主机C上将不提示输入密码了,直接自动复制了。也可在主机B上使用scp命令将主机C上文件复制到本机;总之不需要验证,就可以在主机B访问主机C。

注:如果有多台计算机需要与主机C进行复制,则只需将id_rsa.pub中的内容复制到主机C的authorized_keys文件中即可。(经在ssh上验证不可以,主机C只可以与一台服务器不需要验证)。

3)在主机B建立计划任务

# crontab -e

30 2 * * * /root/bin/dbbak.sh #此处代表凌晨2:30执行dbbak.sh脚本

# Example of job definition:

# .---------------- minute (0 - 59)

# | .------------- hour (0 - 23)

# | | .---------- day of month (1 - 31)

# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...

# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | | | | |

# * * * * * user-name command to be executed

# chkconfig crond on

# service crond status

crond (pid 3263) 正在运行...

#修改计划任务后需重启服务:service crond restart

自此整个方案实施完毕,经笔者测试,功能正常。

特别注意:

当主机的SSH远程端口修改后,本文涉及的SCP免密码传输的机制将失效mysql主机,解决办法如下:

1.SCP指令要加上端口号:scp -P 55822 $BF_DIR$NAME_1.sql.gz root@192.168.1.X:/data/BAK/DB/FullBackup/ #这里的IP是主机C的IP

2.重新执行本文的2)步骤,重建SCP免密码传输机制。

(编辑:云计算网_宿迁站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!