xiaohack's Blog - 数据库管理
type: channel
link: https://blog.xiaohack.org/tag/717bbf64-d2724a/
items: 技术分享 | MySQL 8.0逻辑备份MySQL Shell全备脚本
items: 技术分享 | MySQL8.0物理备份Xtrabackup全备脚本
items: 直播预告 | 全景解析 KAT 数据库智能体工具
items: 小公司开发有什么需要避免的操作吗
items: pgsql 基于 pgBackRest 实现的备份还原

技术分享 | MySQL 8.0逻辑备份MySQL Shell全备脚本
type: item
date: 2026-02-03T11:35:31+08:00
description: 本文为墨天轮数据库管理服务团队第162期技术分享，内容原创，作者为技术顾问闫建，如需转载请联系小墨（VX：modb666）并注明来源。如需查看更多文章可关注【墨天轮】公众号。脚本功能此脚本是专门用于MySQL8.0逻辑备份的 MySQL Shell备份脚本，它包含了备份数据库实例的所有对象，是整个实例级别的备份，也是当下取代传统mysqldump工具的最优替代方案。脚本内容该脚本名称为mysqlshell\_full\_backup.sh#!/bin/bash ######################################## # MySQL Shell 自动备份脚本 (MySQL 8.0+) # 功能: 全量逻辑备份 + 错误处理 + 日志记录 + 自动清理 + 时间统计 # 备份文件名格式: full_mysqlshell_backup_时间 # 使用方式: 直接修改脚本中的变量值，然后执行 ./mysqlshell_full_backup.sh ######################################## ################### 配置参数 ################### # MySQL Shell命令绝对路径（重要：请根据实际安装路径修改） MYSQLSH_CMD="/data/soft/mysqlshell8044/bin/mysqlsh" # 备份保留天数（默认15天） RETAIN_DAYS=${RETAIN_DAYS:-15} # 并行度（默认4线程） PARALLEL=${PARALLEL:-4} # 排除的数据库（逗号分隔，默认空） EXCLUDE_SCHEMAS=${EXCLUDE_SCHEMAS:-""} # 备份存储根目录 BACKUP_ROOT="/data/backup" # 时间戳格式：YYYYMMDD_HHMMSS TIMESTAMP=$(date +%Y%m%d_%H%M%S) # 备份目录名称（按您要求的格式） BACKUP_DIR_NAME="full_mysqlshell_backup_${TIMESTAMP}" BACKUP_DIR="${BACKUP_ROOT}/${BACKUP_DIR_NAME}" # MySQL连接参数（请根据实际情况修改） MYSQL_USER="root" MYSQL_PASSWORD="mysql" MYSQL_HOST="localhost" MYSQL_PORT="3306" # 日志文件路径 LOG_FILE="${BACKUP_ROOT}/backup.log" ############################################ ########## 函数：记录日志 ########## log() { local level="$1" local message="$2" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local log_entry="[${timestamp}] [${level}] ${message}" # 输出到标准输出并写入日志文件 echo "${log_entry}" | tee -a "${LOG_FILE}" } ########## 函数：错误处理并退出 ########## error_exit() { log "ERROR" "$1" end_time=$(date +%s) total_runtime=$((end_time - start_time_global)) log "INFO" "脚本异常退出，总运行时间: $(format_duration $total_runtime)" exit 1 } ########## 函数：计算和格式化运行时间 ########## format_duration() { local seconds=$1 local hours=$((seconds / 3600)) local minutes=$(( (seconds % 3600) / 60 )) local secs=$((seconds % 60)) if [ $hours -gt 0 ]; then echo "${hours}小时${minutes}分${secs}秒" elif [ $minutes -gt 0 ]; then echo "${minutes}分${secs}秒" else echo "${secs}秒" fi } ########## 函数：检查依赖工具 ########## check_dependencies() { # 检查MySQL Shell是否存…

