一、钉钉库(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验证是否备份成功
标签:-%,week,last,+%,备份,东商,date,mysql,dingding From: https://www.cnblogs.com/xiaozgang/p/18538222