此备份过程,我们使用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