PHP - Mysql数据库备份类

使用方法:

require_once("backdata.class.php");
$link = @mysql_connect("localhost","数据库名","密码") or die ('Could not connect to server.');
mysql_query("use cms",$link);
mysql_query("set names utf8",$link);
$dbbck=new backupData($link);//实例化它,只要一个链接标识就行了
//备份数据时,如想备份一个数据库中的所有表,你可这样写:
$dbbck->backupTables("cms","./",array('*'));
//备份数据时,如想备份一个数据库中的仅一个表时,你可这样写:
$dbbck->backupTables("cms","./",array('user'));
//备份数据时,如想备份一个数据库中的多个表时,你可这样写:
$dbbck->backupTables("cms","./",array('user','acl','informatoin'));
//注解:$dbbck->backupTables("参1","参2",array());中,
参1为:数据库名,
参2为:要存放备份数据的位置(即目录地址)
第三个为:你要保存那些表

backdata.class.php:

<?php
/*
*
*简单的一个Mysql备份数据类
*
*/
class backupData{
    private    $mysql_link;//链接标识
    private    $dbName;    //数据库名
    private    $dataDir;     //数据所要存放的目录
    private    $tableNames;//表名

    public function __construct($mysql_link){
         $this->mysql_link = $mysql_link;
    }
    public function backupTables($dbName,$dataDir,$tableNames){//开始备份
        $this->dbName  = $dbName;
        $this->dataDir  = $dataDir;
        $this->tableNames = $tableNames;
        $tables=$this->delarray($this->tableNames);
        $sqls='';
        foreach($tables as $tablename){
            if($tablename==''){//表不存在时
                continue;
            }
           
            //************************以下是形成SQL的前半部分**************
            //如果存在表,就先删除
            $sqls .= "DROP TABLE IF EXISTS $tablename;\n";
            //读取表结构
            $rs = mysql_query("SHOW CREATE TABLE $tablename",$this->mysql_link); 
            $row=mysql_fetch_row($rs);
            //获得表结构组成SQL
            $sqls.=$row['1'].";\n\n";
            unset($rs);
            unset($row);
           
            //************************以下是形成SQL的后半部分**************
            //查寻出表中的所有数据
            $rs=mysql_query("select * from $tablename",$this->mysql_link);
            //表的字段个数
            $field=mysql_num_fields($rs);
            //形成此种SQL语句:"INSERT INTO `groups` VALUES('1499e0ca25988d','主任','','0');"
            while($rows=mysql_fetch_row($rs)){
                $comma='';//逗号
                $sqls.="INSERT INTO `$tablename` VALUES(";
                for($i=0;$i<$field;$i++){
                    $sqls.=$comma."'".$rows[$i]."'";
                    $comma=',';
                }
                $sqls.=");\n\n\n";
            }
        }
        $backfilepath=$this->dataDir.date("Ymdhis",time()).'.sql';
       
        //写入文件
        $filehandle = fopen($backfilepath, "w");
        fwrite($filehandle, $sqls);
        fclose($filehandle);
    }
    private function delarray($array){    //处理传入进来的数组
        foreach($array as $tables){
            if($tables=='*'){    //所有的表(获得表名时不能按常规方式来组成一个数组)
                $newtables=mysql_list_tables($this->dbName,$this->mysql_link);
                $tableList = array();
                for ($i = 0; $i < mysql_numrows($newtables); $i++){
                    array_push($tableList,mysql_tablename($newtables, $i));
                }
                $tableList=$tableList;
            }else{
                $tableList=$array;
                break;
            }
        }
        return $tableList;
    }
}

?>

服务器重启或mysql重启后导致magento出现表被破坏的报错问题

 

 重启服务器后或重启mysql后有时候会发现,magento做的网站打开时出现数据库表损坏的错误提示,如:

SQLSTATE[HY000]: General error: 145 Table ‘./abc /log_visitor’ is marked as crashed and should be repaired

Trace: 
#0 /shares/websites/xxxxxxx.com/lib/Zend/Db/Statement.php(283): Zend_Db_Statement_Pdo->_execute(Array) 
#1 /shares/websites/www.supercamper.co.uk/lib/Zend/Db/Adapter/Abstract.php(406): Zend_Db_Statement->execute(Array) 
#2 /shares/websites/www.supercamper.co.uk/lib/Zend/Db/Adapter/Pdo/Abstract.php(206): Zend_Db_Adapter_Abstract->query(’INSERT INTO `lo...’, Array) 
#3 /shares/websites/www.supercamper.co.uk/lib/Zend/Db/Adapter/Abstract.php(484): Zend_Db_Adapter_Pdo_Abstract->query(’INSERT INTO `lo...’, Array) 
#4 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Model/Mysql4/Abstract.php(343): Zend_Db_Adapter_Abstract->insert(’log_visitor’, Array) 
#5 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Model/Abstract.php(235): Mage_Core_Model_Mysql4_Abstract->save(Object(Mage_Log_Model_Visitor)) 
#6 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Log/Model/Visitor.php(136): Mage_Core_Model_Abstract->save() 
#7 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Model/App.php(1032): Mage_Log_Model_Visitor->initByRequest(Object(Varien_Event_Observer)) 
#8 /shares/websites/www.supercamper.co.uk/app/Mage.php(278): Mage_Core_Model_App->dispatchEvent(’controller_acti...’, Array) 
#9 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Controller/Varien/Action.php(377): Mage::dispatchEvent(’controller_acti...’, Array) 
#10 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Controller/Front/Action.php(40): Mage_Core_Controller_Varien_Action->preDispatch() 
#11 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Controller/Varien/Action.php(335): Mage_Core_Controller_Front_Action->preDispatch() 
#12 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(159): Mage_Core_Controller_Varien_Action->dispatch(’index’) 
#13 /shares/websites/www.supercamper.co.uk/app/code/core/Mage/Core/Controller/Varien/Front.php(146): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http)) 
#14 /shares/websites/www.supercamper.co.uk/app/Mage.php(427): Mage_Core_Controller_Varien_Front->dispatch() 
#15 /shares/websites/www.supercamper.co.uk/index.php(40): Mage::run(’default’) 
#16 {main}

