一、釘釘庫(dingding)例項全量備份
1.機器:
cvlink-xxcc-prd1 |
172.16.50.59 |
cvlink-xxcc-prd2 |
172.16.50.60 |
備註:59是主庫,60為從庫,因為做了主從,所以兩個資料庫資料是一致的,直接對從庫60的例項釘釘進行備份即可。
2.對從庫60的例項進行備份:
2.1 登入從庫:
2.2 進行備份:使用mysqldump工具
2.3 驗證:
2.4 備份的資料的路徑:
/root/dingding_backup.sql
二、增量備份:mysqlbinlog方式
1. 1檢查並啟用二進位制日誌
二進位制日誌是 MySQL 增量備份的核心。首先,確保 MySQL 伺服器啟用了二進位制日誌功能。
- 編輯 MySQL 配置檔案 (`/etc/my.cnf` 或 `/etc/mysql/my.cnf`),在 `[mysqld]` 段新增以下內容:
```ini
[mysqld]
log-bin=mysql-bin
server-id=1 # 在主從複製中,確保每個伺服器的ID是唯一的
```
- 儲存配置檔案並重啟 MySQL 服務:
```bash
sudo systemctl restart mysqld
```
- 驗證二進位制日誌是否啟用:
```sql
SHOW VARIABLES LIKE 'log_bin';
```
如果 `log_bin` 為 `ON`,則表示二進位制日誌已啟用。
1.2寫指令碼
/backup/binlog_backup.sh
以下是指令碼內容:
============================================================================================================================================================================
#!/bin/bash
# 定義備份相關的路徑和配置資訊
BACKUP_DIR="/backup"
LOG_FILE="/var/log/mysql_binlog_backup.log"
MYSQL_TEMP_CONFIG="/usr/local/mysql/data/temp_mysql.cnf"
MYSQL_BIN_LOG_DIR="/usr/local/mysql/data"
# 獲取上週開始時間(上週週一凌晨0點整)的時間戳
current_date=$(date +%Y-%m-%d)
last_week_start_date=$(date -d "$(date +%Y-%m-%d) -$(($(date +%w) + 7 - 1)) days" +%Y-%m-%d)
last_week_start_datetime="${last_week_start_date} 00:00:00"
last_week_start_timestamp=$(date -d "${last_week_start_datetime}" +%s)
if [ $? -ne 0 ]; then
echo "獲取上週開始時間戳失敗。" | tee -a $LOG_FILE
exit 1
fi
# 獲取上週結束時間(上週週日23點59分59秒)的時間戳
last_week_end_date=$(date -d "$(date +%Y-%m-%d) -$(($(date +%w) + 1)) days" +%Y-%m-%d)
last_week_end_datetime="${last_week_end_date} 23:59:59"
last_week_end_timestamp=$(date -d "${last_week_end_datetime}" +%s)
if [ $? -ne 0 ]; then
echo "獲取上週結束時間戳失敗。" | tee -a $LOG_FILE
exit 1
fi
# 將時間戳轉換為正確的日期時間格式
start_datetime=$(date -d @$last_week_start_timestamp +%Y-%m-%d\ %H:%M:%S)
if [ $? -ne 0 ]; then
echo "將上週開始時間戳轉換為日期時間格式失敗。" | tee -a $LOG_FILE
exit 1
fi
stop_datetime=$(date -d @$last_week_end_timestamp +%Y-%m-%d\ %H:%M:%S)
if [ $? -ne 0 ]; then
echo "將上週結束時間戳轉換為日期時間格式失敗。" | tee -a $LOG_FILE
exit 1
fi
# 使用正確的日期時間格式從二進位制日誌中提取上週的資料並備份到指定檔案
mysqlbinlog -v --start-datetime="$start_datetime" --stop-datetime="$stop_datetime" $MYSQL_BIN_LOG_DIR/mysql-bin.* > "$BACKUP_DIR/weekly_backup_$(date +%Y%m%d%H%m%S).sql" 2>&1
if [ $? -ne 0 ]; then
echo "從二進位制日誌提取資料並備份失敗,請檢查相關設定和日誌檔案。" | tee -a $LOG_FILE
exit 1
fi
echo "備份完成,備份檔案為:$BACKUP_DIR/weekly_backup_$(date +%Y%m%d%H%m%S).sql" | tee -a $LOG_FILE
=======================================================================================================================================================
備註:如果執行指令碼有報錯:mysqlbinlog: [ERROR] unknown variable ‘default-character-set=utf8mb4‘,則可以修改mysqlbinlg執行的指令,
例如:mysqlbinlog --no-defaults --stop-datetime="2024-04-16 10:30:00" binlog.000001 > recovery.sql
1.3把指令碼加入定時任務
crontab -l
0 5 * * 1 sh /backup/binlog_backup.sh /dev/null &
備註:每週一凌晨一點整會自動執行該指令碼;自動增量備份上週的增量資料。
1.4驗證是否備份成功