Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

定期备份数据库[1-10更新16进制] For 5.0

[复制链接]
sw08 发表于 2006-12-3 14:36:26 | 显示全部楼层 |阅读模式
能定期备份数据库,采用计划任务,支持分卷备份。备份效果同系统设置后台的一致。

请把文件上传至include/crons目录中,在系统设置——计划任务设置好任务即可。

注意:请在上传前打开文件,将前面几行的设置配置好。

更新:增加支持16进制的文件,只适用于5.0以后的版本。

[ 本帖最后由 sw08 于 2007-1-10 16:52 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

评分

1

查看全部评分

fwten 发表于 2006-12-3 14:42:36 | 显示全部楼层
回复

使用道具 举报

zjttfs 发表于 2006-12-3 14:43:01 | 显示全部楼层
好东西  方便我们一时忘了~
回复

使用道具 举报

寵? 发表于 2006-12-3 14:59:23 | 显示全部楼层
哇!支持哦~~留下脚印
回复

使用道具 举报

klc 发表于 2006-12-3 15:40:36 | 显示全部楼层
can it backup the whole DB?
回复

使用道具 举报

leshow 发表于 2006-12-3 16:02:54 | 显示全部楼层
这样好,不会怕忘掉了
回复

使用道具 举报

紫菜卷 发表于 2006-12-3 16:20:48 | 显示全部楼层
占位看评测:)
回复

使用道具 举报

fishleong 发表于 2006-12-3 16:21:28 | 显示全部楼层
这个好东西啊``支持·····!!!
回复

使用道具 举报

H5N1 发表于 2006-12-3 17:04:09 | 显示全部楼层
很好哦             !
回复

使用道具 举报

bvtc 发表于 2006-12-3 17:18:41 | 显示全部楼层
打开后是这样的:要怎么办啊!!

<?PHP
//定期备份数据库 For 5.0 by(sw08)
//请把文件上传至include/crons目录中
if(!defined('IN_DISCUZ')) {
        exit('Access Denied');
}

//请在使用前,务必配置好下面的设置
$type='standard';
//备份的类型,可用的为full(完全备份),standard(标准备份),mini(最小备份),custom(自定义,请自行修改备份的表)
$method='multivol';
//数据备份方式,可用的为multivol(Discuz! 分卷备份),shell(系统 MySQL Dump (Shell) 备份)
$sizelimit=2048;
//选择分卷备份时有效,单个文件长度限制(kb)
$filename='./forumdata/'.date('md').'_'.random(8).'.sql';
//随机备份文件名,一般无须修改
$num=20;
//生成的分卷文件数目,请按照一般的情况的两倍左右数量填写
$extendins=0;
//使用扩展插入(Extended Insert)方式,1为“是”,0为“否”
$addsetnames=0;
//添加字符集限定(SET NAMES),1为“是”,0为“否”
$sqlcompat='';
//建表语句格式,留空使用系统默认,可用的为MYSQL40(MySQL 3.23/4.0.x),MYSQL41(MySQL 4.1.x/5.x)
$sqlcharset='';
//强制字符集,留空使用系统默认字符集,可用的为gbk,utf8

                $time = gmdate("$dateformat $timeformat", $timestamp + $timeoffset * 3600);
                if($type == 'full') {
                        $tables = array('access', 'activities', 'activityapplies', 'adminactions', 'admingroups', 'adminnotes',
                                'adminsessions', 'advertisements', 'announcements', 'attachments', 'attachtypes', 'banned',
                                'bbcodes', 'blogcaches', 'buddys', 'creditslog', 'crons', 'failedlogins', 'favorites',
                                'forumfields', 'forumlinks', 'forums', 'medals', 'memberfields', 'members', 'moderators',
                                'modworks', 'myposts', 'mythreads', 'onlinelist', 'onlinetime', 'orders', 'paymentlog',
                                'pluginhooks', 'plugins', 'pluginvars', 'pms', 'pmsearchindex', 'polloptions', 'polls',
                                'posts', 'profilefields', 'promotions', 'pushedthreads', 'ranks', 'ratelog', 'regips',
                                'relatedthreads', 'rewardlog', 'rsscaches', 'searchindex', 'sessions', 'settings',
                                'smilies', 'stats', 'statvars', 'styles', 'stylevars', 'subscriptions', 'templates',
                                'threads', 'threadsmod', 'threadtypes', 'tradelog', 'trades', 'usergroups', 'validating',
                                'words');
                } elseif($type == 'standard') {
                        $tables = array('access', 'activities', 'activityapplies', 'adminactions', 'admingroups', 'adminnotes',
                                 'adminsessions', 'advertisements', 'announcements', 'attachments', 'attachtypes', 'banned',
                                 'bbcodes', 'buddys', 'creditslog', 'crons', 'favorites', 'forumfields', 'forumlinks', 'forums',
                                 'medals', 'memberfields', 'members', 'moderators', 'modworks', 'onlinelist', 'onlinetime',
                                 'orders', 'paymentlog', 'pluginhooks', 'plugins', 'pluginvars', 'polloptions', 'polls',
                                 'posts', 'profilefields', 'ranks', 'ratelog', 'rewardlog', 'settings', 'smilies', 'stats',
                                 'styles', 'stylevars', 'templates', 'threads', 'threadsmod', 'threadtypes', 'tradelog',
                                 'trades', 'usergroups', 'validating', 'words');
                } elseif($type == 'mini') {
                        $tables = array('access', 'adminactions', 'admingroups', 'adminnotes', 'advertisements', 'announcements',
                                'attachtypes', 'bbcodes', 'buddys', 'crons', 'forumfields', 'forumlinks', 'forums', 'medals',
                                'memberfields', 'members', 'moderators', 'onlinelist', 'onlinetime', 'pluginhooks', 'plugins',
                                'pluginvars', 'profilefields', 'ranks', 'settings', 'smilies', 'stats', 'styles', 'stylevars',
                                'templates', 'threadtypes', 'usergroups', 'words');
                } elseif($type == 'custom') {
                        $tables = array();
                        if(empty($setup)) {
                                $query = $db->query("SELECT value FROM {$tablepre}settings WHERE variable='custombackup'");
                                if($tables = $db->fetch_array($query)) {
                                        $tables = unserialize($tables['value']);
                                }
                        } else {
                                $customtablesnew = empty($customtables)? '' : addslashes(serialize($customtables));
                                $db->query("REPLACE INTO {$tablepre}settings (variable, value) VALUES ('custombackup', '$customtablesnew')");
                                $tables = $customtables;
                        }
                }

                if($type == 'full' || $type == 'standard') {
                        $query = $db->query("SELECT datatables FROM {$tablepre}plugins WHERE datatables<>''");
                        while($plugin = $db->fetch_array($query)) {
                                foreach(explode(',', $plugin['datatables']) as $table) {
                                        if($table = trim($table)) {
                                                $tables[] = $table;
                                        }
                                }
                        }

                }

