存档

2007年11月 的存档

世界第一大域名注册商

2007年11月30日 没有评论

GoDaddy是世界第一大域名注册商,域名的附加服务很多,有blog,Email,email指向,停放页,出售页面等。而且GoDaddy的域名可以很方便的修改注册人信息(过户),将域名转移给其他会员。
特别提醒:如果你注册com域名或者一次注册多个域名可以使用这里的godaddy优惠码,获得很多优惠http://www.idcspy.com/bbs/thread-780-1-1.html
例如购买com域名使用优惠码 cjc695dom 只需要6.95美元一年,每个节省3美元!如果注册的量大还可以使用其他优惠码!

GoDaddy 域名价格:
.com 9.99美元
.net 9.99美元
.org 6.99美元 促销!
.BIZ 9.99美元
.info 2.99美元 促销!
.us 7.99美元
.MOBI 8.99美元促销!
.TV 39.99 美元
.WS 9.99美元
NAME 9.99美元
.CC 19.99美元

更多域名价格请参考:http://www.idcspy.com/bbs/thread-12700-1-1.html

Godaddy域名附加服务:

在线相册
一个25M的邮箱,使用注册的域名作为后缀.
5G godaddy免费空间,有广告
Blog
解析服务,域名转向
100个email转寄功能
自助过户,会员之间自由push
GoDaddy每个域名还需要加0.2美元的税。
在 GoDaddy注册五个及以上域名可以享受private服务,别人就查询不到你的注册信息。
推荐大家在GoDaddy注册域名,方便,拥有完全的控制权限,在注册商直接注册的价格很便宜。
GoDaddy 的注册过程比较复杂,大家可以参考下面的文章
GoDaddy域名注册图解 http://www.idcspy.com/bbs/thread-910-1-2.html
Godaddy域名使用说明 http://www.idcspy.com/bbs/thread-1618-1-1.html

FAQ: 如果我想购买Godaddy的域名但是没有信用卡怎么办?
不用急,我们已经为您准备好了购买途径,请参考:http://www.idcspy.com/bbs/thread-9008-1-1.html
简单的说就是: 和我们购买礼券,然后用礼券到godaddy注册域名就可以了,方便吧。
礼券购买说明请参考: http://www.idcspy.com/bbs/thread-8367-1-1.html

域名投资知识汇总
教你七招,轻松挑选出一款优秀的网站空间

分类: 我的收藏 标签:

再欺负我,我就把你干掉!

2007年11月29日 没有评论

刚才出去帮女朋友取个快递, 回来时就发现天网的提示:

好家伙! 以前遇到过类似的情况, 天网只不过一声警报而已, 这下把天网都惹毛了, 弹出对话框提示!
截个图记下IP, 再欺负我, 我就把你干掉! [askance]

分类: 心 情 标签:

各种程序的301重定向代码

2007年11月27日 没有评论

  当你的网站链接或者某个网页的链接发生了改变,如何让原来在搜索引擎中收录的链接(URL)能够继续地有效,将用户导向当前的URL地址?

  最有效和安全的方法是利用301 redirect,301转向能够保持你的网页的PageRank不变,从而使你过去的工作得到保证。

  “301”代码解释为永久性的转移。下面是几种方法进行301转向:

IIS Redirect

  在IIS服务器管理器中,选择要做转向的文件或目录,按右键选择“a redirection to a URL”的按钮,输入你要指向的页面地址,选择”The exact url entered above”和”A permanent redirection for this resource”,然后选择“应用”。

