有没有与 InnoDB 的 mysqlhotcopy 相当的程序?

有没有与 InnoDB 的 mysqlhotcopy 相当的程序?

目前我使用 mysqldump 进行备份,速度很慢,但还算可以。最大的问题是恢复数据库,这需要几天时间。转储大约有 7GB 压缩,所以这不是一个很小的数据库,但它不应该超出 mysql 的合理范围。

那么我还有什么其他选择?像 mysqlhotcopy 这样的工具就很完美了。

答案1

看看 Percona 的备份软件,它允许热备份并且完全免费。

答案2

如果您已--innodb_file_per_table启用,则可以将.ibd 文件和关联表从一个数据库移动到另一个数据库,请使用 RENAME TABLE 语句:

RENAME TABLE db1.tbl_name TO db2.tbl_name;

如果您有一个 .ibd 文件的“干净”备份,则可以按照以下步骤将其还原到其来源的 MySQL 安装:

发出此 ALTER TABLE 语句来删除当前的 .ibd 文件:

ALTER TABLE tbl_name DISCARD TABLESPACE;

将备份 .ibd 文件复制到正确的数据库目录。

发出此 ALTER TABLE 语句来告诉 InnoDB 对表使用新的 .ibd 文件:

ALTER TABLE tbl_name IMPORT TABLESPACE;

在这种情况下,“干净的” .ibd 文件备份是满足以下要求的备份:

.ibd 文件中没有未提交的事务修改。

.ibd 文件中没有未合并的插入缓冲区条目。

清除操作已从 .ibd 文件中删除所有带删除标记的索引记录。

mysqld 已将 .ibd 文件的所有修改页面从缓冲池刷新到文件。

您可以使用以下方法制作一个干净的备份 .ibd 文件:

停止 mysqld 服务器的所有活动并提交所有事务。

等到 SHOW ENGINE INNODB STATUS 显示数据库中没有活动事务,并且 InnoDB 的主线程状态为 Waiting for server activity。然后就可以复制 .ibd 文件了。

制作 .ibd 文件的干净副本的另一种方法是使用商业 InnoDB 热备份工具

答案3

这是InnoDB/Oracle热备份工具,需要花钱。我从来没有用过,但我认为它的功能和宣传的一样。

就我个人而言,我LVM 快照我的 InnoDB 表,并从快照备份 - 在恢复时,看起来 InnoDB 发生了系统崩溃,它在启动时经历了正常的日志重放过程。我喜欢双管齐下的备份方法,所以我将常规的快照和不太rsync频繁的备份结合起来mysqldump(而且有时保留一个相当近期的 SQL 转储很方便)。

答案4

如果您有任何 MyISAM 表,我建议将它们更改为 InnoDB。以下是我使用的:

    mysql -u root --password=<password> --database=db_name -B -N -e "SHOW TABLES" | awk '!/not_this_db/ && !/or_this_one/ && /^[a-z]/ {print "ALTER TABLE", $1, "ENGINE=INNODB;"}' | mysql -u root --password=<password> --database=db_name

您可以使用 awk 正则表达式排除和包含数据库,例如,在我上面的示例中,仅包含以小写字母开头的 dbs。这当然会在更改期间锁定表。

然后使用 xtrabackup 将整个数据库直接复制到另一台服务器,而无需锁定任何表或使用太多的磁盘 IO(设置 ssh rsa 密钥后):

innobackupex --throttle=500 --compress --stream=xbstream /doesntneedtoexist | ssh user@otherhost "xbstream -x -C /root/backup/"

然后您可以完全独立地执行应用日志步骤,并节省生产服务器上的磁盘空间、IO 和 CPU。

Percona 如何使用 xtrabackup

相关内容