<?php

//宋正河 转载请注明出处

set_time_limit(0);

header('content-type:text/html;charset=utf-8');

mysql_connect('localhost','root','root');

mysql_select_db('test');

$table_array=get_tables('test');

mysql_query('set names utf8');

$filesize=1024*1024*4;

$start=$_GET['start']?$_GET['start']:0;

$part=$_GET['part']?$_GET['part']:'1';

$table_index=$_GET['table_index']?$_GET['table_index']:'0';

$table=$table_array[$table_index];

$num=200000000;//这个数要足够大,可以是总记录数

$backupdata='';

if($start=='0'){

$query="SHOW CREATE TABLE `{$table}`";

$result = mysql_query($query);

$row = mysql_fetch_row($result);

$backupdata .= "DROP TABLE IF EXISTS `{$table}`;\n" . $row[1] . ";\n\n";

}

$limit=($start=='0')?'':" limit $start,$num ";

$query="select * from `{$table}` $limit ";

$result=mysql_query($query);

$numfields = mysql_num_fields($result); //统计字段数

while($row=mysql_fetch_row($result)){

$comma = ''; //存储逗号

$backupdata_tmp = "INSERT INTO `{$table}` VALUES (";

for($i=0; $i<$numfields; $i++){

$backupdata_tmp .= $comma . "'" . mysql_escape_string($row[$i]) . "'";

$comma = ',';

}

$backupdata_tmp .= ");\n";

if(strlen($backupdata)+strlen($backupdata_tmp) > $filesize){

//写入文件并跳转

$file='data/'.$table.'-'.$part.'.sql';

file_put_contents($file,$backupdata);

echo $file.' 备份完成,程序继续进行!';

$part++;

//分段

//表名

//起点

//跳转

sleep(3);

echo "<script>location.href='?start={$start}&table_index={$table_index}&part={$part}';</script>";

exit;

}

$backupdata.=$backupdata_tmp;

$start++;

}

if($backupdata){

$file='data/'.$table.'-'.$part.'.sql';

file_put_contents($file,$backupdata);

}

echo $table.'备份完成!<br />';

sleep(2);

$table_index++;

if($table_array[$table_index]){

echo "<script>location.href='?table_index={$table_index}';</script>";

exit;

}else{

echo '恭喜你,数据库备份完毕!';

}

function get_tables($db){

$tq = mysql_list_tables($db);

while($tr = mysql_fetch_row($tq)){

$arrtb[] = $tr[0];

}

return $arrtb;

}

?>

php+mysql 数据库分表分段备份程序--宋正河的更多相关文章

  1. MySQL数据库分表的3种方法

    原文地址:MySQL数据库分表的3种方法作者:dreamboycx 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目 ...

  2. MySQL数据库分表分区(一)(转)

    面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的   解决方案: 目前针对 ...

  3. mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?

    Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. m ...

  4. php 采集程序 宋正河

    本程序主要是通过php采集网页信息,程序自动存储采集进度,采用phpquery简化元素节点匹配,采集到的内容直接入库 你要做的只是写好采集语法,本程序适合有一定php基础的人使用!当然你也可以进行修改 ...

  5. Mycat(4):消息表mysql数据库分表实践

    本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 未经博主同意不得转载. 1,业务需求 比方一个社交软件,比方像腾讯 ...

  6. mysql 数据库分表小实例

    项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 当出现这种情况时,我们可以考虑分表,即将单 ...

  7. mysql数据库每个表的备份脚本

    对mysql数据库中的每张表进行按日期备份,思想是:先把每张表的表名取出取出,然后通过for循环去对每个表进行按日期备份 [root@ZFVM-APP-- backup]# vim dataname. ...

  8. 阅读之MySQL数据库分表

    移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...

  9. 亿条数据在PHP中实现Mysql数据库分表100张

    当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过程如下: 首先创建100张表: $i=0; while($i<=9 ...

随机推荐

  1. xdebug安装及使用小结

    最近安装了一下xedug,并且学习了一下如何使用.安装xdebug的初衷是为了深入研究一下PHP的垃圾回收机制. Xdebug是一个开放源代码的PHP程序调试器(即一个Debug工具),可以用来跟踪, ...

  2. 【Anisble 文档】【译文】测试策略

    最近在琢磨 ansible,想使用这个搞一个自动发布部署系统,google以下发现了中文文档,但是里面很多感觉不专业,念都念不顺.看英文版又费劲,只能啃完中文啃英文. 本篇是译文第一篇,后续持续维护. ...

  3. Django在admin模块中显示auto_now_add=True或auto_now=True的时间类型列

    转载自: http://www.tuicool.com/articles/ZryE7f 在Django如果model中的列定义了auto_now_add或auto_now属性,那么这种列不会在admi ...

  4. Golang channel 用法简介

    channel 是 golang 里相当有趣的一个功能,大部分时候 channel 都是和 goroutine 一起配合使用.本文主要介绍 channel 的一些有趣的用法. 通道(channel), ...

  5. python伪装网页访问

    # -*- coding:utf8 -*-#import urllib.request#url =' http://www.douban.com/'#webPage=urllib.request.ur ...

  6. centos安装swoole

        编译安装swoole: cd && wget https://github.com/swoole/swoole-src/archive/1.8.6-stable.tar.gz  ...

  7. robotframwork接口测试(五)—接口分层测试粗解

    个人小结,仅供参考. 接口测试很简单,但是很重要. 可以写代码,也可以用工具进行测试.工具说说就很多了,简单介绍一下我目前用过的几个能够测试接口的工具, Burpsuite:这类偏请求攻击类软件 Fi ...

  8. Win32 HTTP Download

    头文件HTTPClient.h: #pragma once #ifndef HTTPClient_H_ #define HTTPClient_H_ #include <string> us ...

  9. JDBC数据对象存储

    一:将查询的结果生成对象,储存在数组中. package day31; import java.sql.Connection; import java.sql.PreparedStatement; i ...

  10. 控制层方法中获取url目录

    控制层方法中获取url目录 Request.Url.GetLeftPart(UriPartial.Authority).ToString(); //返回 http://localhost:9246(网 ...