当前位置: 首页 > news >正文

MySQL高效备份实战指南

高级使用案例

案例1:增量备份

首先进行完整备份:

xtrabackup --backup --target-dir=/backups/full --user=root --password=yourpassword

进行第一次增量备份:

xtrabackup --backup --target-dir=/backups/inc1 --incremental-basedir=/backups/full --user=root --password=yourpassword

进行第二次增量备份:

xtrabackup --backup --target-dir=/backups/inc2 --incremental-basedir=/backups/inc1 --user=root --password=yourpassword

准备完整备份:

xtrabackup --prepare --apply-log-only --target-dir=/backups/full

应用第一个增量备份:

xtrabackup --prepare --apply-log-only --target-dir=/backups/full --incremental-dir=/backups/inc1

应用第二个增量备份:

xtrabackup --prepare --target-dir=/backups/full --incremental-dir=/backups/inc2

案例2:压缩备份

xtrabackup --backup --compress --target-dir=/backups/compressed --user=root --password=yourpassword

解压并准备备份:

xtrabackup --decompress --target-dir=/backups/compressed
xtrabackup --prepare --target-dir=/backups/compressed

案例3:并行备份和恢复

xtrabackup --backup --parallel=4 --target-dir=/backups/parallel --user=root --password=yourpassword

并行压缩:

xtrabackup --backup --compress --compress-threads=4 --parallel=4 --target-dir=/backups/parallel_compressed --user=root --password=yourpassword

案例4:加密备份

生成加密密钥:

openssl rand -base64 24 > /backups/encryption_key

创建加密备份:

xtrabackup --backup --target-dir=/backups/encrypted --encrypt=AES256 --encrypt-key-file=/backups/encryption_key --user=root --password=yourpassword

解密备份:

xtrabackup --decrypt=AES256 --encrypt-key-file=/backups/encryption_key --target-dir=/backups/encrypted

案例5:流式备份

备份到单个压缩文件:

xtrabackup --backup --stream=xbstream --user=root --password=yourpassword | gzip > /backups/backup.xbstream.gz

从流式备份恢复:

gunzip -c /backups/backup.xbstream.gz | xbstream -x -C /var/lib/mysql
xtrabackup --prepare --target-dir=/var/lib/mysql

常用选项说明

选项描述
--backup执行备份操作
--prepare准备备份以进行恢复
--copy-back将备份复制回原始位置
--target-dir指定备份目标目录
--userMySQL 用户名
--passwordMySQL 密码
--hostMySQL 主机地址
--portMySQL 端口
--parallel并行线程数
--compress启用压缩
--compress-threads压缩线程数
--encrypt加密算法
--encrypt-key-file加密密钥文件
--incremental-basedir增量备份的基础目录
--incremental-dir增量备份目录
--stream流式备份格式 (xbstream)

注意事项

  1. 确保有足够的磁盘空间存放备份文件

  2. 备份期间数据库负载可能会增加

  3. 恢复前确保 MySQL 服务已停止

  4. 恢复后可能需要调整文件权限

  5. 定期测试备份的可用性

最佳实践

  1. 定期进行完整备份和增量备份

  2. 备份文件存储在不同于数据库服务器的位置

  3. 实施备份验证流程

  4. 记录备份和恢复过程

  5. 监控备份作业的状态和持续时间

通过以上指南,您可以充分利用 XtraBackup 8.0.35-33 的强大功能来保护您的 MySQL 数据。

MyDumper 详细使用指南

MyDumper 是一个高性能的 MySQL 逻辑备份工具,相比传统的 mysqldump 具有并行备份、快照一致性等优势。以下是 MyDumper 的详细使用方式和案例。

安装 MyDumper

Ubuntu/Debian 系统

sudo apt-get install mydumper

CentOS/RHEL 系统

sudo yum install mydumper

从源码编译

git clone https://github.com/mydumper/mydumper.git
cd mydumper
mkdir build
cd build
cmake ..
make
make install

基本使用

