+ -
当前位置:首页 → 问答吧 → 【美丽的代码】MySQL分表备份(Shell,非Web)

【美丽的代码】MySQL分表备份(Shell,非Web)

时间:2008-09-19

来源:互联网

[php]

#!/usr/local/php5/bin/php
<?php
/**
* @File name: mysql_dump.php
* @author: 李枨煊
* @Date: Thu Jun 05 11:16:16 CST 2008
* @Copyright (C) , 2008, SUIKEE Co., Ltd.
* @Desription: 备份数据库,分表备份(每个表是一个文件)
*    SHELL脚本,非Web脚本。
*    Linux系统可修改文件头部的PHP路径,然后执行mysql_dump.php --help
*    Windows/Linux系统均可直接执行 <PHP路径>/php mysql_dump.php --help
*/
//---------------------------------------------------------------
//默认数据库配置
$cfg_db = array(
'host' => 'localhost',
'user' => 'root',
'pass' => '123456',
'database' => 'mysql',
);
$dirRoot = '/usr/local/bak'; //要备份的路径
$mysqlRoot = '/usr/local/mysql/'; //MySQL路径
//---------------------------------------------------------------

$help = "
mysql_dump.php -hhost -uuser -ppassword -ddatabase -f/usr/local/bak/
--help Show the help info
-h MySQL's host , The default is '{$cfg_db['host']}'
-u MySQL's username, The default is '{$cfg_db['user']}'
-p MySQL's password, The default is '{$cfg_db['pass']}'
-d MySQL's database, THe default is '{$cfg_db['database']}'
-f The bak dir (only dir),  THe default is '$dirRoot'
-m The MySQL dir, The default is '$mysqlRoot'";

set_time_limit(0); //无限超时时间
//整理参数
foreach ($argv as $value)
{
$vKey = substr($value,0,2); //参数键键
$vValue = substr($value,2); //参数值

if($value == '--help') //帮助
{
  echo $help;
  exit;
}

if($vKey == '-h') //主机
{
  $cfg_db['host'] = $vValue;
}

if($vKey == '-u') //用户名
{
  $cfg_db['user'] = $vValue;
}

if($vKey == '-p') //密码
{
  $cfg_db['pass'] = $vValue;
}

if($vKey == '-d') //数据库名
{
  $cfg_db['database'] = $vValue;
}

if($vKey == '-f') //备份的路径
{
  $dirRoot = $vValue;
}
}
//连接数据库
$link = @mysql_connect($cfg_db['host'],$cfg_db['user'],$cfg_db['pass']) or die("Can't connect the mysql.\nErrorNum:".mysql_errno()."\nErrorInfo:".mysql_error()."\n");
mysql_select_db($cfg_db['database']) or die("Can't select the database.\nErrorNum:".mysql_errno()."\nErrorInfo".mysql_error());
//取出数据表
$query = mysql_query('SHOW TABLES',$link);
while ($row = mysql_fetch_array($query,MYSQL_NUM))
{
$table = $row[0]; //要操作的数据表

$microtime = microtime(true); //统计执行时间
echo `{$mysqlRoot}/bin/mysqldump -h{$cfg_db['host']} -u{$cfg_db['user']} -p{$cfg_db['pass']} --opt {$cfg_db['database']} {$table} > {$dirRoot}/{$cfg_db['database']}.{$table}.sql`;
$microtime = microtime(true) - $microtime; //计算执行时间
$microtime = sprintf('%.3f',$microtime); //格式化执行时间
echo "--------Dump Over [{$cfg_db['database']}.{$table}][$microtime].\n";
}
?>

[/php]


Shell脚本,不要在Web环境下执行。。

mysql_dump.zip (1.37 KB)

下载次数:23

2008-9-19 17:41

作者: 飞翔de希望   发布时间: 2008-09-19

作者: RICHARD   发布时间: 2008-09-22

支持一下!不过我不喜欢在双引号里面带有变量,很没有效率,用单引号吧用到变量就单引加双引还好看

作者: gvtbs   发布时间: 2008-09-22

效率是不如单引号的说,不过,感觉这样直观一些,单引号里面全是用.连接,如果变量多,看着很花的说~~也许是习惯问题吧。。

作者: 飞翔de希望   发布时间: 2008-09-24

php 的 shell 脚本...强.

作者: hy0kl   发布时间: 2008-10-28

hao dong xi

作者: php_buda   发布时间: 2009-10-08

支持!帮顶!

















网络营销    http://www.mijian.net

作者: lnucopxer   发布时间: 2009-10-09