MySQL数据备份实战:从全量到增量的完整避坑指南(含Shell脚本)

MySQL 8.0 物理备份实战:Percona XtraBackup 安装、全量与增量备份恢复指南 数据库备份是保障数据安全与业务连续性的核心实践。其原理在于通过特定技术手段,在不停机或影响极小的情况下,捕获数据库在某一时间点的完整状态。物理备份技术因其直接拷贝数据文件、速度快、对业务影响小的特点,成为中大型生产环境的首选方案,尤其适用于需要快速恢复的海量数据场景。Percona XtraBackup 作为一款成熟的开源物理备份工具,通过巧妙追踪重做日志实现热备份,完美支持 MySQL 8.0 的新特性。本文将以工程实践为导向,详细解析其安装部署、全量/增量备份策略制定、以及关键的数据恢复演练流程,帮助运 阅读详情

MySQL数据备份实战:从全量到增量的完整避坑指南(含Shell脚本)

在数据库运维的世界里,备份是那个你永远不希望用到,但绝不能没有的“安全气囊”。尤其对于中小企业或初创团队的DBA而言,面对有限的资源和紧迫的业务需求,构建一套既可靠又高效的MySQL备份恢复体系,往往意味着在无数个深夜与各种报错信息、性能瓶颈和策略选择作斗争。这篇文章不是一份冰冷的命令手册,而是源于真实生产环境踩坑、调试、优化后的经验结晶。我们将一起穿越从基础概念到复杂场景的迷雾,聚焦于如何设计一套贴合实际、能真正“救火”的备份方案,并附上可直接部署、经过实战检验的Shell脚本。无论你是刚刚接手数据库运维的新手,还是希望优化现有流程的老兵,这里都有你需要的“干货”和“避坑地图”。

1. 备份策略基石:理解引擎差异与备份类型

在动手写任何一行备份脚本之前,我们必须先理清两个核心概念:存储引擎的特性与备份类型的本质。这直接决定了你后续所有操作的正确性与效率。

1.1 MyISAM与InnoDB:截然不同的备份哲学

很多人知道MySQL有MyISAM和InnoDB,但未必清楚它们在备份恢复上的天壤之别。这并非简单的“冷热”之分,而是源于其底层架构的根本差异。

MyISAM 可以看作一个“静态文件库”。它的表由三个文件组成:.frm(表结构)、.MYD(数据)和.MYI(索引)。备份时,最直接(也几乎是唯一可靠)的方式就是物理文件拷贝。但这带来了一个致命问题:一致性。想象一下,你在复制一个正在被写入的文件,最终得到的副本很可能是损坏的。因此,MyISAM备份必须配合 FLUSH TABLES WITH READ LOCK 命令,锁定所有表为只读状态,或者干脆停止MySQL服务进行冷备份。恢复时,只需将文件复制回datadir目录即可。这种方式简单粗暴,但在高并发、要求7x24小时在线的现代应用中,停机窗口往往是不可接受的。

注意:直接复制MyISAM文件进行迁移时,务必确保目标服务器的MySQL版本与源服务器相同或更高,以避免文件格式不兼容的问题。

InnoDB 则是一个事务性存储引擎。它的数据存储在表空间(如共享的ibdata文件或独立的.ibd文件)中,并通过重做日志(Redo Log)和回滚段(Undo Log)来保证ACID特性。正是这些日志机制,使得InnoDB支持真正的在线热备份。你可以在业务正常运行时,通过事务快照获取一个数据一致性的时间点视图。mysqldump配合--single-transaction选项,就是利用了这个原理。

为了更直观地对比,我们来看一个表格:

特性维度MyISAMInnoDB
备份方式物理文件拷贝(冷备份)逻辑导出(热备份,如mysqldump)或物理热备(如XtraBackup)
一致性保证需锁表或停机通过MVCC实现非阻塞一致性快照
对业务影响高(读写阻塞)低(主要影响I/O和少量锁)
恢复粒度库/表级(文件级)可精细到行级(基于Binlog)
适用场景只读或低频写入、可接受停机的场景高并发、要求24x7在线的事务型应用

结论是清晰的:除非维护历史遗留系统,否则新项目应首选InnoDB。我们的备份策略也将主要围绕InnoDB展开。

1.2 全量、增量与差异:构建备份金字塔

