Mysql8异地定时自动备份

目录

一、前言

此处假设有两台服务器,A服务器上安装了mysql服务,B服务器则为异地服务器。

目的:将A服务器上的mysql数据,异地备份到B服务器上存储。
注:下述所有操作都是在B服务器上执行


二、安装mysql

安装mysql8客户端

bash 复制代码
[root@VM-4-12-centos ~]# sudo rpm -Uvh http://dev.mysql.com/get/mysql80-community-release-el7-8.noarch.rpm
[root@VM-4-12-centos ~]# sudo yum install mysql-community-client --nogpgcheck -y
[root@VM-4-12-centos ~]# mysqldump --version
mysqldump  Ver 8.0.40 for Linux on x86_64 (MySQL Community Server - GPL)

测试备份数据

bash 复制代码
[root@VM-4-12-centos ~] mkdir -p /data/mysql_bak && cd /data/mysql_bak
[root@VM-4-12-centos mysql_bak] mysqldump -h ip地址 -P 端口号 -u 用户名 -p密码 --databases 备份数据库名 > ./backup.sql

-h A服务器的IP地址:指定MySQL服务器的位置,即A服务器的IP地址。
-P 端口号:指定MySQL服务器的连接端口号。
-u MySQL用户名:指定用于连接MySQL的用户名。
-pMySQL密码:指定该用户的密码。为了安全起见,通常不建议直接在命令行中写明密码,而是运行命令后手动输入密码。
--databases 需要备份的数据库名:指定要备份的数据库名称。如果你要备份所有数据库,可以使用--all-databases代替。
> /路径/到/保存/备份文件.sql:指定备份文件的保存位置及文件名。


三、编写shell脚本

bash 复制代码
[root@VM-4-12-centos mysql_bak] vim backup.sh
[root@VM-4-12-centos mysql_bak] chmod +x backup.sh
[root@VM-4-12-centos mysql_bak] sh backup.sh

backup.sh内容

bash 复制代码
#!/bin/bash

# 数据库连接信息
host="ip地址"
port="端口号"
name="用户名"
password="用户密码"
database="数据库名"

# 备份信息
backup_dir="/data/mysql_bak/$database"
backup_time=$(date +"%F_%H-%M-%S")
backup_name="${backup_dir}/${backup_time}"

# 执行备份
echo "【开始备份】数据库:${database},位置:${backup_name}.sql"
mkdir -p "$backup_dir"
/usr/bin/mysqldump -h $host -P $port -u $name -p$password --databases $database > ${backup_name}.sql 2>/dev/null
if [ $? -eq 0 ]; then
    echo "【备份完成】数据库:${database},位置:${backup_name}.sql"
else
    echo "【备份失败】数据库:${database}"
    exit 1
fi

# 压缩备份文件
echo "【开始压缩】源文件:${backup_name}.sql"
/usr/bin/tar zcf ${backup_name}.tar.gz ${backup_name}.sql --remove &> /dev/null
if [ $? -eq 0 ]; then
    echo "【压缩完成】文件:${backup_name}.tar.gz"
else
    echo "【压缩失败】文件:${backup_name}.sql"
    exit 1
fi

# 删除30天以前的备份
find "${backup_dir}" -type f -name "*.tar.gz" -mtime +30 -exec rm -f {} \;
echo "执行完成~"

四、定时任务

设置为每天凌晨3点30分执行一次备份

添加定时任务

bash 复制代码
[root@VM-4-12-centos mysql_bak]# crontab -e

# 追加如下内容
30 3 * * * /data/mysql_bak/backup.sh
bash 复制代码
# 查看定时任务列表
[root@VM-4-12-centos mysql_bak]# crontab -l
30 3 * * * /data/mysql_bak/backup.sh
# 查看定时任务日志
[root@VM-4-12-centos mysql_bak]# tail -f /var/log/cron
# 重启crond服务使定时任务生效
[root@VM-4-12-centos mysql_bak]# systemctl restart crond
相关推荐
用户962377954486 小时前
DVWA 靶场实验报告 (High Level)
安全
数据智能老司机9 小时前
用于进攻性网络安全的智能体 AI——在 n8n 中构建你的第一个 AI 工作流
人工智能·安全·agent
数据智能老司机9 小时前
用于进攻性网络安全的智能体 AI——智能体 AI 入门
人工智能·安全·agent
用户9623779544811 小时前
DVWA 靶场实验报告 (Medium Level)
安全
red1giant_star11 小时前
S2-067 漏洞复现:Struts2 S2-067 文件上传路径穿越漏洞
安全
用户9623779544814 小时前
DVWA Weak Session IDs High 的 Cookie dvwaSession 为什么刷新不出来?
安全
cipher2 天前
ERC-4626 通胀攻击:DeFi 金库的"捐款陷阱"
前端·后端·安全
于眠牧北3 天前
MySQL的锁类型,表锁,行锁,MVCC中所使用的临键锁
mysql
Turnip12024 天前
深度解析:为什么简单的数据库"写操作"会在 MySQL 中卡住?
后端·mysql
一次旅行5 天前
网络安全总结
安全·web安全