1. 完整备份数据库

mydumper -u [username] -p [password] -h [host] -P [port] -o /backup/directory

2. 恢复数据库

myloader -u [username] -p [password] -h [host] -P [port] -d /backup/directory

常用参数说明

参数描述示例
-u用户名-u root
-p密码-p secret
-h主机地址-h 127.0.0.1
-P端口号-P 3306
-o输出目录-o /backups
-d恢复时指定备份目录-d /backups
-B指定备份的数据库-B db1,db2
-T指定备份的表-T db1.table1
-t线程数-t 8
-c压缩输出-c
-v详细输出-v 3
-C压缩备份文件-C
-e备份表结构-e
-r分割表的行数-r 100000
-F按大小分割备份文件(MB)-F 256
-s一致性快照-s

使用案例

案例1:备份单个数据库

mydumper -u root -p password -h localhost -B mydatabase -o /backups/mydatabase

案例2:备份多个特定表

mydumper -u root -p password -h localhost -T db1.table1,db1.table2 -o /backups/tables

案例3:多线程备份(8个线程)

mydumper -u root -p password -h localhost -t 8 -o /backups/full

案例4:压缩备份

mydumper -u root -p password -h localhost -c -o /backups/compressed

案例5:按100万行分割表数据

mydumper -u root -p password -h localhost -r 1000000 -o /backups/split

案例6:备份数据库结构(不备份数据)

mydumper -u root -p password -h localhost -e -o /backups/schema

案例7:恢复数据库到不同名称

myloader -u root -p password -h localhost -d /backups/full -B new_db_name

案例8:只恢复特定表

myloader -u root -p password -h localhost -d /backups/full -T db1.table1

高级功能

1. 一致性快照备份

mydumper -u root -p password -h localhost -s -o /backups/snapshot

2. 正则表达式过滤表

mydumper -u root -p password -h localhost -x '^sakila\.(actor|film)' -o /backups/regex

3. 备份时排除某些表

mydumper -u root -p password -h localhost -B sakila -X '^sakila\.film_text' -o /backups/exclude

4. 长查询超时设置

mydumper -u root -p password -h localhost --long-query-retries=10 --long-query-retry-interval=30 -o /backups/timeout

5. 只备份数据不备份结构

mydumper -u root -p password -h localhost --no-schemas -o /backups/data_only

实际应用场景

场景1:生产环境每日备份

# 备份脚本
#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backups/mysql/$DATE"
LOG_FILE="/var/log/mydumper_${DATE}.log"mydumper -u backup_user -p backup_pass -h 10.0.0.1 -P 3306 -t 4 -c -v 3 -o $BACKUP_DIR > $LOG_FILE 2>&1# 保留7天备份
find /backups/mysql/ -type d -mtime +7 -exec rm -rf {} \;

场景2:大数据表部分恢复

# 只恢复用户表的前100万条数据
myloader -u root -p password -h localhost -d /backups/full -T db.users --rows=1000000

场景3:跨服务器迁移数据库

# 源服务器
mydumper -u root -p password -h source_host -B db_to_migrate -c -o /tmp/db_backup# 目标服务器
myloader -u root -p password -h target_host -d /tmp/db_backup

注意事项

  1. 确保备份用户有足够的权限(至少需要 SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT 权限)

  2. 大数据库备份时考虑磁盘空间

  3. 备份期间可能会对生产数据库性能产生影响

  4. 恢复前最好在测试环境验证备份文件

  5. 考虑使用--no-locks选项减少锁表时间(但可能影响一致性)

性能优化建议

  1. 根据服务器CPU核心数设置适当的线程数(-t)

  2. 对大表使用-r参数分割备份文件

  3. 使用-c或-C参数压缩备份减少存储空间

  4. 考虑使用--no-locks选项减少锁表时间(如果允许不一致)

  5. 对于InnoDB表,使用-s参数获取一致性快照

通过合理配置MyDumper,您可以高效地完成MySQL数据库的备份和恢复工作,满足各种业务场景的需求。

