每天晚上 laravel 调度程序都会"mysqldump -h $dbHost -u $dbUsername -p$dbPassword $dbDatabase > $path/$filename"
通过函数运行命令exec()
。
有时转储会在某个随机位置损坏:
好的转储看起来像这样:
LOCK TABLES `action_categories_link` WRITE;
/*!40000 ALTER TABLE `action_categories_link` DISABLE KEYS */;
INSERT INTO `action_categories_link` VALUES (1,1,1),(10,2,1),(15,3,2);
/*!40000 ALTER TABLE `action_categories_link` ENABLE KEYS */;
UNLOCK TABLES;
坏的一面是:
LOCK TABLES `action_categories_link` WRITE;
/*!40000 ALTER TABLE `action_categories_link` DISABLE KEYS */;
INSERT INTO `action_categories_link` VALUES (1,1,1),(10,2,1),(15,3,/*!4/*40000 ALTER TABLE `action_categories_link` ENABLE KEYS */;
UNLOCK TABLES;
另外,我还看到了这一行:
LOCKLOCK TABLES `action_categories` WRITE;
我不能在应用程序运行时运行转储吗?典型的转储大小接近 2GB,但这些错误从一开始就出现。有些转储没有损坏,所以我毫无头绪。
在与数据库相同的 Linux 服务器上转储,不使用 docker。MySQL dump 10.13 Distrib 8.0.29
正如@mustaccio所说:
我的开发应用程序与生产应用程序同时运行备份到同一个文件,导致转储损坏