客户端

mysql从源数据库导出表到目标数据库

所在版块: 后端技术 2016-08-16 15:32 [复制链接] 查看: 2658|回复: 0
  1. #!/usr/bin/env php
  2. <?php
  3. /**
  4. * DB同步脚本
  5. **/
  6. ini_set('date.timezone','Asia/Shanghai');
  7. define("SCRIPT_PATH", realpath(dirname(__FILE__)));
  8. # 数据文件根目录
  9. define("DATA_ROOT_PATH", SCRIPT_PATH."/data/");
  10. # 数据文件子目录(按时间命名)
  11. define("DATE_FORMT","Y/m/d");

  12. #######################################################
  13. # 源数据库配置
  14. $source_db_map = array (
  15.     'test' => array(’127.0.0.1’,’3306’,’root’,’root’),
  16. );

  17. # 目标数据库配置
  18. $dest_db_map = array(
  19.     'test' => array('127.0.0.1','9988','root','root'),
  20. );
  21. ######################################################


  22. if (__FILE__ == realpath($_SERVER['SCRIPT_FILENAME']))
  23. {
  24.     dumpdb(’test’,’t_users’,’test’);
  25. }

  26. // 从进程管道中读取输出数据
  27. function pfile_get_contents($cmd)
  28. {/*{{{*/
  29.     echo ">>> $cmd\n";
  30.     $buf='';
  31.     $file = popen($cmd,"r");
  32.     while (!feof($file)) {
  33.         $buf.=fgets($file);
  34.     }   
  35.     pclose($file);
  36.     return $buf;
  37. }/*}}}*/

  38. // 将数据表从源数据库导入目标数据库(自动创建表)
  39. function dumpdb($src_db, $table, $dest_db)
  40. {/*{{{*/
  41.     global $source_db_map, $dest_db_map;
  42.     if (!isset($source_db_map[$src_db])) {die("unknow src_db : $src_db\n");}
  43.     if (!isset($dest_db_map[$dest_db])) {die("unknow dest_db : $dest_db\n");}
  44.     $scfg = $source_db_map[$src_db];
  45.     $dcfg = $dest_db_map[$dest_db];
  46.     $mysql_src = "mysql -h".$scfg[0]." -P".$scfg[1]." -u".$scfg[2]." -p".$scfg[3];
  47.     $mysql_dest = "mysql -h".$dcfg[0]." -P".$dcfg[1]." -u".$dcfg[2]." -p".$dcfg[3];

  48.     //1. 导出建表语句
  49.     $cmd = $mysql_src." -N -e \"use $src_db; show create table $table \G\"";
  50.     $create_sql = pfile_get_contents($cmd);
  51.     // 处理建表语句,发现不同mysql版本支持的建表语句不同,这里做下适配
  52.     $pos = strpos($create_sql,'CREATE TABLE');
  53.     $create_sql = substr($create_sql, $pos);
  54.     $create_sql = str_replace('CREATE TABLE','CREATE TABLE IF NOT EXISTS', $create_sql);
  55.     $create_sql = str_replace('ON UPDATE CURRENT_TIMESTAMP','', $create_sql);
  56.     $create_sql = str_replace('DEFAULT CURRENT_TIMESTAMP','', $create_sql);
  57.     echo $create_sql."\n";

  58.     //2. 创建数据表
  59.     $con = mysql_connect($dcfg[0].":".$dcfg[1],$dcfg[2],$dcfg[3]);
  60.     if (!$con) {die('Could not connect: ' . mysql_error());}
  61.     mysql_select_db($dest_db, $con);
  62.     if (!mysql_query($create_sql,$con)) {die('Error creating table: '.mysql_error());}
  63.     mysql_close($con);

  64.     //3. 导出数据到文件
  65.     $filepath = DATA_ROOT_PATH."/".date(DATE_FORMT);
  66.     if (!is_dir($filepath)) mkdir($filepath,0777,true);
  67.     $file = $filepath."/".$table;
  68.     if (is_file($file)) {die("file is exist: $file \n");}
  69.     $cmd = $mysql_src." -N -e \"use $src_db; SELECT * FROM $table\" > $file";
  70.     runcmd($cmd);

  71.     //4. 载入目标数据库
  72.     $cmd = $mysql_dest." -N -e \"use $dest_db; load data infile '$file' ignore into table $table\"";
  73.     runcmd($cmd);
  74. }/*}}}*/

  75. function runcmd($cmd)
  76. {/*{{{*/
  77.     echo ">>> $cmd\n";
  78.     system($cmd);
  79. }/*}}}*/


  80. // vim600: sw=4 ts=4 fdm=marker syn=php
  81. ?>
复制代码






本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

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

本版积分规则

扫码关注微信公众号

QQ|Archiver|手机版|小黑屋|mwt-design ( 沪ICP备12041170号-1

GMT+8, 2024-11-22 18:44 , Processed in 0.083447 second(s), 31 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回列表