首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在纯PHP5中创建MySQL转储

在纯PHP5中创建MySQL转储
EN

Stack Overflow用户
提问于 2012-06-04 04:33:07
回答 2查看 1.8K关注 0票数 4

我正在为我的项目创建一个备份脚本,该脚本将通过cron执行。

现在我使用的是:

代码语言:javascript
复制
<?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转储,使它更兼容,并能够在其他服务器上使用它,在其他服务器上,没有办法使用systemmysqldump

我希望您知道不使用150文件库的解决方案:)

你好,弗雷德里克

EN

回答 2

Stack Overflow用户

发布于 2012-06-04 04:46:39

如果您真的必须这样做,那么在创建这样的脚本时,您应该考虑以下几个mysql查询:

SHOW TABLES -返回所有数据库表名

SHOW CREATE TABLE table_name返回用于创建表的sql查询。

SHOW PROCEDURE STATUSSHOW FUNCTION STATUS -返回存储过程和函数的列表

用于创建存储过程和函数的SHOW CREATE PROCEDURE procedure_nameSHOW CREATE FUNCTION function_name -return查询

其余的是常见的SELECTINSERT查询。

票数 1
EN

Stack Overflow用户

发布于 2017-03-28 07:07:20

看看这里:https://github.com/ifsnop/mysqldump-php!这是一个用php编写的原生解决方案,带有测试,支持存储过程,触发器,视图,正则表达式...

你可以使用composer安装它,它很容易做到:

代码语言:javascript
复制
<?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页面上进行了解释,但或多或少都是自动解释的(文档中的一小段):

代码语言:javascript
复制
$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
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10873741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档