【发布时间】:2020-06-07 22:07:57
【问题描述】:
在我的本地 PC(Windows、WAMPserver)上,我的转储脚本 (PHP) 运行良好:
$createBackup = '"' . $dumpLoc .'" --host='.$dumpHost.' --user='.$myName.' --password="'.$myPass.'" '。 $dbName。 '.$table_name.' >> '.$sqlFile; 系统($createBackup);
但在生产服务器上(也有 Windows,使用 PHP/MySQL)它不会转储实际的数据库,只是转储开头的参数,例如:
-- MySQL dump 10.13 Distrib 5.7.19, for Win64 (x86_64)
--
-- Host: ***** Database: ********
-- ------------------------------------------------------
-- Server version 5.7.23-log
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
...没有必需的
DROP TABLE IF EXISTS `logins`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `logins` ( *** ), etc.
我不认为这是内存问题(我们只谈论 280 行,而不是每行中的大量数据)。
.sql 文件已正确创建,只是不包含数据,而在本地计算机上,一切正常。
我实际上是从 2 个不同的数据库和每个数据库的 3 或 4 个表中转储的。但即使我将它限制为一个(麻烦的)数据库和一个表,也没有运气。
另一个数据库正在生产服务器上正常转储。
【问题讨论】:
-
您的用户权限设置是否正确?
-
转储成功的数据库在权限中有一个额外的通配符条目:用户名:(与%和localhost相同),主机名:(服务器的ip)类型:“wildcard:working_db_name; 权限:全部;格兰特:不。这会是问题吗?
-
请注意,您应该在传递到命令行的变量上使用
escapeshellargs()。这将正确引用和转义值。