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

网友投稿 750 2022-05-30

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 命令的可用选项。

选项

描述

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 个文件。

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

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%]

MySQL 数据库

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python 的 tuple 是不是冗余设计?
下一篇:物联网第三阶段考核后的延伸1-知识点扫盲
相关文章