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
相关推荐
Hello.Reader4 小时前
Flink ZooKeeper HA 实战原理、必配项、Kerberos、安全与稳定性调优
安全·zookeeper·flink
ccecw4 小时前
Mysql ONLY_FULL_GROUP_BY模式详解、group by非查询字段报错
数据库·mysql
JH30734 小时前
达梦数据库与MySQL的核心差异解析:从特性到实践
数据库·mysql
智驱力人工智能4 小时前
小区高空抛物AI实时预警方案 筑牢社区头顶安全的实践 高空抛物检测 高空抛物监控安装教程 高空抛物误报率优化方案 高空抛物监控案例分享
人工智能·深度学习·opencv·算法·安全·yolo·边缘计算
数据与后端架构提升之路5 小时前
论系统安全架构设计及其应用(基于AI大模型项目)
人工智能·安全·系统安全
市场部需要一个软件开发岗位7 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
lingggggaaaa7 小时前
安全工具篇&动态绕过&DumpLsass凭据&Certutil下载&变异替换&打乱源头特征
学习·安全·web安全·免杀对抗
凯子坚持 c7 小时前
CANN-LLM:基于昇腾 CANN 的高性能、全功能 LLM 推理引擎
人工智能·安全
Goat恶霸詹姆斯7 小时前
mysql常用语句
数据库·mysql·oracle
QT.qtqtqtqtqt8 小时前
未授权访问漏洞
网络·安全·web安全