for($j=1; $j <=$num; $j++) {

                $volume = intval($volume) + 1;
                $idstring = '# Identify: '.base64_encode("$timestamp,$version,$type,$method,$volume")."\n";

                if($volume == 1) {
                        $db->query("TRUNCATE TABLE {$tablepre}relatedthreads", 'UNBUFFERED');
                        $db->query("TRUNCATE TABLE {$tablepre}pmsearchindex", 'UNBUFFERED');
                        $db->query("TRUNCATE TABLE {$tablepre}searchindex", 'UNBUFFERED');
                }

                $dumpcharset = $sqlcharset ? $sqlcharset : str_replace('-', '', $GLOBALS['charset']);
                $setnames = $addsetnames || ($db->version() > '4.1' && (!$sqlcompat || $sqlcompat == 'MYSQL41')) ? "SET NAMES '$dumpcharset';\n\n" : '';

                if($db->version() > '4.1') {
                        if($sqlcharset) {
                                $db->query("SET NAMES '".$sqlcharset."';\n\n");
                        }
                        if($sqlcompat == 'MYSQL40') {
                                $db->query("SET SQL_MODE='MYSQL40'");
                        }
                }

                if($method == 'multivol') {

                        $sqldump = '';
                        $tableid = $tableid ? $tableid - 1 : 0;
                        $startfrom = intval($startfrom);
                        for($i = $tableid; $i < count($tables) && strlen($sqldump) < $sizelimit * 1000; $i++) {
                                $sqldump .= sqldumptable(($type != 'custom' ? $tablepre : '').$tables[$i], $startfrom, strlen($sqldump));
                                $startfrom = 0;
                        }
                        $tableid = $i;

                        $dumpfile = substr($filename, 0, strrpos($filename, '.'))."-%s".strrchr($filename, '.');

                        if(trim($sqldump)) {

                                $sqldump = "$idstring".
                                        "# <?exit();?>\n".
                                        "# Discuz! Multi-Volume Data Dump Vol.$volume\n".
                                        "# Version: Discuz! $version\n".
                                        "# Time: $time\n".
                                        "# Type: $type\n".
                                        "# Table Prefix: $tablepre\n".
                                        "#\n".
                                        "# Discuz! Home: http://www.discuz.com\n".
                                        "# Please visit our website for newest infomation about Discuz!\n".
                                        "# --------------------------------------------------------\n\n\n".
                                        "$setnames".
                                        $sqldump;

                                @$fp = fopen(($method == 'multivol' ? sprintf($dumpfile, $volume) : $filename), 'wb');
                                @flock($fp, 2);
                                if(@!fwrite($fp, $sqldump)) {
                                        @fclose($fp);
                                }
                        }

                } else {

                        $tablesstr = '';
                        foreach($tables as $table) {
                                $tablesstr .= '"'.($type != 'custom' ? $tablepre : '').$table.'" ';
                        }

                        require './config.inc.php';
                        list($dbhost, $dbport) = explode(':', $dbhost);

                        $query = $db->query("SHOW VARIABLES LIKE 'basedir'");
                        list(, $mysql_base) = $db->fetch_array($query, MYSQL_NUM);

                        $dumpfile = addslashes(dirname(dirname(__FILE__))).'/'.$filename;
                        @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 == 1 ? ' --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);

                        if(@file_exists($dumpfile)) {

                                if(@is_writeable($dumpfile)) {
                                        $fp = fopen($dumpfile, 'rb+');
                                        fwrite($fp, $idstring."# <?exit();?>\n ".$setnames."\n #");
                                        fclose($fp);
                                }
                        }
                }
       
$startfrom=$startrow;
}
?>

[ 本帖最后由 bvtc 于 2006-12-3 17:20 编辑 ]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-16 07:24 , Processed in 0.032316 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表