技术分享 | MySQL8.0物理备份Xtrabackup全备脚本
type: item
date: 2026-01-27T12:22:29+08:00
description: 本文为墨天轮数据库管理服务团队第159期技术分享，内容原创，作者为技术顾问闫建，如需转载请联系小墨（VX：modb666）并注明来源。如需查看更多文章可关注【墨天轮】公众号。脚本功能此脚本是专门用于MySQL8.0物理备份的xtrabackup脚本,并且xtrabackup版本为8.0的最新版，它包含了备份数据库（包含全量备份，错误处理，日志记录，自动清理，耗时统计）的完整配置。脚本内容该脚本名称为xtrabackup8.0\_full.sh#!/bin/bash # =============================================== # MySQL XtraBackup 全量备份脚本 (默认未启用压缩) # 功能：全量备份 + 错误处理 + 日志记录 + 自动清理 + 耗时统计 # 版本：1.0 # 日期：2025-11-04 # =============================================== # ------------------------------- # 可配置变量（修改此处适应环境） # ------------------------------- # 基础路径 BACKUP_BASE_DIR="/data/backup" # 备份根目录 LOG_DIR="${BACKUP_BASE_DIR}/logs" # 日志目录 FULL_BACKUP_DIR="${BACKUP_BASE_DIR}/full" # 全量备份目录 # MySQL 连接配置 MYSQL_USER="root" # 备份专用用户（需提前授权） MYSQL_PASSWORD="mysql" # 用户密码 MYSQL_SOCKET="/data/mysql/3306/run/mysql.sock" # MySQL Socket路径 MYSQL_CNF="/etc/my.cnf" # MySQL配置文件路径 # 备份参数 RETENTION_DAYS=7 # 备份保留天数（默认7天） COMPRESS_ENABLED=0 # 是否启用压缩（0-禁用，1-启用，默认禁用） COMPRESS_ALGORITHM="zstd" # 压缩算法（zstd/lz4/quicklz，默认zstd，如果采用zstd压缩方式，在解压的时候建议在OS上检查是否安装 zstd软件，如未安装，请提前安装yum install zstd） COMPRESS_THREADS=4 # 压缩线程数（默认4） PARALLEL=4 # 备份并行线程数（默认4） # XtraBackup路径（若不在PATH中，需指定完整路径，注意：该路径需要提前修改为符合实际环境的绝对路径） XTRABACKUP_PATH="/data/soft/xtrabackup8.0.35-34-glibc2.36/bin/xtrabackup" # ------------------------------- # 函数定义 # ------------------------------- # 日志记录函数 log_message() { local level="$1" local message="$2" local timestamp=$(date '+%Y-%m-%d %H:%M:%S') local log_entry="[${timestamp}] [${level}] ${message}" # 输出到标准输出并写入日志文件 echo "${log_entry}" | tee -a "${CURRENT_LOG_FILE}" } # 错误处理函数 error_exit() { log_message "ERROR" "脚本执行失败: $1" exit 1 } # 计算和格式化时间差函数 calculate_duration() { local start_seconds="$1" local end_seconds="$2" local total_seconds=$((end_seconds - start_seconds)) # 转换为天、小时、分钟、秒的易读格式 local days=$((total_seconds / 86400)) local hours=$(( (total_seconds % 86400) / 3600 )) local minutes=$(( (total_seconds % 3600) / 60 )) local seconds=$((total_seconds % 60)) local duration_str="" if [ $days -gt 0 ]; then duration_str="…

直播预告 | 全景解析 KAT 数据库智能体工具
type: item
date: 2026-01-23T14:43:02+08:00

小公司开发有什么需要避免的操作吗
type: item
date: 2026-01-22T15:34:59+08:00
description: 目前背景: 是个小公司的后端开发,服务器,数据库,git,公司路由器都在我手里,感觉责任重大,想知道有什么需要避免的操作吗,主要是害怕万一一周或者几个月我不在,避免公司业务出问题以下是我自己想到的几点,想知道还有没有其他没想到的方案1.数据库的分区表,特别是和时间相关的,不能手动生成,要不然后面人不在没交代的话会直接给服务器崩掉2.给本地调试的服务器端口白名单,不能图方便给网段开白名单,要不然后面会有脚本小子或者勒索病毒来扫3.一些公共库,如果有不符合业务需求的地方,不要把人家的源码拉下来自己改然后编译成引用放在库里,(比如说 ef core upsert 的库之前不支持 ef10)否则后面更新时候会炸掉4.单元测试不要埋雷,一些当调试用的或临时跑点小任务单元测试不能放在例行单元测试的文件夹里面,污染数据库

