运维脚本——2.备份与恢复
备份与恢复是IT运维中的核心任务,确保数据安全和业务连续性。
必要性
-
数据保护:
-
防止因硬件故障、软件错误、人为操作失误或恶意攻击导致的数据丢失。
-
-
业务连续性:
-
在发生灾难性事件(如火灾、洪水)时,能够快速恢复业务操作,减少停机时间。
-
-
合规要求:
-
许多行业和法规要求定期备份数据,并确保备份的可恢复性,以满足合规性要求。
-
-
版本控制:
-
备份可以用于保存数据的多个版本,便于在需要时恢复到特定时间点的状态。
-
-
减少损失:
-
通过定期备份,可以减少因数据丢失带来的财务和声誉损失。
-
使用场景
-
数据库备份与恢复:
-
场景:定期备份数据库,以防止数据丢失或损坏。
-
示例:使用
mysqldump
备份MySQL数据库,并在需要时恢复。
-
-
# 备份
mysqldump -u root -p'password' mydatabase > /backup/mydatabase-$(date +%F).sql# 恢复
mysql -u root -p'password' mydatabase < /backup/mydatabase-2023-10-01.sql -
文件系统备份与恢复:
-
场景:备份关键文件和目录,以防止文件丢失或损坏。
-
示例:使用
rsync
进行增量备份。
-
-
# 备份
rsync -av --delete /path/to/source /path/to/backup# 恢复
rsync -av /path/to/backup /path/to/restore -
虚拟机备份与恢复:
-
场景:备份虚拟机镜像,以便在虚拟机故障时快速恢复。
-
示例:使用
Veeam Backup & Replication
备份VMware虚拟机。
-
-
云服务备份与恢复:
-
场景:备份云服务中的数据,如AWS S3存储桶、RDS数据库等。
-
示例:使用AWS Backup服务备份和恢复RDS数据库。
-
-
应用程序备份与恢复:
-
场景:备份应用程序的配置和数据,以便在应用程序故障时快速恢复。
-
示例:使用Ansible Playbook备份和恢复Web应用配置。
-
-
- hosts: webservers tasks: - name: Backup Apache configuration copy: src: /etc/apache2/apache2.conf dest: /backup/apache2.conf-$(date +%F) - name: Restore Apache configuration copy: src: /backup/apache2.conf-2023-10-01 dest: /etc/apache2/apache2.conf notify: Restart Apache handlers: - name: Restart Apache service: name: apache2 state: restarted
-
灾难恢复:
-
场景:在发生灾难性事件时,能够从备份中恢复整个系统。
-
示例:使用Veeam或Zerto进行灾难恢复演练和实际恢复。
-
-
示例:使用Bacula进行备份与恢复
-
安装Bacula:
-
在服务器和客户端上安装Bacula。
-
-
# On Ubuntu sudo apt-get install bacula-director bacula-sd bacula-fd
-
配置Bacula Director:
-
编辑
/etc/bacula/bacula-dir.conf
配置文件,定义备份任务。
-
-
Job { Name = "BackupServer" JobDefs = "DefaultJob" Client = "server-fd" FileSet = "FullSet" Schedule = "WeeklyCycle" Storage = "File" Pool = "File" Write Bootstrap = "/var/lib/bacula/%c.bsr" } FileSet { Name = "FullSet" Include { Options { signature = MD5 } File = /path/to/backup } }
-
配置Bacula Storage Daemon:
-
编辑
/etc/bacula/bacula-sd.conf
配置文件,定义存储位置。
-
-
Storage { Name = "File" Address = server-fd SDPort = 9103 Password = "password" Device = FileStorage Media Type = File } Device { Name = FileStorage Media Type = File Archive Device = /backup LabelMedia = yes Random Access = yes AutomaticMount = yes RemovableMedia = no AlwaysOpen = no }
-
启动Bacula服务:
-
启动Bacula Director和Storage Daemon服务。
-
-
sudo systemctl start bacula-director sudo systemctl start bacula-sd
-
执行备份:
-
使用
bconsole
命令执行备份任务。
-
-
sudo bconsole * run * yes
-
恢复备份:
-
使用
bconsole
命令恢复备份数据。
-
-
sudo bconsole * restore * 5 * yes