mysqlhotcopy 正则使用小技巧

preview
需积分: 0 0 下载量 194 浏览量 更新于2020-09-11 收藏 25KB PDF 举报
`mysqlhotcopy`是MySQL提供的一种用于快速备份MyISAM和ARCHIVE表的命令行工具。这个工具在不中断服务的情况下能够创建数据的物理备份,极大地提高了备份效率。在使用`mysqlhotcopy`时,我们可以结合正则表达式来更精确地选择需要备份的数据。 确保已经为`mysqlhotcopy`分配了一个具有适当权限的用户,如在描述中所示: ```sql grant select, reload, lock tables on *.* to 'hotcopy'@'localhost' identified by '123456'; ``` 这样,名为`hotcopy`的用户就有权在本地执行`mysqlhotcopy`操作,具备查看、重新加载和锁定表的权限。 接下来,我们将探讨如何利用`--regexp`选项来筛选要备份的数据库或表: 1. **备份特定前缀的数据库**: 若要备份所有以`abc`开头的数据库,可以使用以下命令: ```bash mysqlhotcopy --flushlog -u='hotcopy' -p='123456' --regexp= ^abc /home/bak ``` 这里的正则表达式`^abc`表示匹配以`abc`开头的字符串。 2. **备份特定范围内的数据库**: 如果想要备份以字母`a`到`d`开头的所有数据库,可以使用: ```bash mysqlhotcopy --flushlog -u='hotcopy' -p='123456' --regexp=^[a-d] /home/bak ``` `^[a-d]`匹配以`a`、`b`、`c`或`d`开头的数据库名。 3. **备份特定前缀的表**: 要备份`test`数据库中所有以`abc`开头的表,运行: ```bash mysqlhotcopy --flushlog -u='hotcopy' -p='123456' test./^abc/ /home/bak ``` 正则表达式`/^abc/`匹配以`abc`开头的表名。 4. **备份非特定前缀的表**: 要排除所有以`abc`开头的表,可以使用否定匹配: ```bash mysqlhotcopy --flushlog -u='hotcopy' -p='123456' test./~^abc/ /home/bak ``` `~^abc`表示不以`abc`开头的表。 5. **备份多个特定前缀的表**: 如果要备份`test`数据库中所有以`abc_a`至`abc_w`开头的表,可以使用: ```bash mysqlhotcopy --flushlog -u='hotcopy' -p='123456' test./^\(abc_[a-w]\)/ /home/bak ``` 正则表达式`^\(abc_[a-w]\)`匹配以`abc_`后跟`a`到`w`之间任意一个字母的表名。 请注意,使用正则表达式时要确保它们符合MySQL和系统shell的规则。在某些情况下,可能需要对正则表达式进行转义,以避免与shell解释器发生冲突。 在执行备份操作时,请务必了解`mysqlhotcopy`的其他选项,例如`--skip-log-bin`(如果启用了二进制日志,则跳过更新日志),以及`--no-data`(仅备份结构,不包括数据)。同时,记得定期检查备份的完整性和有效性,以便在需要时能够恢复数据。 虽然`mysqlhotcopy`在处理MyISAM和ARCHIVE表时非常高效,但它并不适用于InnoDB表,因为InnoDB表在备份期间需要锁定,这可能会导致服务中断。对于InnoDB表,通常会使用其他的备份方法,如mysqldump或者Percona Xtrabackup等工具。