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
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
PHP开发中常用的字符串操作函数
Feb 08 PHP
php 冒泡排序 交换排序法
May 10 PHP
关于php正则匹配汉字的方法介绍
Apr 25 PHP
PHP使用适合阅读的格式显示文件大小的方法
Mar 05 PHP
php实现将任意进制数转换成10进制的方法
Apr 17 PHP
php操作xml并将其插入数据库的实现方法
Sep 08 PHP
PHP反射机制原理与用法详解
Feb 15 PHP
阿里云的WindowsServer2016上部署php+apache
Jul 17 PHP
使用PHPWord生成word文档的方法详解
Jun 06 PHP
php中的依赖注入实例详解
Aug 14 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的中问验证码
2006/11/25 PHP
PHP实现返回JSON和XML的类分享
2015/01/28 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
php实现将HTML页面转换成word并且保存的方法
2016/10/14 PHP
php 三大特点:封装,继承,多态
2017/02/19 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
2019/10/10 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
鼠标移动到图片名上,显示图片的简单实例
2013/07/14 Javascript
jquery图片放大功能简单实现
2013/08/01 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
2016/05/04 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
react+ant design实现Table的增、删、改的示例代码
2018/12/27 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
微信小程序实现时间进度条功能
2020/11/17 Javascript
vue不操作dom实现图片轮播的示例代码
2019/12/18 Javascript
js实现简单放大镜效果
2020/03/07 Javascript
微信小程序实现多选框功能的实例代码
2020/06/24 Javascript
python实现扫描日志关键字的示例
2018/04/28 Python
python读取Excel表格文件的方法
2019/09/02 Python
Tensorflow--取tensorf指定列的操作方式
2020/06/30 Python
python打包多类型文件的操作方法
2020/09/21 Python
Superdry瑞典官网:英国日本街头风品牌
2017/05/17 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
初中校园之声广播稿
2014/01/15 职场文书
小学教师国培感言
2014/02/08 职场文书
《找不到快乐的波斯猫》教学反思
2014/02/24 职场文书
建议书怎么写
2014/03/12 职场文书
安全生产责任书范本
2014/04/15 职场文书
党员服务承诺书
2014/05/28 职场文书
伦敦奥运会口号
2014/06/13 职场文书
2014第二批党的群众路线教育实践活动对照检查材料思想汇报
2014/09/18 职场文书
企业党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
搞笑老公保证书
2015/02/26 职场文书
TS 类型收窄教程示例详解
2022/09/23 Javascript