使用 mysqlhotcopy 备份和恢复 MySQL 数据库

举报
Tiamo_T 发表于 2021/11/24 21:49:58 2021/11/24
【摘要】 mysqlhotcopy 是 MySQL 安装附带的 perl 脚本。这会锁定表,刷新表,然后执行数据库的副本。您也可以使用 mysqlhotcopy 使用 scp 自动将备份直接复制到另一台服务器

mysqlhotcopy 是 MySQL 安装附带的 perl 脚本。这会锁定表,刷新表,然后执行数据库的副本。您也可以使用 mysqlhotcopy 使用 scp 自动将备份直接复制到另一台服务器

1. mysqlhotcopy 命令:

[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold

上面的例子,将一个 MySQL 数据库 Sugarcrm 备份到 /home/backup/database 目录。

  • –allowold:此选项在进行新备份之前将旧备份重命名为 {datbase-name}_old。在这个例子中,如果/home/backup/database 下已经存在sugarcrm 备份,它会在创建/home/backup/database/sugarcrm 之前将旧备份移动到/home/backup/database/sugarcrm_old。
  • --keepold:该选项指示mysqlhotcopy在备份完成后保留旧的备份(即重命名的_old)。

使用 perldoc 查看 mysqlhotcopy 文档,如下所示。

[local-host]# perldoc mysqlhotcopy

以下是可以传递给 mysqlhotcopy 命令的可用选项。

选项

描述

–addtodest 不要重命名目标目录(如果存在);只需向其中添加文件
–allowold 如果目标存在,则不要中止;通过添加 _old 后缀重命名它
–checkpoint=db_name.tbl_name 插入检查点条目
–chroot=path mysqld 运行所在的 chroot jail 的基本目录
–debug 写调试日志
–dryrun 报告操作而不执行它们
–flushlogs 锁定所有表后刷新日志
-–help 显示帮助信息并退出
–host=host_name 连接到给定主机上的 MySQL 服务器
–keepold 完成后不要删除以前的(重命名的)目标
–noindices 不要在备份中包含完整的索引文件
–password[=password] 连接到服务器时使用的密码
–port=port_num 用于连接的 TCP/IP 端口号
–quiet 除了错误之外保持沉默
–regexp 复制名称与给定正则表达式匹配的所有数据库
–resetmaster 锁定所有表后重置二进制日志
–resetslave 锁定所有表后重置 master.info 文件
–socket=path 用于连接到本地主机
–tmpdir=path 临时目录
--user=user_name, 连接到服务器时使用的 MySQL 用户名
–version 显示版本信息并退出

2. mysqlhotcopy 命令输出:

上面的 mysqlhotcopy 命令将显示类似于以下内容的输出。


[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
Locked 98 tables in 0 seconds.
Flushed tables (`sugarcrm`.`accounts`, `sugarcrm`.`accounts_audit`, `sugarcrm`.`accounts_bugs`) in 0 seconds.
Copying 295 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 98 tables (295 files) in 0 seconds (0 seconds overall).

默认情况下,MySQL 数据库位于 /var/lib/mysql/{db-name} 下。mysqlhotcopy 将表文件从此默认数据库位置备份到备份目录。备份目录 /home/backup/database/sugarcrm 将包含真实 MySQL 数据库 /var/lib/mysql/sugarcrm 目录中所有文件的精确副本。

[local-host]# ls -1 /var/lib/mysql/sugarcrm | wc -l
295
[local-host]# ls -1 /home/backup/database/sugarcrm | wc -l
295

请注意,每个表都有三个对应的文件,扩展名为 *.frm、*.MYD 和 *.MYI。数据库目录还包含一个 db.opt 文件,该文件包含与数据库相关的参数。

在上面的示例中,您可以看到 mysqlhotcopy 备份了 98 个 Sugarcrm 数据库表。因此,备份目录中的文件总数 = 98 个表 * 3 + 1 db 配置文件 = 296 个文件。

3.从mysqlhotcopy恢复

要从 mysqlhotcopy 备份恢复备份,只需将文件从备份目录复制到 /var/lib/mysql/{db-name} 目录。为了安全起见,请确保在恢复(复制)文件之前停止 mysql。将文件复制到 /var/lib/mysql/{db-name} 后,再次启动 mysql。

4. mysqlhotcopy 故障排除

如何解决Can't locate DBD/mysql.pm 问题?mysqlhotcopy 是一个 perl 脚本,它需要 perl-DBD 模块。如果未安装 perl-DBD 模块,您在执行 mysqlhotcopy 时可能会收到以下错误。

[local-host]# /usr/bin/mysqlhotcopy -u root -p My2Secure$Password sugarcrm /home/backup/database --allowold --keepold
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains:
/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi
/usr/lib/perl5/5.8.8 .) at (eval 7) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Proxy, Sponge.
at /usr/bin/mysqlhotcopy line 177

确保安装 perl-DBD 包,如下所示。

[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm
Preparing...                ########################################### [100%]
1:perl-DBD-MySQL         ########################################### [100%]

如何解决 perl-DBD 安装的问题?安装 perl-DBD 时,您可能会收到以下错误消息。

[local-host]# rpm -ivh perl-DBD-MySQL-3.0007-1.fc6.i386.rpm
rpmdb: Program version 4.3 doesn't match environment version
error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch
error: cannot open Packages index using db3 -  (-30974)
warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat
rpmdb: Program version 4.3 doesn't match environment version
error: db4 error(-30974) from dbenv->open: DB_VERSION_MISMATCH: Database environment version mismatch
warning: cannot open Solve database in /usr/lib/rpmdb/i386-redhat-linux/redhat
error: Failed dependencies:
libmysqlclient.so.15 is needed by perl-DBD-MySQL-3.0007-1.fc6.i386
libmysqlclient.so.15(libmysqlclient_15) is needed by perl-DBD-MySQL-3.0007-1.fc6.i386

从 mysql.com 下载并安装 MySQL-shared-compat,这应该可以解决安装 perl-DBD 包时出现的上述错误。

[local-host]# rpm -ivh MySQL-shared-compat-5.1.25-0.rhel5.i386.rpm
Preparing...                ########################################### [100%]
1:MySQL-shared-compat    ########################################### [100%]
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。