喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: MYSQL4/5备分程序写法  
 
zdw999
中级会员
Rank: 3Rank: 3



UID 81322
精华 0
积分 293
帖子 227
金钱 293 喜悦币
威望 0
人脉 0
阅读权限 30
注册 2006-10-10
状态 离线
MYSQL4/5备分程序写法

今天看了下discuz的数据库备分功能,感觉是其它程序所比不上的,不知大家有没同感。
虽然discuz整体构架跟某些程序比差的很远,但是不可否认,部分功能做的还是很不错的,我最看中的就是它的备分还原数据库功能,这是某些构架很好的程序都所不及的。

原理:判断mysql版本号是否大于4.1,若大于则替换SQL建表语句

<?php
$sql 
syntablestruct(trim($sql), $db->version() > '4.1'$dbcharset);


//此函数用来替换不同版本SQL文件建表语句
function syntablestruct($sql$version$dbcharset) {

    if(
strpos(trim(substr($sql018)), 'CREATE TABLE') === FALSE) {
        return 
$sql;
    }

    
$sqlversion strpos($sql'ENGINE=') === FALSE FALSE TRUE;

    if(
$sqlversion === $version) {

        return 
$sqlversion && $dbcharset preg_replace(array('/ character set w+/i''/ collate w+/i'"/DEFAULT CHARSET=w+/is"), array(''''"DEFAULT CHARSET=$dbcharset"), $sql) : $sql;
    }

    if(
$version) {
        return 
preg_replace(array('/TYPE=HEAP/i''/TYPE=(w+)/is'), array("ENGINE=MEMORY DEFAULT CHARSET=$dbcharset""ENGINE=\1 DEFAULT CHARSET=$dbcharset"), $sql);

    } else {
        return 
preg_replace(array('/character set w+/i''/collate w+/i''/ENGINE=MEMORY/i''/s*DEFAULT CHARSET=w+/is''/s*COLLATE=w+/is''/ENGINE=(w+)(.*)/is'), array('''''ENGINE=HEAP''''''TYPE=\1\2'), $sql);
    }
}
?>
下面是利用MYSQL dump备分数据:
原理:同样是判断mysql版本号是否大于4.1,再根据config.php文件中配置的mysql数据库信息可实现备分,但必须PHP支持shell_exec函数。

<?php
$dumpfile 
addslashes(dirname(dirname(__FILE__))).'/'.$backupfilename.'.sql'//备分文件路径
@unlink($dumpfile); //先删除文件,若文件已存在

$mysqlbin $mysql_base == '/' '' addslashes($mysql_base).'bin/';

@
shell_exec($mysqlbin.'mysqldump --force --quick '.($db->version() > '4.1' '--skip-opt --create-options' '-all').' --add-drop-table'.($extendins == ' --extended-insert' '').''.($db->version() > '4.1' && $sqlcompat == 'MYSQL40' ' --compatible=mysql40' '').' --host="'.$dbhost.($dbport ? (is_numeric($dbport) ? ' --port='.$dbport ' --socket="'.$dbport.'"') : '').'" --user="'.$dbuser.'" --password="'.$dbpw.'" "'.$dbname.'" '.$tablesstr.' > '.$dumpfile);
?>
[ 本帖最后由 zdw999 于 2008-5-16 06:24 PM 编辑 ]





宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒
2008-5-16 06:21 PM#1
查看资料  发短消息  顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.025316 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP