我在debian 10上有PerconaMySQL8.0.19-10。
一年前,我在恢复一个需要处理表空间的备份时遇到了一些问题。我忘记了我所做的一切,但最终我建立了数据库并开始工作,并忘记了它。
现在,我刚刚使用percona的xtrabackup备份了整个数据-dir,并将其传输到一个新服务器。将备份复制到数据-dir并尝试启动mysql。失败与
Tablespace 1, name 'sys/sys_config', file './sys/sys_config.ibd' is missing!
mysqld: Can't create/write to file './performance_schema/cond_instances_2201.sdi' (OS errno 2 - No such file or directory)
mysqld: Can't create file './performance_schema/cond_instances_2201.sdi' (errno: 2 - No such file or directory)我查看了data-dir (/var/lib/mysql),当我注意到我的主数据库文件夹时,我没有看到sys或performance_schema文件夹。奇怪的是,我确实看到了一个mysql文件夹,但是它充满了名为slow_log和general_log的文件。
我的第一个想法是备份失败,所以我检查了旧服务器,它有完全相同的东西!但是,我在旧服务器上确实有一个mysql.ibd。所以我运行show databases,它显示了所有3个数据库(sys、performance_schema、mysql)。我尝试转到sys/sysconfig,它抱怨表空间,但是我可以进入mysql数据库表和perofrmance_schema表。
肯定有问题,我看到有人建议进行升级,mysql可以自我纠正丢失的主表(mysql_upgrade是不推荐的,所以我必须使用mysqld并强制它)。我害怕在我的当前服务器上运行更新,所以我返回到新服务器(我试图从备份恢复的服务器)。
我将/var/lib/mysql/mysql重命名为/var/lib/mysql/backup并执行sudo -u mysql mysqld --upgrade=FORCE --skip-grant-tables --skip-networking
并进入错误日志
/usr/sbin/mysqld (mysqld 8.0.21-12) starting as process 4000
2020-12-13T23:41:31.040574Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-12-13T23:41:31.279802Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-12-13T23:41:31.281181Z 1 [ERROR] [MY-013178] [Server] Execution of server-side SQL statement 'CREATE SCHEMA mysql DEFAULT COLLATE utf8mb4_0900_ai_ci' failed with error code = 1049, error message = 'System schema directory does not exist.'.
2020-12-13T23:41:31.281565Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2020-12-13T23:41:31.281986Z 0 [ERROR] [MY-010119] [Server] Aborting
2020-12-13T23:41:32.579767Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.21-12) Percona Server (GPL), Release '12', Revision '7ddfdfe'.因此,我不知道该做什么,我更愿意让我的新服务器启动和运行,而不是干扰我的旧服务器,因为它目前正在运行和使用。
我每个文件都有无害数据库表,我是否应该期望看到数据-dir中有一个mysql文件夹,看起来是slow_log和general_log备份?sys,performance_schma,mysql数据库会在data-dir中有自己的文件夹吗?
我希望有一种方法可以让mysql忽略sys、mysql、performance_schema表并重新创建它们,我想升级选项就是这样做的,但是失败了。
我认为它的问题只出现在最新的mysql中。备份是在Percona 8.0.19-10上完成的,Percona 8.0.21-12尝试了失败的还原。通常我不会认为这是版本上的区别..。
但是,我碰巧将percona升级到8.0.22-13,之前的版本是8.0.19-10,而同样的问题也发生了。我相信更新的mysql版本更挑剔,如果sys_config.ibd丢失了,而as 8.0.19没有问题,则无法加载
我卸载了目标服务器上的percona 8.0.21-12,并安装了8.0.19-10。恢复备份,没有问题(尽管缺少sys文件夹,等等)。虽然缺少sys文件夹的问题仍然是一个问题,但似乎只会阻止8.0.2x的启动。
发布于 2020-12-20 00:59:51
如果您看到慢速日志和常规登录在/var/lib/mysql/mysql中,这意味着在旧服务器的配置文件中,这些日志是在没有目录的情况下指定的,而在旧服务器中,datadir实际上被配置为/var/lib/mysql,而不是默认的/var/lib/mysql。这就解释了原木的出现。在再次尝试还原之前,请检查旧的服务器.cnf文件,并确保数据again匹配。
在找出旧服务器上正确的datadir在哪里之后,在新服务器中匹配它,然后执行还原。一定要在还原后设置所有权:"chown -R mysql:mysql /var/lib/mysql“(或在数据中心结束的地方)
另外,请记住,mysql_upgrade或update并不是从头开始就重新创建的。他们大多修改系统对象以与新版本相匹配,并保留其他的完整版本,因此,如果某个东西完全丢失(比如整个系统模式),它可能无法工作。
https://dba.stackexchange.com/questions/281479
复制相似问题