php+mysql 数据库分表分段备份程序--宋正河
<?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 数据库分表分段备份程序--宋正河的更多相关文章
- MySQL数据库分表的3种方法
原文地址:MySQL数据库分表的3种方法作者:dreamboycx 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目 ...
- MySQL数据库分表分区(一)(转)
面对当今大数据存储,设想当mysql中一个表的总记录超过1000W,会出现性能的大幅度下降吗? 答案是肯定的,一个表的总记录超过1000W,在操作系统层面检索也是效率非常低的 解决方案: 目前针对 ...
- mysql 数据库 分表后 怎么进行分页查询?Mysql分库分表方案?
Mysql分库分表方案 1.为什么要分表: 当一张表的数据达到几千万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了.分表的目的就在于此,减小数据库的负担,缩短查询时间. m ...
- php 采集程序 宋正河
本程序主要是通过php采集网页信息,程序自动存储采集进度,采用phpquery简化元素节点匹配,采集到的内容直接入库 你要做的只是写好采集语法,本程序适合有一定php基础的人使用!当然你也可以进行修改 ...
- Mycat(4):消息表mysql数据库分表实践
本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/46882777 未经博主同意不得转载. 1,业务需求 比方一个社交软件,比方像腾讯 ...
- mysql 数据库分表小实例
项目开发中,我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性能瓶颈. 当出现这种情况时,我们可以考虑分表,即将单 ...
- mysql数据库每个表的备份脚本
对mysql数据库中的每张表进行按日期备份,思想是:先把每张表的表名取出取出,然后通过for循环去对每个表进行按日期备份 [root@ZFVM-APP-- backup]# vim dataname. ...
- 阅读之MySQL数据库分表
移动互联网时代,海量的用户数据每天都在产生,基于用户使用数据等这样的分析,都需要依靠数据统计和分析,当数据量小时,数据库方面的优化显得不太重要,一旦数据量越来越大,系统响应会变慢,TPS直线下降,直至 ...
- 亿条数据在PHP中实现Mysql数据库分表100张
当数据量猛增的时候,大家都会选择库表散列等等方式去优化数据读写速度.笔者做了一个简单的尝试,1亿条数据,分100张表.具体实现过程如下: 首先创建100张表: $i=0; while($i<=9 ...
随机推荐
- 编程题1001.A+B Format (20)
代码链接点击这里 由于有点久没写代码了,本次作业提交了三次才全部正解. 一开始以为是非常容易的题目,就没有带入多组数据,便以最简单的思路提交了代码. 发现了有特别多错误后,我并没有选择马上找同学帮忙, ...
- Android混合式开发(Hybrid)
安卓混合式开发(Hybrid) 1 环境搭建 1.1 首先,下载 Android Studio (Intellij Idea) 下载地址:http://www.android-studio.org/ ...
- Spring 源码阅读之BeanFactory
1. BeanFactory 的结构体系如下: 2. XmlBeanFactory ,装载Spring配置信息 package org.springframework.beans.factory.xm ...
- EventBus轻松使用
什么是EventBus 由greenrobot组织贡献(该组织还贡献了greenDAO),一个Android事件发布/订阅轻量级框架,功能:通过解耦发布者和订阅者简化Android事件传递,Event ...
- python第十四课--排序及自定义函数之自定义函数(案例四)
整理:4中最常见的自定义函数模型1).无参无返回值2).无参有返回值3).有参无返回值4).有参有返回值 #定义无参无返回值自定义函数 def func1(): print('hello method ...
- UVa 1412 - Fund Management(状压DP + 预处理)
链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...
- 【CF449D】Jzzhu and Numbers
题目 提供一个非容斥做法--\(FWT\) 我们发现我们要求的东西就是一个背包,只不过是在\(and\)意义下的 自然有 \[dp_{i,j}=\sum_{k\&a_i=j}dp_{i-1,k ...
- Docker实战(四)之Docker数据管理
在生产环境中使用Docker的过程中,往往需要对数据进行持久化,或者需要在多个容器之间进行数据共享,这必然涉及到容器的数据管理操作. 容器中管理数据主要有两种形式: 数据卷:容器内数据直接映射到本地主 ...
- js之radio应用实例
radio和checkbox还有select,可谓是前后端常用三剑客啊!特别是checkbox和select,关于这两个今天不讲,因为在下面这几篇文章,我已经比较详细的讲解了. SpringMVC之a ...
- Python:基础知识(二)
常用模块 urllib2 :用于发送网络请求,获取数据 (Pyhton2中的urllib2工具包,在Python3中分拆成了urllib.request和urllib.error两个包.) json: ...