mysqlhotcopy 使用指南

mysqlhotcopy 是 MySQL 提供的一个 Perl 脚本工具,用于快速备份 MyISAM 和 ARCHIVE 表。它通过直接复制数据库文件来实现快速备份,比逻辑备份工具如 mysqldump 更快,但只适用于特定存储引擎。

安装与准备

mysqlhotcopy 通常随 MySQL 客户端一起安装,位于 MySQL 的 bin 目录下。

检查是否安装

which mysqlhotcopy

确保依赖安装(Perl 模块)

sudo apt-get install perl-dbi perl-dbd-mysql  # Debian/Ubuntu
sudo yum install perl-DBI perl-DBD-Mysql     # CentOS/RHEL

基本语法

mysqlhotcopy [options] db_name [/path/to/backup/directory]

常用选项

选项描述
--user=MySQL 用户名
--password=MySQL 密码
--host=MySQL 主机
--port=MySQL 端口
--socket=MySQL socket 文件
--regexp=使用正则表达式匹配数据库
--allowold不覆盖现有备份,添加 _old 后缀
--keepold不删除被覆盖的备份
--noindices不备份索引文件
--method=复制方法 (cp 或 scp)
--flushlog备份后刷新日志
--resetmaster备份后重置二进制日志
--resetslave备份后重置从库信息
--addtodest添加而不是替换目标目录
--dryrun模拟执行,不实际复制

使用案例

案例1:备份单个数据库

mysqlhotcopy --user=root --password=yourpassword mydatabase /backup/mysql

案例2:备份多个数据库

mysqlhotcopy --user=root --password=yourpassword db1 db2 db3 /backup/mysql

案例3:使用正则表达式备份匹配的数据库

mysqlhotcopy --user=root --password=yourpassword --regexp='^test_' /backup/mysql

案例4:保留旧备份

mysqlhotcopy --user=root --password=yourpassword --allowold --keepold mydatabase /backup/mysql

案例5:远程备份到其他服务器

mysqlhotcopy --user=root --password=yourpassword --method=scp mydatabase user@remotehost:/remote/backup/dir

案例6:不备份索引文件

mysqlhotcopy --user=root --password=yourpassword --noindices mydatabase /backup/mysql

案例7:备份后刷新日志

mysqlhotcopy --user=root --password=yourpassword --flushlog mydatabase /backup/mysql

案例8:模拟运行(不实际备份)

mysqlhotcopy --user=root --password=yourpassword --dryrun mydatabase /backup/mysql

实际应用场景

场景1:生产环境每日备份脚本

#!/bin/bash
DATE=$(date +%Y%m%d)
BACKUP_DIR="/backup/mysql/$DATE"
LOG_FILE="/var/log/mysqlhotcopy_${DATE}.log"# 确保备份目录存在
mkdir -p $BACKUP_DIR# 备份所有数据库
mysqlhotcopy --user=backup_user --password=backup_pass \--allowold --keepold \--flushlog \--regexp='.*' \$BACKUP_DIR > $LOG_FILE 2>&1# 删除7天前的备份
find /backup/mysql/ -type d -mtime +7 -exec rm -rf {} \;

场景2:备份特定表

# 备份 mydatabase 中的 table1 和 table2
mysqlhotcopy --user=root --password=yourpassword \
mydatabase.table1 mydatabase.table2 \
/backup/mysql

场景3:增量备份策略

#!/bin/bash
DATE=$(date +%Y%m%d)
FULL_BACKUP_DIR="/backup/mysql/full"
INC_BACKUP_DIR="/backup/mysql/inc_$DATE"# 每周日做完整备份
if [ $(date +%u) -eq 7 ]; thenmysqlhotcopy --user=backup_user --password=backup_pass \--allowold --keepold \--flushlog \--regexp='.*' \$FULL_BACKUP_DIR
else# 其他日子做增量备份mysqlhotcopy --user=backup_user --password=backup_pass \--addtodest \--regexp='.*' \$INC_BACKUP_DIR
fi

