php实现mysql数据库分表分段备份


Posted in PHP onJune 18, 2015

分卷导出思路:统计sql语句变量的长度,按1个字符当成1 字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的)。

分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的);

<?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 相关文章推荐
最简单的PHP程序--记数器
Oct 09 PHP
PHP 事务处理数据实现代码
May 13 PHP
php数组的一些常见操作汇总
Jul 17 PHP
很让人受教的 提高php代码质量36计
Sep 05 PHP
PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法
Aug 28 PHP
php防止sql注入之过滤分页参数实例
Nov 03 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
Laravel中encrypt和decrypt的实现方法
Sep 24 PHP
实例解析php的数据类型
Oct 24 PHP
php apache开启跨域模式过程详解
Jul 08 PHP
Thinkphp5.0 框架Model模型简单用法分析
Oct 11 PHP
php遍历树的常用方法汇总
Jun 18 #PHP
php编写简单的文章发布程序
Jun 18 #PHP
试用php中oci8扩展
Jun 18 #PHP
浅谈PDO的rowCount函数
Jun 18 #PHP
基于PHP实现的事件机制实例分析
Jun 18 #PHP
php使用MySQL保存session会话的方法
Jun 18 #PHP
php判断表是否存在的方法
Jun 18 #PHP
You might like
PHP在Web开发领域的优势
2006/10/09 PHP
PHP脚本的10个技巧(7)
2006/10/09 PHP
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
推荐一些非常不错的javascript学习资源站点
2007/08/29 Javascript
JQuery插件ajaxfileupload.js异步上传文件实例
2015/05/19 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery Easyui实现左右布局
2016/01/26 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
深入理解bootstrap框架之入门准备
2016/10/09 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
关于Node.js中Buffer的一些你可能不知道的用法
2017/03/28 Javascript
webpack2.0搭建前端项目的教程详解
2017/04/05 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
JavaScript实现的滚动公告特效【基于jQuery】
2019/07/10 jQuery
微信小程序Echarts覆盖正常组件问题解决
2019/07/13 Javascript
SSM+layUI 根据登录信息显示不同的页面方法
2019/09/20 Javascript
vue组件添加事件@click.native操作
2020/10/30 Javascript
JavaScript中Object、map、weakmap的区别分析
2020/12/15 Javascript
使用cx_freeze把python打包exe示例
2014/01/24 Python
Python实现115网盘自动下载的方法
2014/09/30 Python
Python中操作符重载用法分析
2016/04/29 Python
jupyter note 实现将数据保存为word
2020/04/14 Python
ffmpeg+Python实现B站MP4格式音频与视频的合并示例代码
2020/10/21 Python
Fanatics英国官网:美国体育电商
2018/11/06 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
金属材料工程毕业生个人的自我评价
2013/11/28 职场文书
疾病防治方案
2014/05/31 职场文书
护理专业自荐书
2014/06/04 职场文书
常务副总经理任命书
2014/06/05 职场文书
2015年幼儿园新年寄语
2014/12/08 职场文书
Python趣味挑战之实现简易版音乐播放器
2021/05/28 Python