MYSQL_OUTPUT 脚本【修正】
这个重新写的一个MYSQL数据导出脚本, 导出格式为CSV,这种格式更加的轻便,不会过份影响数据文件体积,适合导入到本地数据库!大家通过修改代码里面标注的一些配置变量就可以了。如果导出数据有筛选要求可以直接修改SQL语句满足你的要求!
脚本运行提醒:
如果数据是百万级别,这个脚本并不适合通过浏览器访问来脱裤,所以要用命令行来运行该脚本,这样就不会漏数据了。(记得网上广传的adminer 脚本,这个导出大量数据时会不完整,十分不稳定!只适合浏览数据和修改。)
运行方式:
linux 下可以 :
php /tmp/outdata.php (在未安装PHP 环境中,需要单独去安装一下PHP。)
问题总结:
-------------------------------------------------------------------------
1 。提示PHP没找到就是下面这样的情况:
没有设置对应PHP环境变量则找不到PHP 路径。(这些操作最好在SSH 或者反弹出的shell 中操作。我用菜刀的命令行运行脚本,导出大量数据也没任何问题, 你也可以这样做。)
解决办法:
Linux 安装了PHP, 不知道路径 敲入下面命令
locate php | more
带上PHP完整路径执行脚本就行了。windows 下就需要找到php 的安装路径了,一般情况管理员可能并没有为PHP设置环境变量!
---------------------------------------------------------------------------------------------
提醒 : 数据导出过程中,会生成data.csv 数据文件,数据在多的情况,不会瞬间导出完毕,要等待一会。如果你用类似菜刀这样的工具运行的脚本,菜刀在一段时间内没接收到数据会出现超时提醒,但不是你的脚本超时,你要不断刷新注意文件体积,如果看到大小不变了,那就导出完毕了。脚本只是脱整个表的数据,如果你的需求不是这样,那就要另外修改了!
<?php ini_set('max_execution_time', 0); ini_set('memory_limit','900M'); // 内存最大空间。 Discuz/uccenter 一般几百W 数据也就占用 160 - 200 M 硬盘空间 $db_host = 'localhost'; // host $db_user = 'uc'; // mysql user $db_pass = '527200.kenweige'; // mysql pass $db_database = 'uc'; // database name $table_name = 'uc_members'; // table $sql = mysql_connect($db_host,$db_user,$db_pass) or die('Error!'); mysql_select_db($db_database,$sql) or die("Could not connect: " . mysql_error()."\n"); mysql_query('SET NAMES GBK'); $query = "SELECT * FROM $table_name"; $export = mysql_query($query) or die("Sql error : ".mysql_error()."\n"); $fields = mysql_num_fields ($export); $data = ''; $header = ''; for ( $i = 0; $i < $fields; $i++) { $header .= mysql_field_name($export , $i).','; } $header = substr($header, 0, -1); while ($row = mysql_fetch_array($export, MYSQL_NUM)) { $line = ''; foreach($row as $value) { if ((!isset($value)) || ($value == "")) { $value = '"",'; } else { $value = str_replace('"', '""', $value ); $value = '"'.$value.'"'.','; } $line .= $value; } wf(substr(Trim($line), 0, -1)."\n"); } function wf($data) { $fh = fopen("data.csv", 'a+'); fwrite($fh, $data); fclose($fh); } if ( $data == "" ) { $data = "\n(0) Records Found!\n"; } ?>