复制 ibdata1 文件后 MySql 无法启动

问题描述 投票:0回答:2

我们需要将模式(大约 70GB)从 Windows 服务器上的 MySql 社区版复制并转储到另一台计算机。执行

mysqldump
对我们来说并不理想,因为这是一个生产服务器,而
dump
会减慢速度。

所以我们想到将数据文件复制到新机器上,然后简单地启动MySql。但是...

一些实际数据显然位于

ibdata1
文件中,而在
ibdata1
中包含数据的表会生成
Table doesn't exist in engine
错误。

所以我们认为我们也应该将

ibdata1
复制到新机器上。我们做到了。现在,新机器上的MySql无法启动。

我们尝试删除

ib_logfile0
ib_logfile1
并启动服务,但仍然没有成功。没有开始。

知道如何解决这个问题吗?

mysql database-backups
2个回答
1
投票

这对您的情况很有用:

https://www.percona.com/doc/percona-xtrabackup/2.4/index.html

Percona XtraBackup 是一款适用于基于 MySQL 的服务器的开源热备份实用程序,在备份期间不会锁定数据库。

更新: 我花了很多时间(前段时间)像你一样尝试,我什至在第二台服务器上看到带有“显示表”的

my_table
,但是当我进行查询时
 SELECT * FROM my_table
我得到了错误。
ERROR 1146 (42S02): Table my_table doesn't exist
(这让我发疯)。请参阅我的老问题:手动将数据库复制到另一台服务器时出现奇怪的结果

我现在想到的另一个想法是通过

cron
作业和
mysqldump
使用
WHERE
子句来处理块备份,以避免生产速度变慢

对不起我的英语


0
投票

正如您所发现的,您不能只复制数据文件。各个表文件、中央 ibdata1 和 ib_log 文件之间存在依赖关系。 MySQL 服务器进程的 RAM 中也有一些数据。它们必须同步,否则您将只能复制损坏的数据。

安全复制文件的唯一方法是关闭 MySQL Server 服务,因此在复制这些文件时,对这些文件的所有更改都会停止。显然,这比使数据库变慢更糟糕——数据库关闭时对应用程序完全不可用。

这就是备份工具存在的原因,可以安全地复制数据并获得给定时刻的一致数据快照。

您可以使用 mysqldump --single-transaction ,它应该在开始转储的那一刻获得一致的数据视图,而不会锁定数据库或减慢数据库速度(不超过一个额外的线程运行

SELECT * FROM <tablename>...
)。仅当所有表都是 InnoDB 时这才有效,因此它们支持事务。运行 mysqldump 时不得使用任何 CREATE、ALTER、DROP、RENAME、TRUNCATE 或 GRANT/REVOKE 命令。

另一个答案建议使用 Percona XtraBackup,但该软件不提供 Windows 版下载。最接近的选项是在 Windows 上的 Docker 容器中运行 XtraBackup(这是实验性的,不推荐给新手解决方案)。

许多人使用的另一个选项是使用 MySQL Replication 设置 MySQL 副本实例,并将其用作备份源。然后,如果备份减慢了副本实例的速度,也不会影响使用主实例的应用程序。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.