确定了引擎,接下来要规划备份的频率和层次。单一的备份就像把所有鸡蛋放在一个篮子里,风险极高。一个健壮的策略应该是分层的。

  • 全量备份:这是整个备份体系的基石。它备份了在某个时间点数据库的完整状态。通常频率较低(如每周一次),因为数据量大、耗时久、占用存储空间多。但它提供了最直接的恢复起点。
  • 增量备份:这是备份体系的效率核心。它只备份自上一次备份(无论是全量还是增量)以来发生变化的数据。在MySQL中,这通常通过备份**二进制日志(Binary Log, Binlog)**来实现。Binlog记录了所有更改数据库数据的SQL语句或行变化。增量备份频率高(如每天甚至每小时),数据量小,恢复时则需要从全量备份开始,按顺序应用所有的增量备份。
  • 差异备份:有时被提及,它备份自上一次全量备份以来所有变化的数据。恢复时只需要全量备份和最后一次差异备份,比增量恢复链更简单,但备份数据量会随时间增长。

对于大多数业务,我推荐 “每周全量 + 每日增量” 的组合。这既保证了恢复速度(最多需要应用一周的增量日志),又控制了存储成本。一个更精细的策略可以参考下表:

备份类型频率存储介质保留策略恢复目标 (RPO)
全量备份每周日凌晨对象存储/专用备份服务器保留4周(4个版本)最多丢失1周数据
增量备份 (Binlog)每小时本地磁盘 + 异地同步保留7天最多丢失1小时数据
逻辑快照每日(关键业务表)开发/测试环境保留3天用于快速数据修复

2. 核心工具实战:mysqldump的深度使用与陷阱规避

mysqldump是MySQL官方自带的逻辑备份工具,简单易用,但要用好它,避开那些隐藏的“坑”,需要一些技巧。

2.1 超越基础命令:关键参数解析

一个典型的全量备份命令可能长这样:

mysqldump -u${DB_USER} -p${DB_PASS} --single-transaction --master-data=2 --routines --events --triggers --hex-blob --all-databases | gzip > full_backup_$(date +%Y%m%d).sql.gz

让我们拆解其中几个关键参数:

  • --single-transaction:对于InnoDB表,此选项在事务内启动一致性快照,确保备份数据的一致性,是实现热备的关键。对于MyISAM表无效。
  • --master-data=2:这个参数极其重要。它会在备份文件中以注释形式记录备份开始时Binlog的文件名和位置(Position)。=2表示以注释形式记录,=1则会以CHANGE MASTER TO语句记录,用于主从复制搭建。这是后续进行**时间点恢复(PITR)**的锚点。
  • --routines --events --triggers:确保存储过程、事件和触发器也一并备份。
  • --hex-blob:将BLOB类型的数据以十六进制格式导出,避免因特殊字符导致备份文件损坏。
  • | gzip:直接通过管道压缩,节省大量磁盘空间。

一个常见的误区是备份大表时内存溢出。mysqldump默认会将整个结果集拉取到客户端内存再写入文件。对于超大表,可以使用 --quick 选项,它强制逐行检索数据,减少内存占用,但可能会稍微增加备份时间。

2.2 安全与自动化:告别命令行密码警告

直接在命令行中使用 -pYourPassword 会触发一个经典警告:

mysqldump: [Warning] Using a password on the command line interface can be insecure.

这不仅是警告,密码可能通过ps命令被其他用户看到,存在安全风险。更安全的做法是使用配置文件或交互式输入。对于自动化脚本,推荐使用配置文件。

  1. 创建专用的备份配置文件 (例如 /etc/mysql/backup.cnf):

    [client]
    user = backup_user
    password = YourStrongPassword
    host = localhost
    port = 3306
    

    务必设置严格的文件权限:chmod 600 /etc/mysql/backup.cnf

  2. 在脚本中通过 --defaults-extra-file 引用:

    #!/bin/bash
    BACKUP_DIR="/data/backups/mysql"
    CONFIG_FILE="/etc/mysql/backup.cnf"
    DATE=$(date +%Y%m%d_%H%M%S)
    
    # 全量备份
    mysqldump --defaults-extra-file=$CONFIG_FILE \
              --single-transaction \
              --master-data=2 \
              --all-databases \
              --routines \
              --events \
              --triggers \
              --hex-blob | gzip > ${BACKUP_DIR}/full_backup_${DATE}.sql.gz
    
    # 记录备份日志
    echo "${DATE}: Full backup completed - ${BACKUP_DIR}/full_backup_${DATE}.sql.gz" >> /var/log/mysql_backup.log
    

    这种方式既安全,又消除了恼人的警告信息。