恢复数据库

mysqlhotcopy 的恢复是通过直接复制文件回原始位置实现的:

停止 MySQL 服务

systemctl stop mysql

复制备份文件到 MySQL 数据目录

cp -R /backup/mysql/mydatabase /var/lib/mysql/

确保文件权限正确

chown -R mysql:mysql /var/lib/mysql/mydatabase

启动 MySQL 服务

systemctl start mysql

注意事项

  1. 存储引擎限制:mysqlhotcopy 只适用于 MyISAM 和 ARCHIVE 表,不适用于 InnoDB

  2. 锁表:mysqlhotcopy 在备份期间会锁定表,可能导致应用程序短暂阻塞

  3. 备份一致性:对于正在写入的表,备份可能不一致

  4. 权限要求

    • 执行用户需要有读取数据库文件的权限

    • MySQL 用户需要 SELECT、RELOAD、LOCK TABLES 权限

  5. 备份完整性:备份后建议验证备份文件的完整性

  6. 版本兼容性:确保备份和恢复使用相同版本的 MySQL

性能优化建议

  1. 在低峰期执行备份操作

  2. 对于大型数据库,考虑分批备份

  3. 使用 --noindices 选项可以加快备份速度(但恢复时需要重建索引)

  4. 考虑使用 --method=scp 直接备份到远程服务器,减少本地磁盘IO

  5. 对于频繁更新的表,考虑结合 FLUSH TABLES 命令确保数据一致性

替代方案

由于 mysqlhotcopy 的局限性,现代 MySQL 环境通常使用以下替代方案:

  • 对于 InnoDB 表:使用 Percona XtraBackup

  • 逻辑备份:使用 mysqldump 或 mydumper

  • 文件系统快照:LVM 快照或存储设备快照功能

mysqlhotcopy 最适合用于 MyISAM 表的快速备份场景,特别是当数据库大小适中且可以接受短暂锁表的情况下。

http://www.dtcms.com/a/470365.html

相关文章:

  • OpenBLT移植教程
  • 怎样做站长建网站荥阳市建设局网站
  • 虚拟仿真实训:打破时空界限,重塑未来技能,引领教育新变革
  • MySQL字符集配置全攻略:告别乱码
  • 「机器学习笔记10」贝叶斯学习——从逆向思维到简化现实的强大武器
  • 01-Python简介与环境搭建-教程
  • 高端设计网站都有哪些微信公众号推广赚钱
  • 数字化转型:概念性名词浅谈(第七十二讲)
  • 济南网站建设泉诺上海手机网站哪家最好
  • 鸿蒙Next文件上传下载:全场景高效数据传输方案
  • STM32G474单片机开发入门(九)低功耗模式实战
  • 怎么样给一个网站做横向导航栏搜索引擎优化的概念是什么
  • 网站开发近期市场做一个网站的预算
  • mac使用国内源安装brew并且配置使用国内源安装软件
  • 基因组组装:3. juicer 比对 HiC 数据至参考基因组
  • 工信部网站原来是wordpress发送自定义邮件
  • 怎么再贴吧给自己的网站做宣传网站建设的维护工作有哪些
  • Thinkphp通过supervisor 执行 queue 队列不间断报错Unable to write output 解决
  • Wireshark常用过滤规则
  • 24小时自助建站网站运营与管理的内容包括
  • 巴塘网站建设建设投资基金管理有限公司网站
  • 配置Python环境之Conda
  • 山东网站建设开发建设部网上办事大厅
  • 十四,数据结构-堆
  • 网站建设v5star房屋装修效果图大全
  • Dlib机器学习算法C++实现示例
  • 在rk3576搞出来了虚拟摄像头,能打抖音伴侣
  • 计算机组成原理 刘宏伟 第一章 计算机系统概论
  • 基于模型的系统工程(MBSE)实践指南:破解研发不确定性的利器
  • 宠物用品技术支持 东莞网站建设顺企网企业查询