mysql大数据库导入导出脚本

在使用mysql数据库的时候,如果经常导入导入。使用mysql内部命令要想把整个数据库导出,时常会应为某个表的失败,而导致整个导入,导出作业失败。于是我想分而治之。利用php写了一个脚本。每次导入导出,成功的机会高多了。
使用如下:

Usage:  php dbio.php im/import/ex/export/tr/truncate db://user:password@host/dat
abase path [-n]
im/import        is import db from sql files which is exists;
ex/export        is export db to sql files;
tr/truncate      is empties all tables in this database; the parm 'path' will be
 ignored.path:   the directory of the sql files;
 [-n] is optional parameter just for create new database when parm im/import is
exists.

个人使用还是不错的。

代码如下(dbio.php)
  1. <?php
  2. /**
  3.  * @file dbio.php
  4.  * Import/Export/Truncate tables from a database, one file per table
  5.  * import/im    tb://user:passwd@localhost/database path [-n]
  6.  * export/ex    tb://user:passwd@localhost/database path
  7.  * truncate/tr  tb://user:passwd@localhost/database path
  8.  *
  9.  * MIT License
  10.  *
  11.  * $Id$
  12. */
  13. /* vim: set tabstop=4 shiftwidth=4 expandtab: */
  14. define('SCHEMA_DATABASE','schema.sql');
  15. function usage($order){
  16.     echo "Usage:  php $order im/import/ex/export/tr/truncate db://user:password@host/database path [-n] /n";
  17.     echo "im/import /t is import db from sql files which is exists; /n";
  18.     echo "ex/export /t is export db to sql files; /n";
  19.     echo "tr/truncate /t is empties all tables in this database; the parm 'path' will be ignored.";
  20.     echo "path:/t the directory of the sql files; /n ";
  21.     echo "[-n] is optional parameter just for create new database when parm im/import is exists. /n";
  22.     die();
  23. }
  24. function checkParams($argv,$argc){
  25.     if($argc < 3 || $argc > 5) {
  26.          foreach ($argv as $elem){
  27.              if(!assert($elem)) return false;
  28.          }
  29.          return false;
  30.     }
  31.     return true;
  32. }
  33. function actionImport($tb,$user,$passwd,$host,$database,$path,$new){
  34.     $dbconn = mysql_select_db($database);
  35.     if(!$dbconn) {
  36.         if($new=='-n'){
  37.             echo "Now create database $database. /n";
  38.             mysql_query("create database $database");
  39.             $exec="mysql -h $host -u $user -p$passwd $database < $path/".SCHEMA_DATABASE;
  40.             passthru($exec);
  41.         }elseif ($new=='') {
  42.             echo "Database do not exist!, you need param '-n' at last. /n";
  43.             die();
  44.         }
  45.     }
  46.     $files = scandir($path);
  47.     if(!$files){
  48.         echo "Check params $path";
  49.     }else{
  50.         $sql_file = preg_grep("/[a-zA-Z0-9]*/.sql$/i",$files);
  51.         echo "Now start importing <<< /n";
  52.         foreach($sql_file as $elem){
  53.         if($elem==SCHEMA_DATABASE) continue;
  54.         $exec="mysql -h $host -u $user -p$passwd $database < $path/$elem";
  55.         doPassthru($exec);
  56.         }
  57.     }
  58. }
  59. function actionTruncate($database){
  60.     echo "Now emptying all tables exporting >>> /n";
  61.     $result=mysql_list_tables($database);
  62.     $tbs=array();
  63.     for ($i = 0; $i < mysql_num_rows($result); $i++)
  64.         $tbs[]=mysql_tablename($result, $i);
  65.     mysql_free_result($result);
  66.     foreach($tbs as $elem){
  67.         $exec="truncate $elem";
  68.         $result=mysql_query($exec) or die($exec.'Failure');
  69.     }
  70.     echo "Truncate success.";
  71. }
  72. function actionExport($tb,$user,$passwd,$host,$database,$path,$new){
  73.     echo "Now start exporting --- /n";
  74.     $result=mysql_list_tables($database);
  75.     $tbs=array();
  76.     for ($i = 0; $i < mysql_num_rows($result); $i++)
  77.         $tbs[]=mysql_tablename($result, $i);
  78.     mysql_free_result($result);
  79.     foreach($tbs as $elem){
  80.         $exec="mysqldump -h $host -u $user -p$passwd -q -t $database $elem > $path/$elem.sql";
  81.         doPassthru($exec);
  82.     }
  83.         $exec="mysqldump -h $host -u $user -p$passwd -q -d $database > $path/".SCHEMA_DATABASE;
  84.         doPassthru($exec);
  85. }
  86. function doPassthru($exec){
  87.     echo $exec ;
  88.     passthru($exec, $ret);
  89.     if($ret != 0) {
  90.         echo " : Failed/n";
  91.     }else{
  92.         echo " : OK /n";
  93.     }
  94.     return true;
  95. }
  96. //    Main()
  97. if(checkParams($argv,$argc)){
  98.     $action=$argv[1];
  99.     list($tb,$tmp1,$tmp2,$user,$passwd,$host,$database)=split('[:/@]',$argv[2]);
  100.     $path=$argv[3];
  101.     $new=$argv[4];
  102.     if(!mysql_connect($host,$user,$passwd)) die("Could   not   connect   to   mysql");
  103.     switch ($action){
  104.         case 'im':
  105.         case 'import':
  106.             actionImport($tb,$user,$passwd,$host,$database,$path,$new);
  107.             break;
  108.         case 'ex':
  109.         case 'export':
  110.             actionExport($tb,$user,$passwd,$host,$database,$path,$new);
  111.             break;
  112.         case 'tr':
  113.         case 'truncate':
  114.             actionTruncate($database);
  115.             break;
  116.         default:
  117.             die("action param '$action' is error!!!");
  118.     }
  119. }else{
  120.     usage($argv[0]);
  121. }
  122. ?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值