2.3 恢复实战:不仅仅是source命令

恢复数据时,根据备份方式的不同,操作也略有差异。

  • 恢复整个实例(--all-databases备份):

    # 解压(如果备份是压缩的)
    gunzip full_backup_20231027.sql.gz
    # 恢复
    mysql --defaults-extra-file=/etc/mysql/backup.cnf < full_backup_20231027.sql
    

    无需指定数据库,因为备份文件内包含创建数据库的语句。

  • 恢复单个数据库(从全实例备份中): 如果备份了整个实例,但只想恢复其中一个库,可以结合 grep 和管道:

    # 这是一个技巧性操作,适用于紧急情况
    gunzip -c full_backup_20231027.sql.gz | sed -n '/^-- Current Database: `target_db`/,/^-- Current Database: `/p' | mysql -u root -p target_db
    

    但更稳妥的方法是,在备份时就使用 --databases db1 db2 只备份需要的库,或者使用 mydumper 这类支持并行备份和单库恢复的工具。

  • 处理大备份文件:直接导入一个几十GB的SQL文件可能会耗尽内存或导致连接超时。可以尝试:

    # 使用pv工具查看进度(需安装)
    pv huge_backup.sql | mysql -u root -p
    # 或者分批次导入(如果文件是多个INSERT语句)
    # 但更好的方法是恢复前在my.cnf中临时调整参数,如增大max_allowed_packet
    

3. 增量备份与时间点恢复:Binlog的救赎之力

全量备份是基石,而增量备份和基于Binlog的时间点恢复(PITR)才是让你在误操作或数据损坏后,能将损失降到分钟级别的“时光机”。

3.1 配置与维护Binlog

首先,确保MySQL服务器已开启Binlog。检查 my.cnf 配置文件:

[mysqld]
server-id = 1 # 主从复制需要,单机备份也建议设置
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 7 # 自动清理7天前的日志,根据磁盘空间调整
max_binlog_size = 100M # 每个Binlog文件最大大小
binlog_format = ROW # 强烈推荐使用ROW格式,能提供最安全的数据恢复

binlog_format=ROW 在恢复时比 STATEMENT 更可靠,因为它记录的是行的实际变化,而非执行的SQL语句,避免了函数、触发器可能带来的不确定性。

3.2 自动化增量备份脚本

增量备份的本质就是定期归档并清理已备份的Binlog文件。下面是一个更健壮的Shell脚本示例,它包含了错误处理和日志记录:

#!/bin/bash
# 增量备份脚本:backup_binlog.sh

set -euo pipefail # 启用严格错误处理

# 配置
MYSQL_CNF="/etc/mysql/backup.cnf"
BACKUP_DIR="/data/backups/mysql/binlog"
LOG_FILE="/var/log/mysql_backup_binlog.log"
BINLOG_INDEX=$(mysql --defaults-extra-file=$MYSQL_CNF -sN -e "SHOW VARIABLES LIKE 'log_bin_index'" | awk '{print $2}')
BINLOG_DIR=$(dirname ${BINLOG_INDEX:-/var/log/mysql/mysql-bin.index})

# 创建目录
mkdir -p $BACKUP_DIR

# 刷新日志,生成新的Binlog文件(便于归档当前的)
mysqladmin --defaults-extra-file=$MYSQL_CNF flush-logs 2>> $LOG_FILE || {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [ERROR] Failed to flush logs" >> $LOG_FILE
    exit 1
}

# 获取当前所有Binlog文件列表
BINLOG_FILES=$(mysql --defaults-extra-file=$MYSQL_CNF -sN -e "SHOW BINARY LOGS" | awk '{print $1}')

# 获取最新的Binlog文件名(最后一个)
LATEST_BINLOG=$(echo "$BINLOG_FILES" | tail -n1)

# 备份除最新文件外的所有Binlog(因为最新的正在被写入)
for binlog in $BINLOG_FILES; do
    if [[ "$binlog" != "$LATEST_BINLOG" ]]; then
        SRC_FILE="${BINLOG_DIR}/${binlog}"
        DST_FILE="${BACKUP_DIR}/${binlog}"

        if [[ ! -f "$DST_FILE" ]]; then
            cp "$SRC_FILE" "$BACKUP_DIR/" && echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] Copied $binlog" >> $LOG_FILE
            # 可选:上传到远程存储(如S3)
            # aws s3 cp "$DST_FILE" "s3://your-bucket/binlog/$binlog"
        fi
    fi