ASP:
[code]Response.Status="301 Moved Permanently"
Response.AddHeader "Location", "http://www.Jasontian.cn/"
Response.End[/code]
PHP:
[code]header("HTTP/1.1 301 Moved Permanently");
header("Location:http://www.Jasontian.cn/);
exit();
?> [/code]
ASP.NET:
[code][/code]用 .htaccess 文件转向
创建一个.htaccess文件,在.htaccess文件中加入:

Redirect permanent / http://www.wheatime.com

Redirect 301 / http://www.wheatime.com

FROM: http://blog.wyk.net.ru/show-1375-1.html

分类: 技 术 标签:

数据库备份(支持分卷b/r)— mysql back/restore, can split (p

2007年11月27日 没有评论

共三个文件和一个文件夹
1. mydb.php //DB类
2. backup.php //备份脚本
3. restore.php //还原脚本
4.backup //临时文件目录

只要修改一下开头的数据库信息就可用

----------------------------------------------------mydb.php:--------------------------------------------------------

class db{

var $linkid;
var $sqlid;
var $record;

function db($host="",$username="",$password="",$database="")
{
if(!$this->linkid) @$this->linkid = mysql_connect($host, $username, $password) or die("连接服务器失败.");
@mysql_select_db($database,$this->linkid) or die("无法打开数据库");
return $this->linkid;}

function query($sql)
{if($this->sqlid=mysql_query($sql,$this->linkid)) return $this->sqlid;
else {
$this->err_report($sql,mysql_error);
return false;}
}

function nr($sql_id="")
{if(!$sql_id) $sql_id=$this->sqlid;
return mysql_num_rows($sql_id);}

function nf($sql_id="")
{if(!$sql_id) $sql_id=$this->sqlid;
return mysql_num_fields($sql_id);}

function nextrecord($sql_id="")
{if(!$sql_id) $sql_id=$this->sqlid;
if($this->record=mysql_fetch_array($sql_id)) return $this->record;
else return false;
}

function f($name)
{
if($this->record[$name]) return $this->record[$name];
else return false;
}

function close() {mysql_close($this->linkid);}

function lock($tblname,$op="WRITE")
{if(mysql_query("lock tables ".$tblname." ".$op)) return true; else return false;}

function unlock()
{if(mysql_query("unlock tables")) return true; else return false;}

function ar() {
return @mysql_affected_rows($this->linkid);
}

function i_id() {
return mysql_insert_id();
}

function err_report($sql,$err)
{
echo "Mysql查询错误
";
echo "查询语句:".$sql."
";
echo "错误信息:".$err;
}
/****************************************类结束***************************/
}?>

--------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------backup.php :--------------------------------------------------------

global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb;
$mysqlhost="localhost"; //host name
$mysqluser="root"; //login name
$mysqlpwd=""; //password
$mysqldb=""; //name of database

include("mydb.php");
$d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);
/*--------------界面--------------*/if(!isset($_POST['act'])){/*----------------------*/
$msgs[]="服务器备份目录为backup";
$msgs[]="对于较大的数据表,强烈建议使用分卷备份";
$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
show_msg($msgs);
?>

数据备份
备份方式
备份全部数据备份全部数据表中的数据到一个备份文件
备份单张表数据

$d->query("show table status from $mysqldb");
while($d->nextrecord()){
echo "

";}
?>

备份选中数据表中的数据到单独的备份文件
使用分卷备份
分卷备份
K
选择目标位置
备份到服务器
备份到本地

/*----*/else{/*--------------主程序-----------------------------------------*/
if($_POST['weizhi']=="localpc"&&$_POST['fenjuan']=='yes')
{$msgs[]="只有选择备份到服务器,才能使用分卷备份功能";
show_msg($msgs); pageend();}
if($_POST['fenjuan']=="yes"&&!$_POST['filesize'])
{$msgs[]="您选择了分卷备份功能,但未填写分卷文件大小";
show_msg($msgs); pageend();}
if($_POST['weizhi']=="server"&&!writeable("./backup"))
{$msgs[]="备份文件存放目录'./backup'不可写,请修改目录属性";
show_msg($msgs); pageend();}

/*----------备份全部表-------------*/if($_POST['bfzl']=="quanbubiao"){/*----*/
/*----不分卷*/if(!$_POST['fenjuan']){/*--------------------------------*/
if(!$tables=$d->query("show table status from $mysqldb"))
{$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
$sql="";
while($d->nextrecord($tables))
{
$table=$d->f("Name");
$sql.=make_header($table);
$d->query("select * from $table");
$num_fields=$d->nf();
while($d->nextrecord())
{$sql.=make_record($table,$num_fields);}
}
$filename=date("Ymd",time())."_all.sql";
if($_POST['weizhi']=="localpc") down_file($sql,$filename);
elseif($_POST['weizhi']=="server")
{if(write_file($sql,$filename))
$msgs[]="全部数据表数据备份完成,生成备份文件'./backup/$filename'";
else $msgs[]="备份全部数据表失败";
show_msg($msgs);
pageend();
}
/*-----------------不要卷结束*/}/*-----------------------*/
/*-----------------分卷*/else{/*-------------------------*/
if(!$_POST['filesize'])
{$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
if(!$tables=$d->query("show table status from $mysqldb"))
{$msgs[]="读数据库结构错误"; show_msg($msgs); pageend();}
$sql=""; $p=1;
$filename=date("Ymd",time())."_all";
while($d->nextrecord($tables))
{
$table=$d->f("Name");
$sql.=make_header($table);
$d->query("select * from $table");
$num_fields=$d->nf();
while($d->nextrecord())
{$sql.=make_record($table,$num_fields);
if(strlen($sql)>=$_POST['filesize']*1000){
$filename.=("_v".$p.".sql");
if(write_file($sql,$filename))
$msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";
else $msgs[]="备份表-".$_POST['tablename']."-失败";
$p++;
$filename=date("Ymd",time())."_all";
$sql="";}
}
}
if($sql!=""){$filename.=("_v".$p.".sql");
if(write_file($sql,$filename))
$msgs[]="全部数据表-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";}
show_msg($msgs);
/*---------------------分卷结束*/}/*--------------------------------------*/
/*--------备份全部表结束*/}/*---------------------------------------------*/

/*--------备份单表------*/elseif($_POST['bfzl']=="danbiao"){/*------------*/
if(!$_POST['tablename'])
{$msgs[]="请选择要备份的数据表"; show_msg($msgs); pageend();}
/*--------不分卷*/if(!$_POST['fenjuan']){/*-------------------------------*/
$sql=make_header($_POST['tablename']);
$d->query("select * from ".$_POST['tablename']);
$num_fields=$d->nf();
while($d->nextrecord())
{$sql.=make_record($_POST['tablename'],$num_fields);}
$filename=date("Ymd",time())."_".$_POST['tablename'].".sql";
if($_POST['weizhi']=="localpc") down_file($sql,$filename);
elseif($_POST['weizhi']=="server")
{if(write_file($sql,$filename))
$msgs[]="表-".$_POST['tablename']."-数据备份完成,生成备份文件'./backup/$filename'";
else $msgs[]="备份表-".$_POST['tablename']."-失败";
show_msg($msgs);
pageend();
}
/*----------------不要卷结束*/}/*------------------------------------*/
/*----------------分卷*/else{/*--------------------------------------*/
if(!$_POST['filesize'])
{$msgs[]="请填写备份文件分卷大小"; show_msg($msgs);pageend();}
$sql=make_header($_POST['tablename']); $p=1;
$filename=date("Ymd",time())."_".$_POST['tablename'];
$d->query("select * from ".$_POST['tablename']);
$num_fields=$d->nf();
while ($d->nextrecord())
{
$sql.=make_record($_POST['tablename'],$num_fields);
if(strlen($sql)>=$_POST['filesize']*1000){
$filename.=("_v".$p.".sql");
if(write_file($sql,$filename))
$msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";
else $msgs[]="备份表-".$_POST['tablename']."-失败";
$p++;
$filename=date("Ymd",time())."_".$_POST['tablename'];
$sql="";}
}
if($sql!=""){$filename.=("_v".$p.".sql");
if(write_file($sql,$filename))
$msgs[]="表-".$_POST['tablename']."-卷-".$p."-数据备份完成,生成备份文件'./backup/$filename'";}
show_msg($msgs);
/*----------分卷结束*/}/*--------------------------------------------------*/
/*----------备份单表结束*/}/*----------------------------------------------*/

/*---*/}/*-------------主程序结束------------------------------------------*/

function write_file($sql,$filename)
{
$re=true;
if(!@$fp=fopen("./backup/".$filename,"w+")) {$re=false; echo "failed to open target file";}
if(!@fwrite($fp,$sql)) {$re=false; echo "failed to write file";}
if(!@fclose($fp)) {$re=false; echo "failed to close target file";}
return $re;
}

function down_file($sql,$filename)
{
ob_end_clean();
header("Content-Encoding: none");
header("Content-Type: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));

header("Content-Disposition: ".(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ')."filename=".$filename);

header("Content-Length: ".strlen($sql));
header("Pragma: no-cache");

header("Expires: 0");
echo $sql;
$e=ob_get_contents();
ob_end_clean();
}

function writeable($dir)
{

if(!is_dir($dir)) {
@mkdir($dir, 0777);
}

if(is_dir($dir))
{

if($fp = @fopen("$dir/test.test", 'w'))
{
@fclose($fp);
@unlink("$dir/test.test");
$writeable = 1;
}
else {
$writeable = 0;
}

}

return $writeable;

}

function make_header($table)
{global $d;
$sql="Drop TABLE IF EXISTS ".$table."\n";
$d->query("show create table ".$table);
$d->nextrecord();
$tmp=preg_replace("/\n/","",$d->f("Create Table"));
$sql.=$tmp."\n";
return $sql;
}

function make_record($table,$num_fields)
{global $d;
$comma="";
$sql = "";
$sql .= "Insert INTO ".$table." VALUES(";
for($i = 0; $i < $num_fields; $i++)
{$sql .= ($comma."'".mysql_escape_string($d->record[$i])."'"); $comma = ",";}
$sql .= ")\n";
return $sql;
}

function show_msg($msgs)
{
$title="提示:";
echo "

";
echo "

";
echo "

".$title."
    ";
    while (list($k,$v)=each($msgs))
    {
    echo "
  • ".$v."
  • ";
    }
    echo "

";
}

function pageend()
{
exit();
}
?>

--------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------restore.php :--------------------------------------------------------

session_start();
global $mysqlhost, $mysqluser, $mysqlpwd, $mysqldb;
$mysqlhost="localhost"; //host name
$mysqluser="root"; //login name
$mysqlpwd=""; //password
$mysqldb=""; //name of database

include("mydb.php");
$d=new db($mysqlhost,$mysqluser,$mysqlpwd,$mysqldb);

/******界面*/if(!isset($_POST['act'])&&!isset($_SESSION['data_file'])){/**********************/
$msgs[]="本功能在恢复备份数据的同时,将全部覆盖原有数据,请确定是否需要恢复,以免造成数据损失";
$msgs[]="数据恢复功能只能恢复由dShop导出的数据文件,其他软件导出格式可能无法识别";
$msgs[]="从本地恢复数据需要服务器支持文件上传并保证数据尺寸小于允许上传的上限,否则只能使用从服务器恢复";
$msgs[]="如果您使用了分卷备份,只需手工导入文件卷1,其他数据文件会由系统自动导入";
show_msg($msgs);
?>

数据恢复
从服务器文件恢复

$handle=opendir('./backup');
while ($file = readdir($handle)) {
if(eregi("^[0-9]{8,8}([0-9a-z_]+)(\.sql)$",$file)) echo "

";}
closedir($handle);
?>

从本地文件恢复

/****************************主程序*/if(isset($_POST['act']) && $_POST['act']=="恢复"){/**************/
/***************服务器恢复*/if($_POST['restorefrom']=="server"){/**************/
if(!$_POST['serverfile'])
{$msgs[]="您选择从服务器文件恢复备份,但没有指定备份文件";
show_msg($msgs); pageend(); }
if(!eregi("_v[0-9]+",$_POST['serverfile']))
{$filename="./backup/".$_POST['serverfile'];
if(import($filename)) $msgs[]="备份文件".$_POST['serverfile']."成功导入数据库";
else $msgs[]="备份文件".$_POST['serverfile']."导入失败";
show_msg($msgs); pageend();
}
else
{
$filename="./backup/".$_POST['serverfile'];
if(import($filename)) $msgs[]="备份文件".$_POST['serverfile']."成功导入数据库";
else {$msgs[]="备份文件".$_POST['serverfile']."导入失败";show_msg($msgs);pageend();}
$voltmp=explode("_v",$_POST['serverfile']);
$volname=$voltmp[0];
$volnum=explode(".sq",$voltmp[1]);
$volnum=intval($volnum[0])+1;
$tmpfile=$volname."_v".$volnum.".sql";
if(file_exists("./backup/".$tmpfile))
{
$msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损";
$_SESSION['data_file']=$tmpfile;
show_msg($msgs);
sleep(3);
echo "";
}
else
{
$msgs[]="此分卷备份全部导入成功";
show_msg($msgs);
}
}
/**************服务器恢复结束*/}/********************************************/
/*****************本地恢复*/if($_POST['restorefrom']=="localpc"){/**************/
switch ($_FILES['myfile']['error'])
{
case 1:
case 2:
$msgs[]="您上传的文件大于服务器限定值,上传未成功";
break;
case 3:
$msgs[]="未能从本地完整上传备份文件";
break;
case 4:
$msgs[]="从本地上传备份文件失败";
break;
case 0:
break;
}
if($msgs){show_msg($msgs);pageend();}
$fname=date("Ymd",time())."_".sjs(5).".sql";
if (is_uploaded_file($_FILES['myfile']['tmp_name'])) {
copy($_FILES['myfile']['tmp_name'], "./backup/".$fname);}

if (file_exists("./backup/".$fname))
{
$msgs[]="本地备份文件上传成功";
if(import("./backup/".$fname)) {$msgs[]="本地备份文件成功导入数据库"; unlink("./backup/".$fname);}
else $msgs[]="本地备份文件导入数据库失败";
}
else ($msgs[]="从本地上传备份文件失败");
show_msg($msgs);
/****本地恢复结束*****/}/****************************************************/
/****************************主程序结束*/}/**********************************/
/*************************剩余分卷备份恢复**********************************/
if(!isset($_POST['act'])&&isset($_SESSION['data_file']))
{
$filename="./backup/".$_SESSION['data_file'];
if(import($filename)) $msgs[]="备份文件".$_SESSION['data_file']."成功导入数据库";
else {$msgs[]="备份文件".$_SESSION['data_file']."导入失败";show_msg($msgs);pageend();}
$voltmp=explode("_v",$_SESSION['data_file']);
$volname=$voltmp[0];
$volnum=explode(".sq",$voltmp[1]);
$volnum=intval($volnum[0])+1;
$tmpfile=$volname."_v".$volnum.".sql";
if(file_exists("./backup/".$tmpfile))
{
$msgs[]="程序将在3秒钟后自动开始导入此分卷备份的下一部份:文件".$tmpfile.",请勿手动中止程序的运行,以免数据库结构受损";
$_SESSION['data_file']=$tmpfile;
show_msg($msgs);
sleep(3);
echo "";
}
else
{
$msgs[]="此分卷备份全部导入成功";
unset($_SESSION['data_file']);
show_msg($msgs);
}
}
/**********************剩余分卷备份恢复结束*******************************/
function import($fname)
{global $d;
$sqls=file($fname);
foreach($sqls as $sql)
{
str_replace("\r","",$sql);
str_replace("\n","",$sql);
if(!$d->query(trim($sql))) return false;
}
return true;
}
function show_msg($msgs)
{
$title="提示:";
echo "

";
echo "

";
echo "

".$title."
    ";
    while (list($k,$v)=each($msgs))
    {
    echo "
  • ".$v."
  • ";
    }
    echo "

";
}

function pageend()
{
exit();
}
?>

--------------------------------------------------------------------------------------------------------------------------

FROM: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1263017

分类: 技 术 标签:

Discuz!论坛数据备份恢复

2007年11月27日 没有评论

一:通过Discuz!内置备份功能保存数据库
安装并运行Discuz!论坛一段时间后我们可以通过其后台的备份功能保存数据库文件。
第一步:用管理员权限登录论坛,在首页点右上角的“系统设置”进入后台管理界面。

第二步:后台管理界面中我们在左侧找到“数据库->资料备份”。然后你会看到“数据备份类型”选项,一般我们保持默认的“标准备份”即可,他将备份包括常用的数据表在内的数据信息。如果是选择“全部备份”则保存全部论坛数据表内容,“最小备份”则是保存包括用户,板块设置及系统设置在内的数据,另外如果我们对数据库并不是十分了解的话,不建议大家通过“自定义备份”来设置。

在我们进行数据库备份类型设置时即使选择了全部备份也应该注意一点,那就是这样备份的信息里是不包括模板文件和附件文件的。模板和附件还有用户自定义头像等信息的备份只能通过FTP下载./templates,./http://www.wheatime.com/wp-content/uploads/attachments,./customavatars这些目录里的内容人工备份。当然如果你是对服务器自身操作也需要把这些目录内容复制到其他地方。

第三步:接下来是设置“数据备份方式”,我们保持默认值“Discuz!分卷备份-文件长度限制为2048Kb”即可。

第四步:“数据备份选项”中大部分信息保持默认即可,在备份文件名处可以输入我们要备份的数据库保存文件名称,当然默认会根据保存日期随机起一个名字,这个名称我们也是可以修改的。

第五步:点“提交”按钮开始备份数据库,很快就能看到Discuz!的提示——“恭喜您,全部一个备份文件成功创建,备份完成”。(如图)

第六步:我们用鼠标左键点下面那个数据库文件链接将查看该数据库文件的内容,如果懂得数据库语言的用户可以通过此文件了解自己论坛的一些基本信息。把这些文件复制下来保存成一个以后缀名sql为结尾的文件就实现了备份工作。(如图)

第七步:当然我们直接用鼠标右键点第五步显示的数据库文件链接,并且选择“另存为”可以将这个数据库文件保存到本地硬盘。
如果我们把论坛建立在自己的服务器或主机上的话可以到Discuz!安装目录中的forumdata目录找到刚刚备份的.sql文件,直接将他进行保存即可。
当然如果是远程虚拟主机的话就需要通过FTP登录工具访问Discuz!所在目录里的forumdate目录下载对应的.sql文件。

二:通过PHPMYADMIN备份数据库
一般来说专业的正规的备份MYSQL数据库的方法是通过PHPMYADMIN这个工具,下载最新版本的PHPMYADMIN后将他解压缩到网站发布文件夹中,例如www目录是发布目录,那么就把phpmyadmin解压缩到此目录中。接下来我们通过http://ip地址/phpmyadmin来访问PHPMYADMIN管理程序。
如果是虚拟主机的话也可以直接把PHPMYADMIN程序上传到虚拟空间中,访问PHPMYADMIN的方法和上面介绍的一样。
第一步:登录PHPMYADMIN管理界面后选择“导出”。

第二步:在数据库导出界面中我们能看到当前系统中存在的数据库名,例如数据库有两个,一个名字是mysql,另一个名字是Discuz。在安装Discuz!时会要求我们输入数据库名,当初添写的是Discuz,所以现在也应该备份此数据库。在备份类型处选择默认的SQL即可,这样保存的文件格式是SQL,也是应用最多兼容性最强的格式。(如图)

第三步:在数据库导出界面的下方是设置数据库文件保存方式,我们勾选“另存为文件”,压缩方式选择ZIP压缩。最后点右小角的“执行”按钮即可。

第四步:之后会出现保存文件的提示窗口,由于刚才我们选择了保存类型为zip格式,所以这里将自动储存为localhost.sql.zip压缩文件。当然我们解压缩此文件就能看到里头的.sql文件内容。(如图)

不管我们是在安装有Discuz!服务器上进行操作还是在虚拟主机上都可以通过PHPMYADMIN来完成数据库的备份工作,保存下来的sql文件是关键,要把他放到一个可靠的地方,为日后恢复备份数据做准备。

四,通过PHPMYADMIN程序恢复数据库:
前面我们介绍了通过PHPMYADMIN备份保存数据库,实际上我们也可以通过此方法恢复已经备份好的数据库。需要注意一点的是数据库名称一定相符。

第一步:当我们需要把以前备份的数据库进行恢复时,在建立Discuz!论坛时设置数据库名称处要特别注意,添写的应该和备份数据库的名称一样。例如保存的数据库名称为Discuz,那么在建立Discuz!论坛设置数据库名称时也要输入Discuz为数据库名,而用户名和密码等信息也应该尽量相同。

第二步:这样通过第一步我们为Discuz!建立了一个和我们保存的数据库名称一样的空数据库。接下来我们通过地址访问phpmyadmin,点主页下方的import进行导入数据库操作。

第三步:在import导入界面的file to import处通过旁边的浏览按钮找到我们以前通过phpmyadmin备份的数据库文件,记住一定要是ZIP格式的,这也是为什么在备份时选择ZIP压缩格式进行保存的原因。其他设置保持默认即可。最后点“执行”按钮。

第四步:当在import导入界面中出现“import has been successfully finished,144 queries executed.”的提示就说明我们的数据库已经成功导入到论坛中。

第五步:再次通过phpmyadmin查看Discuz数据库时就会发现该数据库已经不是空的了,里头有几十个表,每个表里头都有相应的信息与数据。

五,通过Discuz!自身功能恢复数据
前面我们介绍了通过Discuz!自身的备份数据库功能来保存数据库,实际上我们也可以通过论坛自身的恢复数据库功能将保存的数据库导入到论坛中。
第一步:用管理员权限登录论坛并进入后台管理界面,点“数据库->资料恢复”。

第二步:在数据恢复设置中选择“从本地文件”进行恢复,然后通过右边的“浏览”按钮找到之前保存下来的.sql文件。

第三步:点“提交”按钮后将出现询问“分卷数据成功导入数据库,您需要自动导入本次其他的备份吗?”一般我们继续点“确定”按钮即可。之后我们的数据库文件就完全导入到当前论坛了。论坛会出现再次要求你输入管理员帐号的提示。访问论坛地址时你也会看到所有信息都恢复到备份数据库时的内容了。

不管我们采取哪种方式备份和恢复数据库,一定要注意备份和恢复时使用的Discuz!论坛版本要相同,甚至是语言种类也要一致,否则会存在乱码的问题。

FROM: http://www.discuz.net/thread-383649-1-1.html

分类: 我的收藏 标签:

Discuz!论坛“搬家”全攻略

2007年11月27日 没有评论

论坛搬家主要有一下几个步骤

一、备份部分

1、备份数据库数据

这部比较关键,因为你论坛几乎所有的数据都在这个数据库里面,所以这个备份是必不可少的,下面详细说说备份方法。

第一种方法:也是最简单的备份方法就是利用后台的资料备份来备份,如果是转移空间建议在数据备份数据类型里面选择全部备份,还有一点要注意备份分卷的大小不要超过2048K,如果还是出现问题,请改变分卷的大小

采用这种方法备份的数据将自动保存在论坛的forumdata目录下,格式为:备份日期_任意代码.sql,备份好后把这些文件下载就完成第一种备份方法了。

优点:方便快捷,适用于数据比较小没有自行添加过数据表的用户
缺点:只能备份论坛默认的数据表,对于自定义的数据表不能备份

第二种方法:其实这种方法也很方便,而且备份的数据更加全,这个方法就是联系你的空间商让他帮你备份然后打包放到你的空间,你自己下载

优点:方便快捷能够备份全部数据,适用于自行添加过许多数据表的用户和数据量比较大的用户
缺点:只适用于收费的虚拟主机

第三种方法:这种方法只使用于独立主机或者用自己电脑做服务器的用户,就是找到mysql目录下的data目录,然后找到于你论坛数据库名称相对应的目录名称,例如:你的论坛数据库名称是bbs,那么你的数据就存放在mysql/data/bbs目录下,依此类推,你首先关闭mysql服务,然后把数据所在目录所有文件备份就完成论坛数据的备份了

优点:最为简单方便
缺点:局限性大,只适用于独立主机用户

2、论坛程序文件及其附件的备份

这个相对于数据库备份更加简单,只要把你论坛目录下的所有目录和文件下载或者拷贝到你要备份的地方就可以了,如果你没有对论坛程序和模板做过很大的改动,那么只要备份http://www.wheatime.com/wp-content/uploads/attachments(附件目录)和customavatars(用户自定义头像)目录就可以了,如果还需要备份模板那么还要加上一个templates目录就可以了。

二、数据及其程序文件恢复

1、数据库恢复

如果你是采用的第一种方法备份的目录,请先安装一个和你原来使用的论坛版本一致的论坛程序,那么直接把你备份的SQL文件上传到你新服务器的论坛的forumdata目录,然后用这个帖子http://www.discuz.net/viewthread.php?tid=126510里面那个恢复数据的工具恢复就可以了,那个工具的使用方法已经在那个工具里面写的很清楚了,如果还有问题请回帖说明,注意用那个文件恢复数据之后,请记得删除那个文件,以免造成安全问题

如果你是第二种方法备份的数据,那么你最好也找你的空间商帮你恢复数据,他们一般会让你把数据打包然后传到你的新服务器上,然后你装好论坛他们就可以帮你恢复了

如果是第三种备份方法那么和第二种类似,直接在你的mysql/data目录下建立一个文件夹,名称要和你的数据库名称一致,然后把你的备份文件拷贝到你新建的那个目录下就可以了,然后安装论坛配置好config.php文件就行了,如果你是准备把你的论坛搬到虚拟主机上,那么你可以把你的数据打包给你空间商,让他们帮你恢复,方法同第二种方法

2、论坛程序及其相关文件的恢复

如果你不需要原论坛的程序及其相关文件,那么你全新安装一个论坛然后用上面的数据恢复方法恢复数据就可以了。
如果你需要保存你原来论坛的程序及其相关文件,那么请先用FTP把你的论坛文件及其相关文件上传到你的新服务器上,配置好config.php文件,最后用上面所述的方法恢复数据就可以了

其实论坛搬家的方法还有很多,例如用phpmyadmin或者其他相关软件备份数据等等,在这里我就不一一阐述了,论坛搬家的首要要求就是细心,做好备份,如果大家对论坛搬家还有问题,可以在这里发贴说明,我们共同探讨:)

有的人用上面的方法搬家可能会出错的, 为什么呢?

错误出在数据库

我们用的是2.5F 不可能不装插件 很多插件升级了数据库 并且新建的表, 这些表是无法从DZ后台备份的 下面开始

1.备份数据库
现在的空间基本都有phpmyadmin, 首先进入phpmyadmin, 选择语言进入数据库, 全选, 导出, 如果你数据库比较庞大, 就一个表一个表的导出, 方便以后导入, 导出后存为 数据库.sql 文件

2.搬文件
好了, 连接FTP, 把所有文件DOWN下来, 到新空间上传

3.导数据到新空间
进入新空间的phpmyadmin, 如果数据库内有和论坛重叠的数据先删除, 然后用SQL导入
注:SQL导入不会覆盖所以必须先删除重跌数据
打开数据库.sql, 把蓝色部分去掉, 不然会错, 其实删第一行就可以了, 然后把数据库.sql 文件中的数据粘贴到文本框内执行导入, 也可以浏览找到数据库文件打开执行导入, 然后等待, 等待的时间由空间的速度决定, 这样数据库就导好了

4,善后工作
如果你的系统是UNIX/LINUX的话, 请设置文件夹属性, 不是跳过这步, 要设置为777的文件和文件夹有

./http://www.wheatime.com/wp-content/uploads/attachments
./customavatars
./forumdata
./templates
config.php 这个无所谓

其中./forumdata ./templates这两个文件夹和其子文件夹文件通通要设置成777

最后修改config.php的
[code] $dbhost = 'localhost'; // database server
$dbuser = 'sql'; // database username
$dbpw = 'pw'; // database password
$dbname = 'sql'; // database name
$adminemail = '@hotmail.com'; // admin's email
$dbreport = [/code]
OK! 完工!

分类: 技 术 标签:

MySQL备份与恢复

2007年11月26日 没有评论

本文讨论 MySQL 的备份和恢复机制,以及如何维护数据表,包括最主要的两种表类型:MyISAM 和 Innodb,文中设计的 MySQL 版本为 5.0.22。

目前 MySQL 支持的免费备份工具有:mysqldump、mysqlhotcopy,还可以用 SQL 语法进行备份:BACKUP TABLE 或者 Select INTO OUTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。

1、mysqldump
1.1 备份
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数:

--compatible=name
它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。

--complete-insert,-c
导出的数据采用包含字段名的完整 Insert 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。

--default-character-set=charset
指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

--disable-keys
告诉 mysqldump 在 Insert 语句的开头和结尾增加 /*!40000 Alter TABLE table DISABLE KEYS */; 和 /*!40000 Alter TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。

--extended-insert = true|false
默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。

--hex-blob
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。

--lock-all-tables,-x
在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

--lock-tables
它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。

--no-create-info,-t
只导出数据,而不添加 Create TABLE 语句。

--no-data,-d
不导出任何数据,只导出数据库表结构。

--opt
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

--quick,-q
该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

--routines,-R
导出存储过程以及自定义函数。

--single-transaction
该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话,应结合使用 --quick 选项。

--triggers
同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。

其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob -x db_name > db_name.sql
使用以下 SQL 来备份 Innodb 表:

/usr/local/mysql/bin/mysqldump -uyejr -pyejr --default-character-set=utf8 --opt --extended-insert=false \--triggers -R --hex-blob --single-transaction db_name > db_name.sql

1.2 还原
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。

直接用 mysql 客户端
例如:

/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql

用 SOURCE 语法
其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

SOURCE /tmp/db_name.sql;
这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

2、 mysqlhotcopy
2.1 备份
mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 系统上。

mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。以下是几个例子:

root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp (把数据库目录 db_name 拷贝到 /tmp 下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name./regex/ /tmp
更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:

perldoc /usr/local/mysql/bin/mysqlhotcopy
注意,想要使用 mysqlhotcopy,必须要有 Select、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

2.2 还原
mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:

root#cp -rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)

3、 SQL 语法备份
3.1 备份
BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文件,因此恢复时比较慢。例子:

BACK TABLE tbl_name TO '/tmp/db_name/';
注意,必须要有 FILE 权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

Select INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:

Select INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;
注意,必须要有 FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。

3.2 恢复
用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子:

RESTORE TABLE FROM '/tmp/db_name/';
权限要求类似上面所述。

用 Select INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子:

LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;
权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE 关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。

补充:

shell> mysqldump --quick db_name | gzip > db_name.contents.gz
(该例子中创建的文件是压缩格式)。

恢复/转移到另一台的命令如下:

shell> gunzip < db_name.contents.gz | mysql db_name
以上命令,适用于*nix 操作系统的机器

4、 启用二进制日志(binlog)
采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。

启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:

server-id = 1log-bin = binloglog-bin-index = binlog.index
然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld 记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的信息请查看手册。

需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog 的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了:

FLUSH LOGS;
如果是备份复制系统中的从服务器,还应该备份 master.info 和 relay-log.info 文件。

备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如:

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
该工具允许你显示指定的数据库下的所有 SQL 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。

恢复时,可以采用类似以下语句来做到:

/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name
把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。

如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?

5、 直接备份数据文件
相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在靠背文件前,执行以下 SQL 语句:

FLUSH TABLES WITH READ LOCK;
也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。

注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。

6、 备份策略
对于中等级别业务量的系统来说,备份策略可以这么定:第一次全量备份,每天一次增量备份,每周再做一次全量备份,如此一直重复。而对于重要的且繁忙的系统来说,则可能需要每天一次全量备份,每小时一次增量备份,甚至更频繁。为了不影响线上业务,实现在线备份,并且能增量备份,最好的办法就是采用主从复制机制(replication),在 slave 机器上做备份。

7、 数据维护和灾难恢复
作为一名DBA(我目前还不是,呵呵),最重要的工作内容之一是保证数据表能安全、稳定、高速使用。因此,需要定期维护你的数据表。以下 SQL 语句就很有用:

CHECK TABLE 或 REPAIR TABLE,检查或维护 MyISAM 表OPTIMIZE TABLE,优化 MyISAM 表ANALYZE TABLE,分析 MyISAM 表
当然了,上面这些命令起始都可以通过工具 myisamchk 来完成,在这里不作详述。

Innodb 表则可以通过执行以下语句来整理碎片,提高索引速度:

Alter TABLE tbl_name ENGINE = Innodb;
这其实是一个 NULL 操作,表面上看什么也不做,实际上重新整理碎片了。

通常使用的 MyISAM 表可以用上面提到的恢复方法来完成。如果是索引坏了,可以用 myisamchk 工具来重建索引。而对于 Innodb 表来说,就没这么直接了,因为它把所有的表都保存在一个表空间了。不过 Innodb 有一个检查机制叫 模糊检查点,只要保存了日志文件,就能根据日志文件来修复错误。可以在 my.cnf 文件中,增加以下参数,让 mysqld 在启动时自动检查日志文件:

innodb_force_recovery = 4

关于该参数的信息请查看手册。

分类: 技 术 标签:

Discuz!论坛无法登陆后台的原因及解决方案

2007年11月25日 没有评论

刚才登陆论坛时,不知为什么竟然无法登陆系统管理后台,输入密码后,点登陆,显示登陆成功,然后又回到输入密码网页…

刚开始怀疑是电脑原因,可能是哪里设置不当,但是为什么论坛首页可以正常登陆呢?应该还是Discuz!系统设置的问题。

打开config.inc.php这个文件,发现这样的一些代码:
[code]$admincp = array();
$admincp['forcesecques'] = 0; // 管理人员必须设置安全提问才能进入系统设置, 0=否, 1=是[安全]
$admincp['checkip'] = 1; // 后台管理操作是否验证管理员的 IP, 1=是[安全], 0=否。仅在管理员无法登陆后台时设置 0。
$admincp['tpledit'] = 1; // 是否允许在线编辑论坛模板 1=是 0=否[安全]
$admincp['runquery'] = 1; // 是否允许后台运行 SQL 语句 1=是 0=否[安全]
$admincp['dbimport'] = 1; // 是否允许后台恢复论坛数据 1=是 0=否[安全][/code]
很显然问题是出现在$admincp['checkip'] = 1这一句!以前一直是在校内局域网登陆后台管理,局域网的IP前三段一直是不变的。把它更改、上传后,重新登陆果然没问题!

Discuz!这个功能做的应该说还是不错的,很好的保障了论坛的安全运行,但是如果站长使用的是动态IP这个功能就不得不取消了。

分类: 技 术 标签:

杨澜访谈录:刘德华—中年百味

2007年11月24日 没有评论


http://player.youku.com/player.php/sid/XMTIwMTA2Mjg=/v.swf
以下文字来自《杨澜访谈录》本期节目编导庞小薇:

刘德华—中年百味

今天,想和大家分享刘德华的一首歌,歌的名字就叫《今天》。在我们的采访中刘德华曾感叹说,这首歌是很多年以前别人写的,那时候唱它完全不能体会其中的意味。直到今天,走过了这么多年风风雨雨,尝过了那么多的酸甜苦辣,他才真正懂得这首歌里的人生百味,原来这首歌就是他走过的路。

今天

走过岁月我才发现世界多不完美
成功或失败总有一些错觉
沧海有多广,江湖有多深
局中人才了解
我不断失望,不断希望
苦自己尝,笑与你分享
如今站在台上也难免心慌
如果要飞的高
就该把地平线忘掉
等了好久终于等到今天
梦了好久终于把梦实现
前途漫漫任我闯
幸亏还有你在身旁
盼了好久终于盼到今天
忍了好久终于把梦实现
那些不变的风霜早就无所谓
我累也不说累

我们也许应该感谢刘德华,因为他陪伴我们走过了那么多青葱岁月,那些不可重来又难以忘记的日子。甚至现在,每当《来生缘》的音乐响起,都会让我们重新忆起那些青春的泪水和欢笑。当年,我们十四五岁,只能用帅和不帅来区分男人,刘德华恰是一个阳光的俊朗小生。而今,小女孩都已长大,成为女人,开始明白男人的帅不在脸蛋,而在岁月积淀下来的睿智与淡定。而刘德华,又微笑着散发出一个中年男子的坚忍、优雅和从容。这样一个刘德华,让我们如何舍弃他。

我们今天的节目,就是带给大家一个这样的刘德华。一个因为真实而更加散发魅力的刘德华。

附: 杨澜文章—

“是什么让刘天王工作不止?”

从十七岁上无线演艺班至今,刘德华已驰骋娱乐圈三十年。一百多部电影、六十四张专辑,是他交出的考卷。“我今年就有七、八个月在大陆工作。”他对我说。

在功成名就的今天,是什么让他毫不松懈?“这是发哥在我刚入行时告诉我的,只要有工作就接下来,因为你永远不知道什么是好戏,什么是烂戏。有时候你以为是烂戏,观众却恰好喜欢。所以我就这样一路干下来了!”

听说过多年前英特尔的主席安迪-格鲁夫曾写过一本书“ONLY THE PARANOID SURVIVE”(《只有偏执狂才能生存》),其实,应翻译成《只有焦虑者才能生存》。因为总有危机感,人才会不断进取求变。或许在竞争激烈的娱乐圈,只有不断去做,才有更多胜算,才不会被忘记。这也是一种生存智慧吧?他想了想说:“你这样一讲,我也觉得很有道理噢!”那什么事让他最没有安全感呢?“记得一次颁奖礼,我有两首歌曲入选,大家,包括我自己都以为是其中一首胜数较高。但现场宣布获奖的是另外一首时,我才发现歌词没记住。所以整个演出我双手紧握话筒,一直颤抖不止。哈哈!第二天所有人都来问我为什么那么紧张?”

刘德华是头脑清醒之人,类似的尴尬他不允许再次出现。没有充足的准备,没把握做到最好,他宁可不做。比如,香港交响乐团每年会邀请一位流行歌手合作新年音乐会,身经百战的刘德华却至今没勇气答应。因为他知道该乐团的规矩是排练不超过二十个小时,而这个时间长度还不足以让他感到有十分把握。还有,就是他年轻时当导演的梦想,一次次从指间滑落,就是因为他不能确定自己是否能做到最好。“拍《无间道》的时候,我就想:哇,如果我做导演,该怎么样去指导演员达到这么好的效果呢?我发现自己没有把握。”

虽然在事业上进退有度,刘德华并不是总能掌握自己的命运。对于外界关心四十六岁的他什么时候才能让生命中的女人名正言顺地成为“刘太”,他说:“想想如果我宣布了,她将会面临的各种眼光,受到多少的压力。作为一个男人,我就算可以为她死,但这些压力是我无法控制的。”他说这话时眼光显得很无奈。“上天是很公平的,所有获得必有代价。”

在采访结束时,他在留言簿上写下“明天幸福今天修”几个字。我突然有点明白了,对面这个人三十年勤奋工作的理由。

分类: 励 志 标签: