我正在为我的项目创建一个备份脚本,该脚本将通过cron执行。
现在我使用的是:
<?php
include("config.php");
/* Misc */
$pathtobackup = realpath('.');
$backupfolder = realpath("backup");
$sqlfilename = "SQLDUMP-".date("d-m-Y--H-i").".sql";
$backupfilename = "BACKUP-".date("d-m-Y--H-i").".zip";
$backupfilepath = $backupfolder."/".$backupfilename;
/* Systemcall */
exec("/usr/bin/mysqldump -u{$mysqluser} -p{$mysqlpw} -h {$mysqlserver} {$mysqldb}", $sqldata, $fp);
$sqldump = implode("\n", $sqldata);
if ($fp!=0){
die("could not create mysql dump\n");
}
/* Create Zip */
$zip = new ZipArchive();
if ($zip->open($backupfilepath, ZIPARCHIVE::CREATE)!==TRUE) {
die("cannot open <{$backupfilepath}>\n");
}
$path = realpath('.');
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($pathtobackup, FilesystemIterator::SKIP_DOTS));
foreach($iterator as $name=>$object){
$zip->addFile($name);
}
$zip->addFromString($sqlfilename, $sqldump);
if ($zip->close()!==TRUE) {
die("cannot write <{$backupfilepath}>\n");
}
?>但我想用纯MySQL创建PHP转储,使它更兼容,并能够在其他服务器上使用它,在其他服务器上,没有办法使用system和mysqldump。
我希望您知道不使用150文件库的解决方案:)
你好,弗雷德里克
发布于 2012-06-04 04:46:39
如果您真的必须这样做,那么在创建这样的脚本时,您应该考虑以下几个mysql查询:
SHOW TABLES -返回所有数据库表名
SHOW CREATE TABLE table_name返回用于创建表的sql查询。
SHOW PROCEDURE STATUS和SHOW FUNCTION STATUS -返回存储过程和函数的列表
用于创建存储过程和函数的SHOW CREATE PROCEDURE procedure_name和SHOW CREATE FUNCTION function_name -return查询
其余的是常见的SELECT和INSERT查询。
发布于 2017-03-28 07:07:20
看看这里:https://github.com/ifsnop/mysqldump-php!这是一个用php编写的原生解决方案,带有测试,支持存储过程,触发器,视图,正则表达式...
你可以使用composer安装它,它很容易做到:
<?php
use Ifsnop\Mysqldump as IMysqldump;
try {
$dump = new IMysqldump\Mysqldump('database', 'username', 'password');
$dump->start('storage/work/dump.sql');
} catch (\Exception $e) {
echo 'mysqldump-php error: ' . $e->getMessage();
}
?>它支持高级用户,具有从原始mysqldump复制的大量选项。
所有选项都在github页面上进行了解释,但或多或少都是自动解释的(文档中的一小段):
$dumpSettingsDefault = array(
'include-tables' => array(),
'exclude-tables' => array(),
'compress' => 'None',
'no-data' => false,
'add-drop-database' => false,
'add-drop-table' => false,
'single-transaction' => true,
'lock-tables' => false,
'add-locks' => true,
'extended-insert' => true,
'disable-foreign-keys-check' => false,
'where' => '',
'no-create-info' => false
);https://stackoverflow.com/questions/10873741
复制相似问题