done

# 清理本地已备份的Binlog(由expire_logs_days自动管理,也可手动)
# mysql --defaults-extra-file=$MYSQL_CNF -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY)" 2>> $LOG_FILE

echo "$(date '+%Y-%m-%d %H:%M:%S') [SUCCESS] Incremental backup completed." >> $LOG_FILE

将此脚本加入crontab,每小时执行一次,即可实现自动化的增量备份。

3.3 时间点恢复实战演练

假设场景:今天下午2点,某位开发同事误执行了DELETE FROM important_table,而这张表在昨晚的全量备份后仍有大量更新。

恢复步骤:

  1. 恢复全量备份:首先将数据库还原到昨晚备份时的状态。

    mysql --defaults-extra-file=/etc/mysql/backup.cnf < full_backup_20231026.sql
    

    此时,important_table 的数据是旧的。

  2. 定位恢复终点:我们需要找到误操作发生的时间点。如果知道大概时间(下午2点左右),可以查看Binlog内容定位。

    # 先查看2点前后的Binlog是哪个文件
    ls -lh /data/backups/mysql/binlog/
    # 假设是 mysql-bin.000123
    # 解析该文件,寻找DELETE语句
    mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -v \
      --start-datetime="2023-10-27 13:50:00" \
      --stop-datetime="2023-10-27 14:10:00" \
      /data/backups/mysql/binlog/mysql-bin.000123 | grep -B5 -A5 "DELETE FROM important_table"
    

    从输出中,可以找到该语句的精确时间戳和position。

  3. 应用增量Binlog:应用从全量备份后,到误操作之前的所有Binlog。

    # 假设全量备份时的位置点在 mysql-bin.000120 的 107
    # 误操作发生在 mysql-bin.000123 的 335 之前
    # 我们需要应用 000120, 000121, 000122, 以及000123的一部分
    
    mysqlbinlog --no-defaults \
      --start-position=107 \
      /data/backups/mysql/binlog/mysql-bin.000120 \
      /data/backups/mysql/binlog/mysql-bin.000121 \
      /data/backups/mysql/binlog/mysql-bin.000122 \
      | mysql --defaults-extra-file=/etc/mysql/backup.cnf
    
    # 应用000123文件,直到误操作前的位置
    mysqlbinlog --no-defaults \
      --start-position=107 \
      --stop-position=335 \
      /data/backups/mysql/binlog/mysql-bin.000123 \
      | mysql --defaults-extra-file=/etc/mysql/backup.cnf
    

    至此,数据恢复到了下午1点59分59秒的状态,误删除操作被跳过。

提示:在生产环境执行PITR前,务必先在测试环境完整演练一遍。恢复过程涉及多个步骤和文件,任何顺序错误都可能导致恢复失败或数据不一致。

4. 生产级全自动备份方案设计与脚本集成

纸上得来终觉浅,绝知此事要躬行。我们将前面所有的知识点整合,设计一套可用于中小型生产环境的全自动备份方案,并提供一个完整的、带错误告警的Shell脚本模板。

4.1 方案架构设计

我们的目标是实现一个本地备份与远程容灾相结合的自动化流程:

  1. 本地磁盘:保留最近7天的全量备份和Binlog,用于快速恢复。
  2. 远程对象存储(如AWS S3、阿里云OSS、MinIO):上传所有备份文件,实现异地容灾。
  3. 备份完整性校验:定期自动验证备份文件可恢复。
  4. 监控与告警:备份失败或异常时,及时通知管理员(通过邮件、钉钉、企业微信等)。

目录结构规划如下:

/data/backups/mysql/
├── full/                    # 全量备份目录
│   ├── full_20231022.sql.gz
│   └── ...
├── binlog/                  # 增量Binlog备份目录
│   ├── mysql-bin.000118
│   └── ...
├── logs/                    # 备份日志
│   └── backup.log
└── scripts/                 # 备份脚本
    ├── mysql_full_backup.sh
    └── mysql_incremental_backup.sh

4.2 增强版全量备份脚本

以下脚本增加了压缩、加密(可选)、远程上传、清理旧备份和邮件告警功能。

#!/bin/bash
# 生产环境MySQL全量备份脚本:mysql_full_backup.sh

set -euo pipefail
exec 2>> /data/backups/mysql/logs/backup_error.log # 将标准错误重定向到错误日志

