当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-28 21:31:19 浏览: 评论:0 

本文给大家分享的是php实现mysql数据库分卷备份,选择表进行备份,实现单个sql文件及分卷sql导入,有需要的小伙伴可以参考下。

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

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

  1. <?php 
  2. //宋正河 转载请注明出处 
  3. set_time_limit(0); 
  4. header('content-type:text/html;charset=utf-8'); 
  5. mysql_connect('localhost','root','root'); 
  6. mysql_select_db('test'); 
  7. $table_array=get_tables('test'); 
  8. mysql_query('set names utf8'); 
  9. $filesize=1024*1024*4; 
  10. $start=$_GET['start']?$_GET['start']:0; 
  11. $part=$_GET['part']?$_GET['part']:'1'; 
  12. $table_index=$_GET['table_index']?$_GET['table_index']:'0'; 
  13. $table=$table_array[$table_index]; 
  14. $num=200000000;//这个数要足够大,可以是总记录数 
  15. $backupdata=''; 
  16. if($start=='0'){ 
  17. $query="SHOW CREATE TABLE `{$table}`"; 
  18. $result = mysql_query($query); 
  19. $row = mysql_fetch_row($result); 
  20. $backupdata .= "DROP TABLE IF EXISTS `{$table}`;\n" . $row[1] . ";\n\n"; 
  21. } 
  22. $limit=($start=='0')?'':" limit $start,$num "; 
  23. $query="select * from `{$table}` $limit "; 
  24. $result=mysql_query($query); 
  25. $numfields = mysql_num_fields($result); //统计字段数 
  26. while($row=mysql_fetch_row($result)){ 
  27. $comma = ''; //存储逗号 
  28. $backupdata_tmp = "INSERT INTO `{$table}` VALUES ("; 
  29. for($i=0; $i<$numfields; $i++){ 
  30. $backupdata_tmp .= $comma . "'" . mysql_escape_string($row[$i]) . "'"; 
  31. $comma = ','; 
  32. } 
  33. $backupdata_tmp .= ");\n"; 
  34. if(strlen($backupdata)+strlen($backupdata_tmp) > $filesize){ 
  35. //写入文件并跳转 
  36. $file='data/'.$table.'-'.$part.'.sql'; 
  37. file_put_contents($file,$backupdata); 
  38. echo $file.' 备份完成,程序继续进行!'; 
  39. $part++; 
  40. //分段 
  41. //表名 
  42. //起点 
  43. //跳转 
  44. sleep(3); 
  45. echo "<script>location.href='?start={$start}&table_index={$table_index}&part={$part}';</script>"; 
  46. exit; 
  47. } 
  48. $backupdata.=$backupdata_tmp; 
  49. $start++; 
  50. } 
  51. if($backupdata){ 
  52. $file='data/'.$table.'-'.$part.'.sql'; 
  53. file_put_contents($file,$backupdata); 
  54. } 
  55. echo $table.'备份完成!<br />'; 
  56. sleep(2); 
  57. $table_index++; 
  58. if($table_array[$table_index]){ 
  59. echo "<script>location.href='?table_index={$table_index}';</script>"; 
  60. exit; 
  61. }else{ 
  62. echo '恭喜你,数据库备份完毕!'; 
  63. } 
  64. function get_tables($db){ 
  65. $tq = mysql_list_tables($db); 
  66. while($tr = mysql_fetch_row($tq)){ 
  67. $arrtb[] = $tr[0]; 
  68. } 
  69. return $arrtb; 
  70. } 
  71. ?> 

以上所述就是本文的全部内容了,希望大家能够喜欢。

Tags: mysql数据库分表

分享到: