Php 备份MySql数据库?

Php 备份MySql数据库?,php,mysql,backup,Php,Mysql,Backup,我以前问过这个问题,但我没有得到答案,所以我要重新措辞 我想使用以下任一方法备份数据库: system("mysqldump -h DB_HOST -u DB_USER -p DB_PASS logindb > $location/$backup"); 或: 但是第一个给我一个空的sql文件,第二个什么也没有给我。为什么会这样?如果有办法找出发生了什么错误,我会怎么做 还有哪种方法更好?如果您有php的exec权限,第一种方法会更快 检查SQL错误日志文件 /var/log/mysql.

我以前问过这个问题,但我没有得到答案,所以我要重新措辞

我想使用以下任一方法备份数据库:

system("mysqldump -h DB_HOST -u DB_USER -p DB_PASS logindb > $location/$backup");
或:

但是第一个给我一个空的sql文件,第二个什么也没有给我。为什么会这样?如果有办法找出发生了什么错误,我会怎么做


还有哪种方法更好?

如果您有php的exec权限,第一种方法会更快

检查SQL错误日志文件

/var/log/mysql.err-mysql错误日志文件

/var/log/mysql.log-mysql日志文件


对于php,您可以放置
错误报告(E_ALL)如果有php错误,则抛出该错误。

使用try-catch,例如:

try{
    $stmt = $this->connect->prepare($sql);
    $stmt->execute();
    $stmt->close();
}
catch(PDOException $e)
{
    echo $e->getMessage();
}

检查日志文件是否有错误。

确保用户具有访问此数据库的权限

下面是备份mysql数据库的命令

mysqldump -h [host_name] -u [username] -p[password] [database_name] > dumpfilename.sql
发帖人:

-p DB_PASS
以及正确的格式:

-p[password]
我不知道为什么,-p是密码,不等于其他参数。因此,请注意,您很好地接管了这些示例。我见过不同的情况下,这是一个问题,所以请注意。

找到了一些更简单的代码

方法1:

$tableName  = 'mypet';
$backupFile = 'backup/mypet.sql';
$query      = "SELECT * INTO OUTFILE '$backupFile' FROM $tableName";
$result = mysql_query($query);
方法2:

$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz';
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile";
system($command);


我遇到了一些错误
32767
。我在哪里检查日志,我正在本地主机(XAAMP)上测试?当我使用@NarcisRadu的方法检查日志时,我必须在XAAMP文件夹中搜索它,但我得到的是:
'mysqldump'不被识别为内部或外部命令,可操作的程序或批处理文件。
执行此查询以查看
显示变量,如“%log_file%”好的,那么我就不能使用它了?我应该使用第二种方法吗?我怎样才能让它工作呢?试试linux环境,试试mysqldump方法。然而,这里的第一种方法应该有效,但我不能说为什么在你的案例中无效。这是唯一有效的方法,第二种方法没有任何作用。这个输出一个空的sql文件。OK。DB_PASS是一个定义的var,它看起来像这样:
define('DB_PASS','mydbpass')。但你是说我必须有
-p[DB_PASS]
而不是
-p DB_PASS
?是的,只是在MAMP安装中测试了它,中间有“”的空间,它不起作用。这看起来毫无意义,但似乎是这样。我在日志中发现了以下错误:
'mysqldump'未被识别为内部或外部命令、可操作程序或批处理文件
,我执行以下命令行:
系统(“mysqldump-hDB_主机-uDB_用户-pDB_PASS logindb>$location/$backup”)来自XAAMP上的PHP文件。第一个测试使用指向mysql的绝对直接路径,如:C:\mysql\bin\mysqldump如果这样做有效,您可能会更改路径变量。考虑到您在Windows上,因为您没有明确提到这一点,但XAAMP主要用于Windows。好的,然后尝试使用绝对路径。大多数情况下,使用诸如CMD之类的终端来测试此类操作比直接从PHP运行它更容易。因此,打开CMD,CD到mysql bin文件夹,然后再次尝试运行您的命令,看看它是否在该点工作。如果我这样做,我得到的结果是:
致命错误:在C:\xampp\htdocs\login\assets\class\login\login.php的非对象上调用成员函数execute(),在第527行
该行是
$stmt->execute()$this->connect->prepare($sql);应在$stmt=$this->connect->prepare($sql)中更改;否则$stmt对象不存在。准备好了吗?试过了,也不起作用,第一次,第二次我现在就试一下。我只是试了第二种方法,同样的错误,mysqldump没有被识别为内部或外部命令。但是有一个问题,
$backupFile
它是否也应该有位置?因为我也有位置。例如,执行它的php文件与我使用
$backupFile
指向的文件夹位于同一文件夹中。您需要有位置。但是,您不能在windows下使用mysqldump。你有linux服务器可以尝试吗?没有,但是任何其他操作都可以在XAAMP上正常工作,为什么这个不能工作?这是一个正在开发的应用程序,所以我无法将其上传到服务器上,因为代码很乱,我没有数据库。但是,为什么我不能使用这个呢<代码>$backup='backup'.date('Y')、'U'.date('m')、'U'.date('d')、.sql';$sql=“备份数据库登录到磁盘=”$location/$BACKUP”,格式为“;错误报告(E_全部);尝试{$stmt=$this->connect->prepare($sql);$stmt->execute();$stmt->close();}catch(PDOException$e){echo$e->getMessage();}
它告诉我
致命错误:在C:\xampp\htdocs\login\assets\class\login\login\loginsys.php第527行的非对象上调用成员函数execute(),但如果我不使用try,它将输出一个空文件。
$backupFile = $dbname . date("Y-m-d-H-i-s") . '.gz';
$command = "mysqldump --opt -h $dbhost -u $dbuser -p $dbpass $dbname | gzip > $backupFile";
system($command);