# ========== 用户配置区域 ==========
DB_CONFIG="/etc/mysql/backup.cnf"
BACKUP_ROOT="/data/backups/mysql"
FULL_BACKUP_DIR="${BACKUP_ROOT}/full"
LOG_FILE="${BACKUP_ROOT}/logs/backup.log"
RETENTION_DAYS=7 # 本地保留天数

# 远程存储配置(以AWS S3为例,可选)
USE_S3="true"
S3_BUCKET="s3://your-bucket-name/mysql-backups"
AWS_CLI="/usr/local/bin/aws" # AWS CLI路径

# 邮件告警配置
ALERT_EMAIL="admin@yourcompany.com"
MAIL_SUBJECT="MySQL Backup Alert from $(hostname)"
# ========== 配置结束 ==========

function log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') [$1] $2" >> $LOG_FILE
}

function send_alert() {
    local subject="$1"
    local body="$2"
    echo -e "$body" | mail -s "$MAIL_SUBJECT: $subject" "$ALERT_EMAIL" 2>/dev/null || log "WARNING" "Failed to send alert email."
}

# 初始化目录
mkdir -p $FULL_BACKUP_DIR
mkdir -p $(dirname $LOG_FILE)

START_TIME=$(date +%s)
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="${FULL_BACKUP_DIR}/full_${BACKUP_DATE}.sql"
BACKUP_FILE_GZ="${BACKUP_FILE}.gz"

log "INFO" "========== Starting full backup =========="

# 1. 执行mysqldump
log "INFO" "Starting mysqldump..."
if mysqldump --defaults-extra-file=$DB_CONFIG \
    --single-transaction \
    --master-data=2 \
    --routines \
    --events \
    --triggers \
    --hex-blob \
    --all-databases > $BACKUP_FILE 2>> ${BACKUP_ROOT}/logs/mysqldump_stderr.log;
then
    DUMP_SIZE=$(du -h $BACKUP_FILE | cut -f1)
    log "INFO" "Mysqldump completed successfully. File size: $DUMP_SIZE"
else
    ERROR_MSG=$(tail -5 ${BACKUP_ROOT}/logs/mysqldump_stderr.log)
    log "ERROR" "Mysqldump failed! Error: $ERROR_MSG"
    send_alert "Full Backup FAILED" "Mysqldump process failed. Check error log: ${BACKUP_ROOT}/logs/mysqldump_stderr.log"
    rm -f $BACKUP_FILE
    exit 1
fi

# 2. 压缩备份文件
log "INFO" "Compressing backup file..."
if gzip -9 $BACKUP_FILE; then
    log "INFO" "Compression completed: $BACKUP_FILE_GZ"
else
    log "ERROR" "Compression failed!"
    send_alert "Full Backup Compression FAILED" "Failed to compress backup file: $BACKUP_FILE"
    exit 1
fi

# 3. (可选)加密备份文件(使用GPG)
# ENCRYPTION_KEY="your-key-id"
# gpg --recipient $ENCRYPTION_KEY --encrypt $BACKUP_FILE_GZ
# BACKUP_FILE_GZ="${BACKUP_FILE_GZ}.gpg"
# log "INFO" "Encryption completed."

# 4. 上传到远程S3(可选)
if [[ "$USE_S3" == "true" ]]; then
    log "INFO" "Uploading to S3..."
    if $AWS_CLI s3 cp $BACKUP_FILE_GZ ${S3_BUCKET}/full/ 2>> ${BACKUP_ROOT}/logs/s3_upload.log; then
        log "INFO" "S3 upload successful."
    else
        S3_ERROR=$(tail -5 ${BACKUP_ROOT}/logs/s3_upload.log)
        log "WARNING" "S3 upload failed. Error: $S3_ERROR"
        send_alert "S3 Upload WARNING" "Backup file created locally but failed to upload to S3. Error: $S3_ERROR"
        # 不退出,本地备份成功更重要
    fi
fi

# 5. 清理旧的本地备份
log "INFO" "Cleaning up old local backups (older than ${RETENTION_DAYS} days)..."
find $FULL_BACKUP_DIR -name "full_*.sql.gz" -mtime +$RETENTION_DAYS -delete 2>/dev/null
find $FULL_BACKUP_DIR -name "full_*.sql.gz.gpg" -mtime +$RETENTION_DAYS -delete 2>/dev/null
log "INFO" "Old backup cleanup completed."

