在Linux环境下设置高可用数据库集群备份需要考虑数据库类型、集群架构和备份策略。以下是针对主流数据库的高可用备份方案。
架构组件: - Galera Cluster (Percona XtraDB Cluster/MariaDB Galera Cluster) - HAProxy/ProxySQL用于负载均衡 - 备份节点
实施步骤:
安装Galera Cluster:
# Percona XtraDB Cluster示例
sudo apt-get install percona-xtradb-cluster-57
配置集群节点(/etc/mysql/my.cnf
):
[mysqld]
wsrep_provider=/usr/lib/galera3/libgalera_smm.so
wsrep_cluster_name=my_galera_cluster
wsrep_cluster_address=gcomm://node1_ip,node2_ip,node3_ip
wsrep_node_name=node1
wsrep_node_address=node1_ip
binlog_format=ROW
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
设置备份策略:
# 安装XtraBackup
sudo apt-get install percona-xtrabackup-24
# 完整备份
innobackupex --user=backup_user --password=password /backup/mysql/
自动化备份脚本(结合cron):
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/mysql/$DATE"
LOG_FILE="/var/log/mysql_backup.log"
innobackupex --user=backup_user --password=password --no-timestamp $BACKUP_DIR >> $LOG_FILE 2>&1
innobackupex --apply-log $BACKUP_DIR >> $LOG_FILE 2>&1
# 保留最近7天备份
find /backup/mysql/ -type d -mtime +7 -exec rm -rf {} \;
优势: - 原生MySQL解决方案 - 支持多主模式
配置要点:
[mysqld]
server_id=1
gtid_mode=ON
enforce_gtid_consistency=ON
binlog_checksum=NONE
log_bin=binlog
log_slave_updates=ON
binlog_format=ROW
master_info_repository=TABLE
relay_log_info_repository=TABLE
transaction_write_set_extraction=XXHASH64
plugin_load_add='group_replication.so'
group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
group_replication_start_on_boot=off
group_replication_local_address= "node1:33061"
group_replication_group_seeds= "node1:33061,node2:33061,node3:33061"
group_replication_bootstrap_group=off
架构组件: - PostgreSQL主从复制 - Patroni用于自动故障转移 - etcd用于集群协调 - pgBackRest/WAL-E用于备份
实施步骤:
安装必要组件:
# Ubuntu示例
sudo apt-get install postgresql-12 patroni python3-etcd
配置Patroni(/etc/patroni.yml
):
scope: postgres_cluster
namespace: /service/
name: node1
restapi:
listen: 0.0.0.0:8008
connect_address: 192.168.1.101:8008
etcd:
hosts: ["192.168.1.101:2379","192.168.1.102:2379","192.168.1.103:2379"]
bootstrap:
dcs:
ttl: 30
loop_wait: 10
retry_timeout: 10
maximum_lag_on_failover: 1048576
postgresql:
use_pg_rewind: true
parameters:
wal_level: replica
hot_standby: "on"
wal_keep_segments: 8
max_wal_senders: 5
max_replication_slots: 5
postgresql:
listen: 0.0.0.0:5432
connect_address: 192.168.1.101:5432
data_dir: /var/lib/postgresql/12/main
bin_dir: /usr/lib/postgresql/12/bin
pgpass: /tmp/pgpass
authentication:
replication:
username: replicator
password: securepassword
superuser:
username: postgres
password: securepassword
create_replica_methods:
- basebackup
basebackup:
max-rate: 100M
设置pgBackRest备份:
# /etc/pgbackrest.conf
[global]
repo1-path=/var/lib/pgbackrest
repo1-retention-full=2
log-level-console=info
[db-primary]
pg1-path=/var/lib/postgresql/12/main
备份命令:
# 完整备份
pgbackrest --stanza=db-primary --log-level-console=info backup
# 增量备份
pgbackrest --stanza=db-primary --type=incr backup
架构组件: - MongoDB Replica Set (3节点最小配置) - Ops Manager用于备份管理(可选) - mongodump/mongorestore
实施步骤:
配置Replica Set:
// 在每个节点的mongod.conf中
replication:
replSetName: "rs0"
oplogSizeMB: 1024
初始化Replica Set:
rs.initiate({
_id: "rs0",
members: [
{ _id: 0, host: "mongo1:27017" },
{ _id: 1, host: "mongo2:27017" },
{ _id: 2, host: "mongo3:27017", arbiterOnly: true }
]
})
设置备份策略:
# 完整备份
mongodump --host rs0/mongo1:27017,mongo2:27017 --out /backup/mongodb/full --oplog
# 增量备份(基于oplog)
mongodump --host rs0/mongo1:27017 --out /backup/mongodb/incr --oplog
使用文件系统快照(如LVM):
# 创建快照
lvcreate --size 1G --snapshot --name mongo-snap /dev/vg00/mongo-lv
# 挂载快照并备份
mount /dev/vg00/mongo-snap /mnt/snapshot
rsync -a /mnt/snapshot/ /backup/mongodb/snapshot/
umount /mnt/snapshot
lvremove -f /dev/vg00/mongo-snap
3-2-1备份规则:
监控与验证:
加密与安全:
# 使用GPG加密备份
gpg --output backup.sql.gpg --encrypt --recipient backup@example.com backup.sql
自动化与调度:
# 示例cron作业
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
跨区域备份:
# 使用rsync同步到远程服务器
rsync -avz -e "ssh -p 2222" /backup/mysql/ user@remote-server:/remote/backup/
通过以上方案,您可以在Linux环境下建立高可用的数据库集群备份系统,确保业务连续性和数据安全。