分卷导出思路:统计sql语句变量的长度,按1个字符当成1 字节比较,如果大于设定分卷大小,则写入一个sql文件(我也不知道这样统计是否稳当,这也是借鉴其他的人的)。
分卷导入思路:按行读取sql文件,将每一行当作完整的sql语句存到数组再循环执行插入数据库就可以了,但是在创建表语句分了多行,这个需要单独处理(就这个花了我好长时间的);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
<?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 ; } ?> |
以上所述就是本文的全部内容了,希望大家能够喜欢。