# 6. 计算并记录耗时
END_TIME=$(date +%s)
DURATION=$((END_TIME - START_TIME))
log "INFO" "Full backup process finished. Total time: ${DURATION} seconds."
log "INFO" "Backup file: $BACKUP_FILE_GZ"
log "INFO" "========== Full backup completed ==========\n"

# 可选:简单的备份校验(尝试解析sql.gz文件头)
if gzip -t $BACKUP_FILE_GZ 2>/dev/null; then
    log "INFO" "Backup file integrity check passed."
else
    log "ERROR" "Backup file integrity check FAILED! File may be corrupted."
    send_alert "Backup Integrity CHECK FAILED" "The backup file $BACKUP_FILE_GZ failed integrity check. Immediate investigation required!"
fi

4.3 部署与监控

将 mysql_full_backup.sh 和 mysql_incremental_backup.sh(基于3.2节脚本增强)放入服务器,并配置 crontab:

# 编辑crontab
crontab -e

# 每周日凌晨2点进行全量备份
0 2 * * 0 /bin/bash /data/backups/mysql/scripts/mysql_full_backup.sh

# 每小时第5分钟进行增量备份
5 * * * * /bin/bash /data/backups/mysql/scripts/mysql_incremental_backup.sh

# 每天凌晨3点清理备份日志(保留30天)
0 3 * * * find /data/backups/mysql/logs -name "*.log" -mtime +30 -delete

监控是备份系统的生命线。除了脚本自带的邮件告警,还应:

  • 监控备份目录的磁盘空间。
  • 监控cron任务是否按时执行(可以通过在脚本最后写入一个时间戳文件,由监控系统检查该文件的新鲜度来实现)。
  • 定期(如每月)在隔离的测试环境进行恢复演练,这是检验备份有效性的唯一金标准。

最后,记住备份的“3-2-1”黄金法则:至少保留3份备份,使用2种不同介质,其中1份存放在异地。本文提供的脚本和方案是这条法则的一个具体实践起点。真正的安全感,来自于你对这套流程的熟悉程度和定期演练的严谨性。当警报真的响起时,希望你能从容不迫,因为一切恢复路径,早已了然于胸。

运维企业实战Shell脚本合集+万能工具箱 企业实战中必备的`Shell`脚本合集,针对:系统维护、线上业务、数据库、DevOps等多个场景的 阅读详情

相关推荐

自动化MySQL数据备份脚本的最佳实践

mysqldump是MySQL官方提供的一个逻辑备份工具,通过它可以导出数据库中的表结构和数据。它能够生成包含SQL语句的文本文件,这些SQL语句可以用来重建备份时的数据库结构和内容。在使用mysqldump时,可以指定要备份的数据库,导出的文件格式,以及过滤条件等参数。例如,要备份名为mydatabase的数据库,可以使用以下命令:这里-u后面跟用户名,-p表示提示输入密码,mydatabase是要备份的数据库名,是备份文件。mysqldump。

weixin_35705784的博客 656

MySQL--基于Xtrabackup+Shell+Crond实现的数据库(全量+增量)热备份方案

学习背景 不管你是正在上学,还是已经工作了,想必多多少少都听说过删库跑路、rm -rf的情况,主要指的就是被有意或无意的删除掉了数据库的数据,而数据是整个业务最重要的价值体现,如果你的公司或者项目组没有一个成熟的数据库数据备份方案,一旦发生意外,我只能说年轻人,大意了吧,没有备份数据库!!! 一、Xtrabackup介绍 官方介绍文档 简单总结下来就是XtraBackup是Percona旗下的一款产品,支持MySQL数据库的热备份(在线不停机),并且是免费、开源,适用所有MySQL版本,非阻塞、紧密

JustinQin 3万+

点云入门笔记(一):点云数据及获取

点云概念: 点云是某个坐标系下的点的数据集。点包含了丰富的信息,包括三维坐标 X,Y,Z、颜色、分类值、强度值、时间等等。

wc19862274581的博客 2万+

mysql mysqldump数据备份和增量备份

本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*。然后对mysql的备份操作会保留在bak.log文件中。如下图: 开始:2013年05月02日 15:10:57 结束:2013年05

unity3d,unity3d教程下载 849

关于对鱼眼相机图片进行畸变校正的两种思路