进入mysql数据库的数据目录,通常是/var/lib/mysql,如果你不确定,或者此目录不存在,你可以通过查看mysql的配置文件或其它方式来获取.

然后执行下面的命令修复mysql被破环的表

myisamchk -r *.MYI

即可修复好magento数据库中由于mysql服务器重启破坏的表结构.

php利用curl获取指定IP的所有信息的API

看马:

<?php
function getIpInfo($ip,$timeout=15) {
    if(!function_exists('curl_init') or !function_exists('simplexml_load_string')) return false;
    $ch = curl_init("http://ipinfodb.com/ip_query2.php?ip={$ip}&timezone=true");
    $options = array(
        CURLOPT_RETURNTRANSFER => true,
    );
    curl_setopt_array($ch,$options);
    $res = curl_exec($ch);
    curl_close($ch);
    if($xml = simplexml_load_string($res)) {
        $dt = array();
        foreach ($xml->Location->children() as $key=>$item)  {
            $dt[$key] = strtolower($item);
        }
        return $dt;
    } else {
        return false;
    }
}
$current_Ip_Info = getIpInfo('61.164.140.55');
var_dump($current_Ip_Info); 

/*
返回内容:

array(13) {
  ["Ip"]=>
  string(13) "61.164.140.55"
  ["Status"]=>
  string(2) "ok"
  ["CountryCode"]=>
  string(2) "cn"
  ["CountryName"]=>
  string(5) "china"
  ["RegionCode"]=>
  string(2) "02"
  ["RegionName"]=>
  string(8) "zhejiang"
  ["City"]=>
  string(5) "ruian"
  ["ZipPostalCode"]=>
  string(0) ""
  ["Latitude"]=>
  string(7) "27.7814"
  ["Longitude"]=>
  string(7) "120.628"
  ["TimezoneName"]=>
  string(14) "asia/chongqing"
  ["Gmtoffset"]=>
  string(5) "28800"
  ["Isdst"]=>
  string(1) "0"
}
*/
?>

很方便~~

标签: return, array, 内容, curl

醒目,威武

换年之际, 老规矩, 写写, 给自己个回忆.

岁末一天, 整个洋溢着过年的深腐气氛,  鞭炮礼花声络绎不绝, 响声不停, 在脑海里风骚荡漾.

壹零年了, 终于也虚岁23, 韶光飞逝, 此时此刻, 只让我特想念22的味道, 心里千声万遍呐喊, 'lǎo zǐ bú xiǎng zhǎng dà '. 

岁岁年年在逝去的同时, 不得不担起一些责任, 这让我很恐慌, 不是畏惧害怕, 只是, 我还没准备好. 

我还想享受某一天校园里悠闲的午后, 可以安静的做很久前就想做的事. 

我还想心情不好的时候, 就能放下一切, 自己一个人踏上任何一辆公车, 转啊转, 随心所欲肆无忌惮的看着我能遇到的每一个陌生人. 

我还想可以随时躲进自己的精神世界里, 无所谓这只阿猫那只阿狗的戏份, 也不关心她他它对我的看法. 

我还想...

我想, 都不行了, 我毕业了, 狗尾巴草如我, 就得独自撑起一片天空. 这是由某些因造成的命. 我反抗不了. 

我只能慢慢蜕变自己.

当个草根白领, 朝9晚5, 为车为房为老婆Miss Miao, 平淡而充实的过着小日子等待结婚生子教育下一个命运女神的信徒. 

当个小老板, 守着一方寸土, 在最大自由的约束下去谋取养家糊口的票票, 市井小民般挣扎. 

当个新生代的宅男, 当然, 这点最是不可能, 如果真的沦落到这地步, 也许是我大智若妖了. 

这就是预见,在目前方方面面的情况下, 对处于23的自己的一个未来的可怕的预见. 

好吧, 乐观点, 我还是可以偶尔在有限的资源限制下去挥霍潇洒. 

或者性致来了白玫瑰堆里翻红玫瑰堆里跳, 

更可能会有个10全8美的好妻子, 能懂我然后偶尔纵容我. 也许不深爱我但爱我爱得清楚明白, 

这是好一点的下场.

好吧, 也就这样了. 

杯具洗具都罢了, 

我得先珍惜现在拥有的, 我失去够多了. 

既然活着是一出到处充斥着伪主角的喜剧戏. 那我就演我的花脸丑角给你瞧瞧.

最大希望, 自己在壹零年,在23, 能醒目. 能威武.