双虚拟机实现数据库自动备份

此备份过程,我们使用ssh免密登录+scp+bash脚本+定时任务来实现

ssh免密登录:

免密登录时我们要确定两点,双虚拟机,一台为客户端(操纵服务端的服务器),一台为服务端(被操作的一方):

客户端生成公私钥

本地客户端生成公私钥:(一路回车默认即可)

ssh-keygen

上面这个命令会在用户目录.ssh文件夹下创建公私钥

cd ~/.ssh
ls

下创建两个密钥:

id_rsa (私钥)
id_rsa.pub (公钥)

上传公钥到服务器

这里测试用的服务器地址为:192.168.235.22
用户为:root

ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.235.22

上面这条命令是写到服务器上的ssh目录下去了

cd ~/.ssh
vim authorized_keys

可以看到客户端写入到服务器的 id_rsa.pub (公钥)内容。

测试免密登录

客户端通过ssh连接远程服务器,就可以免密登录了。

ssh root@192.168.235.22

SCP复制sql文件到客户端:

首先安装SCP:

yum -y install openssh-clients

在使用scp复制文件到客户端之前,需要用sh脚本对服务端的sql进行备份,bash脚本如下:

bash脚本:

#!/bin/bash

# 数据库备份脚本,使用mysqldump命令备份mysql数据库
# 设置数据库的用户名,密码和备份存储路径
DB_USER="root"
DB_PASSWORD="你的数据库密码"
BACKUP_DIR="/usr/local/backup"

#根据日期创建备份文件名
BACKUP_FILENAME="${BACKUP_DIR}/db_backup_$(date +%Y%m%d%H).sql"

# 使用mysqldump命令备份数据库
mysqldump -u"${DB_USER}" -p"${DB_PASSWORD}" yhkf_platform > "$BACKUP_FILENAME"
mysqldump -u"${DB_USER}" -p"${DB_PASSWORD}" yhkf_platform  > /usr/local/backup/all.sql

定时任务(自动执行脚本):

# 每三分钟执行一次
*/3  * * * * /usr/local/backup/backup.sh

赋予文件执行权限:

chmod +x /usr/local/backup/backup.sh

在上面的脚本文件中,我们使用mysqldump备份了两个sql文件,其中一个是需要进行传输的文件all.sql,这里写成这样纯粹是为了方便,还有另一个带时间记录的sql文件用于记录当前sql的日志。

客户端使用SCP进行数据库文件导出:

在这里我们就直接写成bash脚本了,方便后续做定时任务:

#!/bin/bash

# 设置远程服务器IP地址和远程文件路径
remote_server="192.168.80.142"
remote_file="/usr/local/backup/all.sql"

# 设置本地文件路径和MySQL登录凭据
local_dir="/usr/local/backup"
mysql_user="root"
mysql_password="1766339196aA!"
database_name="yhkf_platform"

# 设置日志文件路径
log_file="/usr/local/backup/log.txt"

# 定义函数执行SCP和MySQL操作
function scp_and_import() {
    # 执行SCP命令将文件从远程服务器复制到本地
    scp "root@${remote_server}:${remote_file}" "$local_dir"

    # 检查文件是否复制成功
    if [ $? -eq 0 ]; then
        echo "SCP成功: $(date)" >> "$log_file"
    else
        echo "SCP失败: $(date)" >> "$log_file"
        exit 1
    fi

    # 执行MySQL命令导入数据
    mysql -u "$mysql_user" -p"$mysql_password" -e "USE $database_name; SOURCE $local_dir/all.sql;"

    # 检查MySQL导入是否成功
    if [ $? -eq 0 ]; then
        echo "MySQL导入成功: $(date)" >> "$log_file"
    else
        echo "MySQL导入失败: $(date)" >> "$log_file"
        exit 1
    fi
}

# 调用函数执行SCP和MySQL操作
scp_and_import

在上面的脚本中,对下面这几个参数进行设置:
在这里插入图片描述

之后设置定时任务:

* * * * * /usr/local/backup/backup.sh

赋予文件执行权限:

chmod +x /usr/local/backup/backup.sh

细节问题:

当使用navicat或者其他可视化工具连接数据库时,可能会遇到连接不上的问题,这是因为linux服务器的端口没有打开,默认方式是关闭防火墙,但是尽量不去这样做,而是只开放指定端口,比如:

firewall-cmd --zone=public --add-port=3306/tcp --permanent

之后别忘了重启防火墙

systemctl restart firewalld
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值