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 smarty的预保留变量总结
Dec 04 PHP
使用PHP实现密保卡功能实现代码&amp;lt;打包下载直接运行&amp;gt;
Oct 09 PHP
php安装xdebug/php安装pear/phpunit详解步骤(图)
Dec 22 PHP
php利用腾讯ip分享计划获取地理位置示例分享
Jan 20 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
Jun 13 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
PHP记录搜索引擎蜘蛛访问网站足迹的方法
Apr 15 PHP
php文件上传你必须知道的几点
Oct 20 PHP
一个简单安全的PHP验证码类 附调用方法
Jun 24 PHP
php curl上传、下载、https登陆实现代码
Jul 23 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
什么是短波收听SWL
2021/03/01 无线电
无法载入 mcrypt 扩展,请检查 PHP 配置终极解决方案
2011/07/18 PHP
php设计模式之观察者模式的应用详解
2013/05/21 PHP
PHP合并静态文件详解
2014/11/14 PHP
thinkPHP框架中layer.js的封装与使用方法示例
2019/01/18 PHP
不安全的常用的js写法
2009/09/15 Javascript
IE中图片的onload事件无效问题和解决方法
2014/06/06 Javascript
JavaScript将当前时间转换成UTC标准时间的方法
2015/04/06 Javascript
javascript嵌套函数和在函数内调用外部函数的区别分析
2016/01/31 Javascript
又一枚精彩的弹幕效果jQuery实现
2016/07/25 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
基于JS实现checkbox全选功能实例代码
2016/10/31 Javascript
NodeJS仿WebApi路由示例
2017/02/28 NodeJs
JS中图片压缩的方法小结
2017/11/14 Javascript
iview实现select tree树形下拉框的示例代码
2018/12/21 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
详解如何在Vue项目中发送jsonp请求
2019/10/25 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
vue使用canvas实现移动端手写签名
2020/09/22 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
使用Flask集成bootstrap的方法
2018/07/24 Python
python对日志进行处理的实例代码
2018/10/06 Python
Django接收自定义http header过程详解
2019/08/23 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
利用python下载scihub成文献为PDF操作
2020/07/09 Python
selenium切换标签页解决get超时问题的完整代码
2020/08/30 Python
10个顶级Python实用库推荐
2021/03/04 Python
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
美国豪华的多品牌精品店:The Webster
2019/07/31 全球购物
理财计划书
2014/08/14 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
爱国主义主题班会
2015/08/14 职场文书
会计专业自荐信范文
2019/05/22 职场文书
Nginx本地目录映射实现代码实例
2021/03/31 Servers
SQLServer常见数学函数梳理总结
2022/08/05 MySQL