首页 > 开发 > PHP > 正文

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

2024-05-04 23:36:25
字体:
来源:转载
供稿:网友

本文给大家分享的是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. $limit=($start=='0')?'':" limit $start,$num "
  22. $query="select * from `{$table}` $limit "
  23. $result=mysql_query($query); 
  24. $numfields = mysql_num_fields($result); //统计字段数 
  25. while($row=mysql_fetch_row($result)){ 
  26. $comma = ''//存储逗号 
  27. $backupdata_tmp = "INSERT INTO `{$table}` VALUES ("
  28. for($i=0; $i<$numfields$i++){ 
  29. $backupdata_tmp .= $comma . "'" . mysql_escape_string($row[$i]) . "'"
  30. $comma = ','
  31. $backupdata_tmp .= ");/n"
  32. if(strlen($backupdata)+strlen($backupdata_tmp) > $filesize){ 
  33. //写入文件并跳转 
  34. $file='data/'.$table.'-'.$part.'.sql'
  35. file_put_contents($file,$backupdata); 
  36. echo $file.' 备份完成,程序继续进行!'
  37. $part++; 
  38. //分段 
  39. //表名 
  40. //起点 
  41. //跳转 
  42. sleep(3); 
  43. echo "<script>location.href='?start={$start}&table_index={$table_index}&part={$part}';</script>"
  44. exit
  45. $backupdata.=$backupdata_tmp
  46. $start++; 
  47. if($backupdata){ 
  48. $file='data/'.$table.'-'.$part.'.sql'
  49. file_put_contents($file,$backupdata); 
  50. echo $table.'备份完成!<br />'
  51. sleep(2); 
  52. $table_index++; 
  53. if($table_array[$table_index]){ 
  54. echo "<script>location.href='?table_index={$table_index}';</script>"
  55. exit
  56. }else
  57. echo '恭喜你,数据库备份完毕!'
  58. function get_tables($db){ 
  59. $tq = mysql_list_tables($db); 
  60. while($tr = mysql_fetch_row($tq)){ 
  61. $arrtb[] = $tr[0]; 
  62. return $arrtb
  63. ?> 

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表