鱼眼畸变主要表现为径向畸变(Radial Distortion),图像中心正常,边缘向外拉伸。畸变模型通常基于入射角θ\thetaθ(光线与光学轴夹角)和图像半径rrr的关系。等距投影(Equidistant Projection)rdfθrd​fθ,其中rdr_drd​为畸变图像半径,fff为焦距,θ\thetaθ为入射角。等立体角投影(Equisolid Angle Projection)rd2fsin⁡θ2rd​2fsinθ/2。

qq_45670407的博客 1547

运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案

本文主要介绍了运行openclaw gateway install时出现Gateway install failed: Error: schtasks create failed的解决方案,希望能对学习和使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

CANN ops-transformer 全量化注意力算子 quant_flash_attn 使用指南:三种量化场景、metadata 联合调度与参数约束详解

`quant_flash_attn` 是 CANN ops-transformer 中基于 `torch_npu` 的 `cann_ops_transformer` 扩展接口,用于在 NPU 上执行**全量化场景下的 self-attention 计算**(训练推理归一化),支持 HIF8、MxFP8、FP8 三类量化模式,并配套 `quant_flash_attn_metadata` 元数据生成

gitblog_00207的博客 747

停车位检测:基于YOLOv5与UI界面的实现

YOLOv5是YOLO(You Only Look Once)系列中的最新版本,它能够在单次前向传播中同时完成多个目标的定位与分类,因此被广泛应用于实时目标检测任务。与之前的版本相比,YOLOv5在精度和速度上得到了很大的优化,适合嵌入到实际的自动驾驶和智能交通系统中。YOLOv5使用了卷积神经网络(CNN)进行特征提取,并通过回归方法预测边界框、类别及置信度。高效的推理速度:YOLOv5采用了优化的模型结构,能够在保证精度的同时提供较快的推理速度。较高的精度。

YOLO 696

mysql dump 增量_mysql mysqldump数据备份和增量备份

本篇文章主要讲如何使用shell实现MysqL全量,增量备份。增量备份在周一-周六凌晨3点,会复制MysqL-bin.00000*到指定目录;而全量备份则使用MysqLdump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*。然后对MysqL的备份操作会保留在bak.log文件中。如下图:开始:2013年05月02日 15:10:57 结束:2013年05月0...

weixin_39980184的博客 224

4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2963

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 379

MySQL生产数据备份

对于系统来说,生产数据是非常重要的,有时候不小心删除了却找不回来就酿成了大祸。因此,定时备份生产数据是非常有必要的,即使不小心删除了全部数据,也可以使用备份数据进行回复。本文提供MySQL的备份脚本,可按自己的需求进行修改。

zhou22的博客 1159

从0到1:用Claude 3.7十日拿下教育部课题申报书(附可修改LaTeX模板)

🟣"作为教育部人文社科项目评审专家,请根据近三年立项数据分析,为[您的学科方向]领域推荐5个具有创新性且符合'十四五'规划的重点选题,要求选题体现交叉学科特征,并标注潜在理论突破点"🟣"根据前期研究基础,创建包含4个研究模块、12个关键节点的三维技术路线图,要求体现实验仿真-实证研究-理论建模的螺旋递进关系,并标注每个节点的预期成果形态"🟣"现在切换至教育部学科评审组组长模式,从选题价值、创新程度、研究可行性三个维度对本申报书进行盲审,生成包含9个扣分风险点的诊断报告及修改优先级排序"

智能AI让学术科研更容易 545

mysql 数据增量备份_mysqlmysqldump数据备份和增量备份

本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*。然后对mysql的备份操作会保留在bak.log文件中。如下图:开始:2013年05月02日 15:10:57 结束:2013年05月0...

weixin_39888268的博客 176

基于图神经网络强化学习解决车辆路径规划问题(完整代码+报告)

基于图神经网络强化学习解决车辆路径规划问题(完整代码+报告)

3056

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

shell脚本获取mysql的返回值_CentOS7 企业服务器日常管理Shell脚本mysql日常备份

从企业的角度看全量和增量1)对于中小公司,全量一般每天一次,在业务量低估时执行全备并锁表;2)对于单台数据库如何实现增量。利用rsync(配合定时任务频率高点,或者inotify主从复制)把所有binlog备份到远程服务器。但是尽量还是要做主从复制!3)对于大公司,有可能会做周备,其他时间都是增量;4)一主多从,会有一个从库做备份,延迟同步;需要mysql的mysqldump全量备份场合...

weixin_39596668的博客 329

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

mysql mysql mysqldump数据备份和增量备份

