一、基本概念
- MySQL Hotcopy 是一个用于备份 MySQL 数据库的工具,由 Percona 开发(早期为开源社区工具)。
- 它的核心优势是能够在数据库 正常运行(不中断服务)的情况下进行热备份,适用于 MyISAM 和 ARCHIVE 存储引擎的数据库(不支持 InnoDB,因 InnoDB 需要事务日志或快照机制)。
- 资料已经分类整理好:
https://pan.quark.cn/s/f52968c518d3
二、主要特点
特点 | 说明 |
---|
热备份 | 无需停止 MySQL 服务,避免业务中断,适合对可用性要求高的场景。 |
基于文件复制 | 通过复制数据库文件(.frm 、.MYD 、.MYI 等)实现备份,速度较快。 |
局限性 | 仅支持 MyISAM 和 ARCHIVE 引擎,对 InnoDB 无效(需用其他工具如 mysqldump)。 |
依赖锁机制 | 备份时会对表加 读锁(LOCK TABLES READ ),确保数据一致性,但可能短暂阻塞写操作。 |
三、适用场景
- MyISAM 数据库为主的系统:如老旧系统或特定场景下使用 MyISAM 的业务。
- 需要快速物理备份:相比逻辑备份(如
mysqldump
),直接复制文件更高效。 - 冷备替代方案:若无法停机,且不需要事务级一致性(如非事务型数据),可作为折中方案。
四、操作前提
- 权限要求:
- 具备
SELECT
和 LOCK TABLES
权限(用于锁定表)。 - 操作系统层面需有文件读取权限(备份目录的写入权限)。
- 工具依赖:
- 需安装
perl
环境(MySQL Hotcopy 是 Perl 脚本)。 - 确保 MySQL 服务器与备份目标服务器之间有足够磁盘空间。
五、基本用法
语法格式:
mysqlhotcopy [options] <database> <backup_directory>
- 参数说明:
<database>
:需备份的数据库名(可指定单个库或 库名/表名
备份单个表)。<backup_directory>
:备份文件存储路径(需提前创建,且 MySQL 进程有写入权限)。
常用选项:
选项 | 作用 |
---|
-u <user> | 指定数据库用户名。 |
-p <password> | 指定数据库密码(注意:密码可能暴露在命令行,建议用配置文件)。 |
-h <host> | 指定数据库主机(默认本地 localhost )。 |
-P <port> | 指定数据库端口(默认 3306 )。 |
--prefix=NAME | 为备份表名添加前缀(避免同名冲突)。 |
--keepold | 保留旧备份文件(需配合其他选项使用)。 |
示例:
- 备份整个
mydb
数据库到 /backup/mydb_backup
:mysqlhotcopy -u root -p mypassword mydb /backup/mydb_backup
- 备份
mydb
中的 users
表到指定目录:mysqlhotcopy -u root -p mypassword mydb/users /backup/mydb_tables/users
六、注意事项
- 引擎限制:
- 绝对不要对 InnoDB 表 使用
mysqlhotcopy
,会导致备份数据不一致(InnoDB 需通过 innobackupex
等工具实现热备)。
- 锁的影响:
- 备份期间对表加读锁,会阻塞写操作(如
INSERT
/UPDATE
/DELETE
),建议在低峰期执行。
- 数据一致性:
- 仅保证备份时刻的一致性,若需跨库或跨服务器恢复,需确保 MySQL 版本和配置一致。
- 恢复方式:
- 直接将备份文件复制到目标数据库目录(需确保 MySQL 服务停止或表未被使用),并赋予正确权限。
七、替代方案
随着 MySQL 发展,mysqlhotcopy
的使用场景逐渐减少,以下为更优方案:
- InnoDB 热备:使用 Percona XtraBackup 或 MariaDB Backup,支持事务级一致性备份。
- 逻辑备份:
mysqldump
(支持所有引擎,基于 SQL 语句导出,适合小规模数据)。 - 物理备份工具:
mydumper/myloader
(高性能分库分表备份)。
八、总结
- MySQL Hotcopy 是早期 MySQL 热备份的重要工具,但受限于引擎支持和锁机制,目前仅适用于特定遗留场景。
- 在生产环境中,建议根据存储引擎选择更专业的备份工具(如 InnoDB 用 XtraBackup,MyISAM 用
mysqlhotcopy
或物理文件复制),并结合定期全量备份与增量日志备份,确保数据可靠性。