使用 mysqlhotcopy 备份和恢复 MySQL 数据库
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%]
- 点赞
- 收藏
- 关注作者
评论(0)