mysql mysql mysqldump数据备份和增量备份 https://www.imooc.com/article/42453 本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000。然后对mysql的备份操作会保留在bak.log文件中。如下图: 开始:2013年05月02日 15:10:57 结

abc 351

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

mysql mysqldump数据备份和增量备份(转)

mysql mysqldump数据备份和增量备份 本篇文章主要讲如何使用shell实现mysql全量,增量备份,还可以按时间备份。   本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-

张伟的专栏 5268

centos mysql 增量备份脚本_Mysql 日常备份和增量备份脚本(Linux)

序 你是否在寻找一个mysql备份脚本?适合对象本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本.本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数.每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬照抄,可能会造成不必要的损失.希望你明白...

weixin_39793189的博客 153

mysql异地增量备份工具_MYSQL数据库自动本地/异地双备份/MYSQL增量备份

构建高安全电子商务网站之(网站文件及数据库自动本地/异地双备份)架构图 继续介绍Linux服务器文件备份,数据库备份,数据安全存储相关的电子商务系统架构。针对安全性有多种多样的解决方案,其中数据备份是重中之重的首要工作。 电子商务网站更加注重考虑数据安全,数据备份方案,包括本地备份、异地备份架构。其中Linux服务器的备份方案非常多,本文介绍一个大众化适用的解决方案,通过编写Shell脚本来完成自...

weixin_35710941的博客 481

MySQL 备份脚本解析

USER="root" # MySQL用户名PASSWORD="your_password" # MySQL密码(使用时替换为实际密码)BACKUP_DIR="/backup/mysql" # 备份文件存储目录DATE=$(date +%Y%m%d) # 当前日期(格式:20231006)WEEKDAY=$(date +%u) # 星期几(1=星期一,7=星期日)

fuyongliang123的博客 834

mysql数据备份脚本-利用innobackup(xtra)

路径: 全量备份: [root@localhost mysql]# cat mysql_backup.sh #!/bin/bash IP=192.168.10.150 USER=root PWD=123456 PORT=3316 DATADIR=/qj/mysql/data/ BACKDIR=/qj/mysql/backup/ #判断文件夹是否存在 if [ -d $BACKDIR ];then rm -rf $BACKDIR* echo -e "\033[1;32m-

kxq的博客 232

mysql 数据备份方案_Mysql数据备份方案分享

考虑到数据的重要性,数据库需要定期的备份,一个比较好的方案记录一下。采用的备份工具为innobackupex,安装方法可以自行搜索一下,或者我之后写一篇文章,也说下mysql的增量和全量备份原理及方法。备份计划:周六进行全量备份,其余时间增量备份,增量的基础是前一天的增量备份,特殊的是周天是对周六的全量备份进行增量。以下是我编写的两个shell脚本,特此分享出来,不足之处可以在下方留言备份脚本运行...

weixin_35812582的博客 571

shell脚本实现数据库表增量同步

需求: 每天定时将 源数据库 study_plan 库的zxxt_class 表 增量同步到 目标数据库 axt_statistics 库的zxxt_class 表中 前提条件: 两个库中的 zxxt_class 表结构一致 询问开发根据哪个字段作为增量参考,这里开发给的是id字段 流程: 获取axt_statistics 库的zxxt_class 表中id字段的最大id值 通过这个id值备份study_plan 库的zxxt_class 表中大于此...

weixin_38367535的博客 1328

mysql增量备份思路_Mysql数据库增量备份的思路和方法

MySQL数据库增量备份,在这之前修改我们的数据库配置文件/etc/my.cnf开启bin-log日志功能即可。接下来是我参考了下网上的一些方法,自己写的,主要还是要能学到他的一些思路和方法。#function:MYSQL增量备份#version:1.0.0#author:wangyanlin#date:2017/08/02#------------------------------------...

weixin_33785828的博客 221

dumpfile mysql_MySQL数据备份之mysqldump使用

mysqldump常用于MySQL数据库逻辑备份。1、各种用法说明A. 最简单的用法:mysqldump -uroot -pPassword [database name]> [dump file]上述命令将指定数据库备份到某dump文件(转储文件)中,比如:mysqldump -uroot -p123 test > test.dump生成的test.dump文件中包含建表语句(生成数...

weixin_39725885的博客 191
上一篇: Flask项目在PyCharm中的5个高效开发技巧(从创建到调试)
下一篇: CTF解题必备:一招搞定COMDLG32.OCX和MSCOMCTL.OCX报错问题
html8
博客等级 码龄8年 105粉丝 1092原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值