专业集团网站建设,办公室装修方案,wordpress 怎么切换主题,中国制造网的网络营销方式数据只存一份#xff0c;等于没备份。 备份只存本地#xff0c;机房着火了一样全没。 这篇聊聊异地备份的几种方案和实操经验。为什么要异地备份 本地备份能防#xff1a; 误删数据程序bug硬盘损坏 本地备份防不了#xff1a; 机房故障#xff08;断电、火灾、水灾#x…数据只存一份等于没备份。备份只存本地机房着火了一样全没。这篇聊聊异地备份的几种方案和实操经验。为什么要异地备份本地备份能防误删数据程序bug硬盘损坏本地备份防不了机房故障断电、火灾、水灾整机被黑勒索病毒3-2-1备份原则3份数据1份原始 2份备份2种介质比如硬盘 云存储1份异地物理隔离的另一个位置方案一定时备份 云存储最简单的方案mysqldump导出传到云存储。备份脚本#!/bin/bash# backup_mysql.sh# 配置MYSQL_USERbackupMYSQL_PASSyour_passwordBACKUP_DIR/data/backup/mysqlDATE$(date%Y%m%d_%H%M%S)KEEP_DAYS7# 创建备份目录mkdir-p$BACKUP_DIR# 备份所有数据库mysqldump -u$MYSQL_USER-p$MYSQL_PASS\--all-databases\--single-transaction\--routines\--triggers\--events\|gzip$BACKUP_DIR/all_db_$DATE.sql.gz# 删除旧备份find$BACKUP_DIR-name*.sql.gz-mtime $KEEP_DAYS-delete# 上传到云存储以阿里云OSS为例ossutilcp$BACKUP_DIR/all_db_$DATE.sql.gz oss://your-bucket/mysql-backup/echoBackup completed: all_db_$DATE.sql.gz定时执行# crontab -e# 每天凌晨3点执行03* * * /path/to/backup_mysql.sh/var/log/mysql_backup.log21优缺点优点简单易懂成本低云存储很便宜恢复简单下载回来mysql导入缺点备份期间有锁大表会影响业务只能恢复到备份时间点大数据量备份慢方案二binlog实时同步比定时备份更进一步实时同步binlog到异地。原理主库 → binlog → 同步到备份服务器 → 可以恢复到任意时间点配置主库# my.cnf [mysqld] server-id 1 log-bin mysql-bin binlog_format ROW expire_logs_days 7同步binlog#!/bin/bash# sync_binlog.shMYSQL_HOST主库IPMYSQL_USERreplMYSQL_PASSyour_passwordBACKUP_DIR/data/backup/binlog# 使用mysqlbinlog远程获取binlogmysqlbinlog --read-from-remote-server\--host$MYSQL_HOST\--user$MYSQL_USER\--password$MYSQL_PASS\--raw\--stop-never\--result-file$BACKUP_DIR/\mysql-bin.000001恢复到指定时间点# 先恢复全量备份mysql -u root -pfull_backup.sql# 再应用binlog到指定时间mysqlbinlog --stop-datetime2024-01-15 10:30:00\binlog.000001 binlog.000002|mysql -u root -p方案三主从复制到异地更专业的方案在异地建立从库。架构本地机房 异地机房 ┌─────────┐ ┌─────────┐ │ 主库 │ ──复制──→ │ 从库 │ └─────────┘ └─────────┘ (只读备份)配置主库配置# my.cnf [mysqld] server-id 1 log-bin mysql-bin binlog_format ROW创建复制用户CREATEUSERrepl%IDENTIFIEDBYpassword;GRANTREPLICATIONSLAVEON*.*TOrepl%;FLUSHPRIVILEGES;从库配置# my.cnf [mysqld] server-id 2 relay-log relay-bin read-only 1配置复制CHANGE MASTERTOMASTER_HOST主库IP,MASTER_USERrepl,MASTER_PASSWORDpassword,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS154;STARTSLAVE;网络问题异地复制最大的挑战是网络公网带宽贵延迟高不稳定解决方案一专线企业级方案贵但稳定。解决方案二压缩传输# my.cnf [mysqld] slave_compressed_protocol 1解决方案三组网方案如果没有专线预算可以用虚拟组网把两地服务器打通。我自己用星空组网把公司服务器和家里的备份NAS连起来配置好之后MySQL从库复制就像在同一个内网一样不用担心公网IP暴露的安全问题。公司服务器(10.26.0.1) ←→ 星空组网 ←→ 家里NAS(10.26.0.2) 主库 从库从库配置直接用内网IPCHANGE MASTERTOMASTER_HOST10.26.0.1,-- 组网的内网IPMASTER_USERrepl,...方案四云数据库跨地域备份如果用的是云数据库RDS直接用云厂商的跨地域备份功能最省心。阿里云RDS控制台 → 备份恢复 → 跨地域备份 → 开启 选择目标地域比如上海→杭州AWS RDSRDS控制台 → 自动备份 → 启用跨区域复制 选择目标区域优点省心云厂商帮你搞定稳定可靠恢复方便缺点要花钱被云厂商绑定备份验证备份了不验证 没备份。定期恢复测试#!/bin/bash# test_restore.sh# 下载最新备份ossutilcposs://your-bucket/mysql-backup/latest.sql.gz /tmp/# 解压gunzip /tmp/latest.sql.gz# 恢复到测试库mysql -h test-db-host -u root -p test_restore/tmp/latest.sql# 验证数据mysql -h test-db-host -u root -p -eSELECT COUNT(*) FROM test_restore.users;# 清理mysql -h test-db-host -u root -p -eDROP DATABASE test_restore;建议每月至少做一次恢复测试。备份完整性检查# 检查备份文件是否能正常解压gunzip -t backup.sql.gz# 检查SQL文件是否完整看结尾有没有正常的注释tail-5 backup.sql# 正常应该有类似这样的结尾# -- Dump completed on 2024-01-15 03:00:01我的备份策略分享一下我自己的做法全量备份每天凌晨3点mysqldump gzip ↓ 上传云存储阿里云OSS保留30天 ↓ 异地从库家里NAS跑一个MySQL从库通过星空组网连接 ↓ binlog备份实时同步到NAS这样误删数据 → 从OSS下载最近的全量备份 binlog恢复本地机器挂了 → 切到异地从库云厂商跑路 → 还有家里的备份成本不高就一个OSS 家里的NAS但心里踏实。总结方案复杂度成本RPO适用场景定时备份云存储低低小时级小项目、个人binlog同步中低分钟级需要精确恢复异地从库高中秒级高可用要求云数据库跨地域低高分钟级不差钱、求省心选哪个看你的数据重要程度越重要方案越要完善恢复时间要求能接受停多久预算钱多就上云钱少就自己搞但不管用哪个方案一定要定期验证。备份了没验证过的关键时刻可能恢复不了。有问题评论区聊。