作者 邓超

备份数据

@@ -37,21 +37,28 @@ foreach ($tables as $table){ @@ -37,21 +37,28 @@ foreach ($tables as $table){
37 37
38 $p = 0; 38 $p = 0;
39 $limit = 1000; 39 $limit = 1000;
  40 + $totalBackupCount = 0;
40 while (1){ 41 while (1){
41 echo "正在备份数据 当前 $p\r"; 42 echo "正在备份数据 当前 $p\r";
42 $lists = db()->all("select * from `{$table}` limit {$limit} offset ".($p*$limit)); 43 $lists = db()->all("select * from `{$table}` limit {$limit} offset ".($p*$limit));
43 if($lists){ 44 if($lists){
44 - foreach ($lists as $list)  
45 - file_put_contents($datafile,json_encode($list,true),FILE_APPEND); 45 + $backupCount = 0;
  46 + foreach ($lists as $list) {
  47 + // 每行一个独立的JSON对象,添加换行符以便恢复时正确解析
  48 + file_put_contents($datafile, json_encode($list, JSON_UNESCAPED_UNICODE) . "\n", FILE_APPEND | LOCK_EX);
  49 + $backupCount++;
  50 + $totalBackupCount++;
  51 + }
  52 + // 如果当前页数据少于限制数量,说明已经是最后一页
  53 + if ($backupCount < $limit) {
  54 + break;
  55 + }
46 }else{ 56 }else{
47 break; 57 break;
48 } 58 }
49 $p++; 59 $p++;
50 -  
51 } 60 }
52 61
53 - echo "\n"; 62 + echo "{$table} 备份完成,共 {$totalBackupCount} 条记录\n";
54 63
55 } 64 }
56 -  
57 -