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 Smarty初体验二 获取配置信息
Aug 08 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
完美实现wordpress禁止文章修订和自动保存的方法
Nov 03 PHP
php+html5基于websocket实现聊天室的方法
Jul 17 PHP
浅谈PHP的$_SERVER[SERVER_NAME]
Feb 04 PHP
php 删除指定文件夹的实例讲解
Jul 25 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
PHP如何搭建百度Ueditor富文本编辑器
Sep 21 PHP
workerman结合laravel开发在线聊天应用的示例代码
Oct 30 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
Oct 11 PHP
php中用unset销毁变量并释放内存
May 10 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 学习提高路线分享
2011/10/23 PHP
PHP实现的注册,登录及查询用户资料功能API接口示例
2017/06/06 PHP
PHP+jQuery实现即点即改功能示例
2019/02/21 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
nodejs教程之入门
2014/11/21 NodeJs
JavaScript获取网页表单提交方式的方法
2015/04/02 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
jQuery实现页面点击后退弹出提示框的方法
2016/08/24 Javascript
vue.js 1.x与2.0中js实时监听input值的变化
2017/03/15 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
深入理解React中何时使用箭头函数
2017/08/23 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
bootstrap-paginator服务器端分页使用方法详解
2020/02/13 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
vue中的计算属性和侦听属性
2020/11/06 Javascript
python 实时遍历日志文件
2016/04/12 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
通过python+selenium3实现浏览器刷简书文章阅读量
2017/12/26 Python
python实现换位加密算法的示例
2018/10/14 Python
SELENIUM自动化模拟键盘快捷键操作实现解析
2019/10/28 Python
Python ORM编程基础示例
2020/02/02 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
澳大利亚旅游网站:Lastminute
2017/08/07 全球购物
Top Villas美国:豪华别墅出租和度假屋
2018/07/10 全球购物
爱普生美国官网:Epson美国
2018/11/05 全球购物
纪念九一八事变演讲稿:忘记意味着背叛
2014/09/14 职场文书
追悼会答谢词
2015/01/05 职场文书
社团个人总结范文
2015/03/05 职场文书
2015年勤工助学工作总结
2015/04/29 职场文书
在职证明范本
2015/06/15 职场文书
python实现自动清理文件夹旧文件
2021/05/10 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript