Linux 配置 MySQL 定时自动备份到另一台服务器

Linux 配置 MySQL 定时自动备份到另一台服务器

前言

此方案可使一台服务器上的 MySQL 中的所有数据库每天 0 点自动转储为 .sql 文件,然后将文件同步到另一台服务器上,可以作为一个简单的数据容灾。

1、配置服务器通信

作用是可以使备份好的sql可以通过scp复制到目标服务器

  • A服务器:数据库所在服务器
  • B服务器:需要备份的服务器(即目标服务器)

1.1:配置过程

  • A和B服务器执行如下命令,一直敲回车

    ssh-keygen -t rsa

  • 会在/root/.ssh目录下生成两个文件(id_rsa,id_rsa.pub)

  • 把A服务器的 id_rsa.pub 里的内容全选复制到B服务器的相同目录,创建新文件authorized_keys,把内容复制到此文件

  • 创建新文件命令

    cd /root/.ssh/
    vim authorized_keys

  • B服务器目录文件如图

  • A服务器目录文件如图

  • 这样两台服务器SSH链接就建立好了,使用SCP命令就不需要输入密码了

  • B服务器创建文件夹用于存放备份文件

    mkdir -p /data/mysqlAutoBackupFrom16

2、编写自动备份sh脚本文件

  1. A服务器创建存放脚本文件目录和备份目录,进入mysqlAutoBackupTo24

    mkdir -p /data/mysqlAutoBackupTo24/backup
    cd /data/mysqlAutoBackupTo24

  2. 创建脚本文件

    vim AutoBackup.sh

  3. 粘贴AutoBackup.sh 里面的内容

    #下面生成的sql在本服务器存放的文件夹,就是我上面建立的
    BACKUP=/data/mysqlAutoBackupTo16/backup/
    #当前时间,用来命名sql文件
    DATETIME=(date +%Y-%m-%d) echo "===备份开始===" echo "备份文件存放于{BACKUP}/DATABASE-DATETIME.sql"
    #生成sql文件,命名
    DATABASE=dbBackup
    echo DATABASE-DATETIME
    #mysqldump -h localhost -u{DB_USER} -p{DB_PW} --all-databases > {BACKUP}/DATABASE-$DATETIME.sql
    mysqldump -h 192.168.90.16 -uroot -pWuyuanDev001 --databases xxl_job xxl_job_hf_test > {BACKUP}/DATABASE-$DATETIME.sql
    echo "===导出成功,开始传输==="
    #将sql文件从服务器16备份到服务器24自己建立的文件夹/data/mysqlAutoBackupFrom16下面
    scp -P 22 BACKUPDATABASE-$DATETIME.sql root@192.168.90.24:/data/mysqlAutoBackupFrom16
    #删除备份目录
    #rm -rf {BACKUP}/DATETIME
    #删除7天前备份的数据,自行更改
    #find $BACKUP -mtime +7 -name "*.sql" -exec rm -rf {} ;
    echo "===数据库备份到服务器成功==="

  1. 文件关键代码解释

mysqldump 的 -h 后面写当前服务器的 IP,也就是192.168.90.16,不要写 localhost,因为如果是离线安装的 mysql 可能没有 mysqld.socket ,导致连接失败。

--databases xxl_job xxl_job_hf_test 的意思是指定备份 xxl_job 和 xxl_job_hf_test 这个两个数据库,指定多个数据库要加 --databases ,数据库用空格隔开,上面一句注释掉的是 --all-databases ,意思是备份全部数据库。

scp -P 22 是指定 ssh 端口,不指定默认为 22,root 是目标服务器192.168.90.24 的用户名

下面我们运行一下这个 sh 看看效果,cd 到你的 sh 存放的文件夹 sh AutoBackup.sh,首次进行 ssh 连接要输入一个 yes 回车,然后去目标服务器 24 查看,sql 文件已经同步过去。
  1. 执行测试
  2. 成功截图

3:设置定时自动执行

  1. 上面的测试没有问题,下面我们设定一个每天 0 点自动执行 sh 脚本,就可以失效每天的自动同步。首先赋予要执行的 shell 脚本权限,给高一点,不然没法自动执行

    chmod 777 /data/mysqlAutoBackupTo24/AutoBackup.sh

  2. 输入下面语句,vim 会打开一个文件

    crontab -e

  3. 里面这样写,保存,前面的 02 00 * * * 是 cron 表达式,代表每天 00:02 执行 /data/mysqlAutoBackupTo24/AutoBackup.sh,之所以设置 00:02 是因为避免服务器在 0 点的时候有其他数据同步任务,所以晚一点。cron 表达式的语法你们可以学一下。

    02 00 * * * sh /data/mysqlAutoBackupTo24/AutoBackup.sh

  1. 保险起见再刷新一下配置

    service crond reload

相关推荐
Christal_pyy5 分钟前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
E___V___E1 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
m0_748254882 小时前
mysql之如何获知版本
数据库·mysql
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
EasyNVR2 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
星星点点洲3 小时前
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
java·mysql
风口上的猪20153 小时前
thingboard告警信息格式美化
java·服务器·前端
Natsuagin3 小时前
轻松美化双系统启动界面与同步时间设置(Windows + Ubuntu)
linux·windows·ubuntu·grub
我们的五年3 小时前
【Linux网络编程】应用层协议HTTP(请求方法,状态码,重定向,cookie,session)
linux·网络·http