尝试从 lvm 快照运行后,Mysql 表不存在错误

尝试从 lvm 快照运行后,Mysql 表不存在错误

我正在尝试通过制作主数据目录的 lvm 快照并将其复制到从属来设置 mysql 复制。

该过程非常简单,在主服务器上我执行“FLUSH TABLES WITH READ LOCK”,然后在第二个终端上使用制作 lvm 快照lvcreate -l40%FREE -s -n mysql-backup /dev/MySQL/mysql,然后解锁表。

接下来我挂载快照并将 datadir 复制到从属,但 mysql 无法启动并出现错误:

150105 12:50:53 mysqld_safe 使用 /var/lib/mysql 中的数据库启动 mysqld 守护进程
150105 12:50:53 [警告] 更改的限制:max_open_files:1024 max_connections:100 table_cache:457
150105 12:50:54 InnoDB:InnoDB 内存堆已禁用
150105 12:50:54 InnoDB:互斥锁和 rw_locks 使用 GCC 原子内置函数
150105 12:50:54 InnoDB:压缩表使用 zlib 1.2.7
150105 12:50:54 InnoDB:使用 Linux 原生 AIO
150105 12:50:54 InnoDB:初始化缓冲池,大小 = 3.9G
150105 12:50:54 InnoDB:缓冲池初始化完成
150105 12:50:54 InnoDB:支持的最高文件格式是 Barracuda。
InnoDB:日志扫描已超过检查点 lsn 29552065932592
150105 12:50:54 InnoDB:数据库未正常关闭!
InnoDB:开始崩溃恢复。
InnoDB:从 .ibd 文件读取表空间信息...
InnoDB:错误:尝试添加名称为“./somedatabase/CRM_printers.ibd”的表空间 210146
InnoDB:将表空间缓存到内存中,但表空间
InnoDB:名称为“./somedatabase/status.ibd”的 210146 已存在于表空间中
InnoDB:内存缓存!
150105 12:50:55 mysqld_safe mysqld 从 pid 文件 /var/run/mysqld/mysqld.pid 结束

我检查了一下,发现这些表的文件确实存在。因此,接下来我使用 innodb_force_recovery=1 启动了数据库,然后 mysql 启动时出现了很多错误,如下所示:

InnoDB:开始崩溃恢复。
InnoDB:从 .ibd 文件读取表空间信息...
InnoDB:错误:尝试添加名称为“./db/k.ibd”的表空间 210146
InnoDB:将表空间缓存到内存中,但表空间
InnoDB:表空间中已存在名称为“./db/y.ibd”的 210146
InnoDB:内存缓存!
InnoDB:innodb_force_recovery 设置为 1。继续崩溃恢复
InnoDB:即使该表的表空间创建失败。
InnoDB:错误:尝试添加名称为“./db/a.ibd”的表空间 210235
InnoDB:将表空间缓存到内存中,但表空间
InnoDB:表空间中已存在名称为“./db/ty.ibd”的 210235
InnoDB:内存缓存!
InnoDB:innodb_force_recovery 设置为 1。继续崩溃恢复
InnoDB:即使该表的表空间创建失败。
InnoDB:错误:尝试添加名称为“./db/PC.ibd”的表空间 210285
InnoDB:将表空间缓存到内存中,但表空间
InnoDB:表空间中已存在名称为“./portal/HR.ibd”的 210285
InnoDB:内存缓存!

现在我正在这个数据库上运行 mysqlcheck -A,并且有一个输出表明某些表不存在,但 frm 和 idb 文件存在。

问题是什么?我的快照有问题吗?

相关内容