当前位置:Gxlcms > PHP教程 > php实现mysql数据库分表分段备份_php实例

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

时间:2021-07-01 10:21:17 帮助过:26人阅读

分卷导出思路:统计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 "";
  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 "";
  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. ?>

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

人气教程排行