# 备份的常用命令


## 前言
linux服务器经常需要备份数据。下面介绍一些常用的备份命令。
在介绍常用命令之前，先介绍一下备份的基本要点。
首先讲一个备份原则：3-2-1原则，即三份数据，两种存储介质，一份异地网络。
其次会讲一下文件备份的常用命令。
最后讲一下数据库备份的常用命令。

## 备份原则
这里只讲3-2-1原则，即三份数据，两种存储介质，一份异地网络。
1. 要保持至少三份数据备份，包括一份原始数据和两份备份副本。这可以有效防止因硬件故障、数据损坏或人为错误导致数据丢失。
2. 原始数据。不多概述。但要求原始数据的服务器要做RAID阵列或其他高可用方案，以防止单点故障。
3. 第一份备份：存储在同一台服务器的不同硬盘（或RAID阵列）、外接硬盘、U盘等其他存储介质上。这可以防止硬盘损坏或服务器故障导致数据丢失，同时也能提高数据恢复的速度。
4. 第二份备份：存储在异地、云存储服务上，例如在另一个机房的服务器上。原则上有距离要求，至少超过100公里，这可以防止因地震、火灾或其他自然灾害导致数据丢失。

## 文件备份的常用命令

### rsync
rsync是一个开源的远程数据同步工具，可以用来同步本地文件和目录到远程主机。

### rclone
rclone是一个开源的跨平台命令行工具，可以用来同步本地文件和目录到远程云存储服务。

### borg
borg是一个开源的备份工具，可以用来备份文件系统、数据库、磁盘等。它使用了一种叫“增量式备份”的方法，只备份文件或目录的变化，而不是完整的备份。

### 其他常用命令
- tar：用来打包、压缩文件。
- cp：用来复制文件。
- scp：用来远程拷贝文件。


## 数据库备份的常用命令

### postgres
postgres提供了pg_dump命令用来备份数据库。
- pg_dump：用来备份数据库。
- pg_dumpall：用来备份所有数据库。
- pg_restore：用来恢复数据库。

### mysql
mysql提供了mysqldump命令用来备份数据库。
- mysqldump：用来备份数据库。
- mysqldumpall：用来备份所有数据库。
- mysql：用来恢复数据库 `mysql -u root -p database_name < backup_file.sql`。

### oracle
这个太专业，需要有database管理员的帮助。


## 备份周期
备份分为全量备份和增量备份。

### 全量备份
全量备份是指备份整个数据库或文件系统。全量备份的周期一般为每周或每月一次。

### 增量备份
增量备份是指备份数据库或文件系统的变化，只备份新增、修改或删除的数据。增量备份的周期一般为每天或每小时一次。

## 举例
1. 全量备份文件系统：
   - rsync -avz /data/ /backup/data/
   - rclone copy /data remote:backup/data
   - borg create /backup/data::`date +%Y-%m-%d-%H%M%S` /data
2. 全量备份数据库：
   - mysqldump -u root -p database_name > backup_file.sql
   - pg_dumpall > backup_file.sql
3. 增量备份文件系统：
   - rsync -avz --delete /data/ /backup/data/
   - rclone copy /data remote:backup/data
   - borg create /backup/data::`date +%Y-%m-%d-%H%M%S` /data
4. 增量备份数据库：
   - mysqldump -u root -p database_name --no-data > backup_file.sql
   - pg_dump -U postgres -f backup_file.sql -b -t table_name -n schema_name
   - 