pgsql 基于 pgBackRest 实现的备份还原
type: item
date: 2026-01-19T17:45:55+08:00
description: pgBackRest简介pgBackRest 旨在提供一个简单可靠，容易纵向扩展的 PostgreSQL 备份恢复系统。pgBackRest 并不依赖像 tar 和 rsync 这样的传统备份工具，而是通过在内部实现所有备份功能，并使用自定义协议来与远程系统进行通信。 消除对 tar 和 rsync 的依赖可以更好地解决特定于数据库的备份问题。 自定义远程协议提供了更多的灵活性，并限制执行备份所需的连接类型，从而提高安全性。相关网站pgBackRest 主页：http://pgbackrest.org手册：pgBackRest User Guide - RHELpgBackRestGithub 主页：GitHub - pgbackrest/pgbackrest: Reliable PostgreSQL Backup & RestorepgbackRest 特征并行备份和还原本地或远程操作完整，增量和差异备份备份轮换和存档到期备份完整性页面校验和备份恢复流压缩和校验和增量还原并行，异步 WAL Push＆Get表空间和链接支持S3、Azure 和 GCS 兼容对象存储支持加密与 PostgreSQL > = 8.3 的兼容性pgbackRest 安装 ip软件角色 192.168.1.11postgres,pgbackrestprimary192.168.1.12postgres,pgbackreststandby192.168.1.13postgres,standby192.168.1.16pgbackrest远程备份工具端 ubuntu (所有节点) ：sudo apt-get install pgbackrest 创建所需目录并赋予权限su - root mkdir -p -m 770 /var/log/pgbackrest chown postgres.postgres /var/log/pgbackrest/ chown postgres.postgres -R /etc/pgbackrest/ 主从 pgbackrest 配置文件su postgres vim /etc/pgbackrest.conf [pg_5433] pg1-port=5433 pg1-path=/data/postgresql/pgdata/pg-5433/ pg1-socket-path=/var/run/postgresql/ [global] repo1-host=192.168.28.14 repo1-host-user=postgres repo1-path=/var/lib/pgbackrest repo1-retention-full=2 process-max=3 [global:archive-push] compress-level=3 主库参数解释：[pg_5433] 部分 这个 pg_5433 是备份集群的名字，多个备份集群可以添加 比如：[test-1],[test-2] 等等 pg1-path=/data/postgresql/pgdata/pg-5433/: 指定 PostgreSQL 数据库实例的数据目录路径。这是 pgBackRest 需要备份的主要内容所在的位置。 pg1-socket-path=/var/run/postgresql/: 指定 PostgreSQL 服务器的套接字文件（socket file）路径。pgBackRest 使用这个路径来通过 UNIX 套接字连接到数据库。 pg1-user=postgres: 定义 pgBackRest 连接到 PostgreSQL 实例时应该使用的用户名。这个用户需要有足够的权限来读取数据库文件和执行备份相关的操作。 [global] 部分 这部分的配置适用于 pgBackRest 的全局设置，影响所有备份和恢复操作。 repo1-host=192.168.28.14: 指定远程备份仓库的主机地址。这表明备份数据将被存储在指定 IP 地址的服务器上。pgBackRest 支持多个备份仓库，这里的 repo1 表示第一个仓库。 repo1-host-user=postgres: 定义访问远程备份仓库主机时使用的用户名。postgres 将以这个用户的身份在远程主机上执行操作。 log-level-file=detail: 设置文件日志记录的详细级别。detail 级别会记录更详细的操作信息，有助于故障排查和监控备份过程。 log-path=/var/log/pgbackrest: 指定日志文件的存储路径。pgBackRest 会将运行日志写入这个目录下，便于后续的日志分析和问题定位。 远程备份工具端配置文件su postgres vim /etc/pgback…