]> andersk Git - sql.git/blob - bin/backup.php
eb27cbd54c007233cc6cd3182dab38e075d03248
[sql.git] / bin / backup.php
1 #!/usr/bin/env php
2 <?php
3
4 $EXCEPTIONS[] = 'presbrey+aol';
5
6 ini_set('memory_limit', '-1');
7 set_time_limit(0);
8 ignore_user_abort(1);
9
10 define('BACKUP_RUN_STATS', 0);
11 define('BACKUP_CRON', 1);
12
13 $bin_mysql='mysql -umit-backup';// --defaults-file=/afs/athena.mit.edu/user/p/r/presbrey/web/etc/sql-mit-edu.my.cnf';
14 $bin_mysqldump='mysqldump -umit-backup';// --defaults-file=/afs/athena.mit.edu/user/p/r/presbrey/web/etc/sql-mit-edu.my.cnf';
15 $dump_path='/afs/athena.mit.edu/contrib/sql/backup';
16 //$dump_exec = "$bin_mysqldump -CefqQK --single-transaction --result-file=$dump_path/%s %s 2>&1";
17 //$dump_exec = "$bin_mysqldump -CefqQK --result-file=$dump_path/%s %s 2>&1";
18 /* great from linerva:
19 $dump_exec = "$bin_mysqldump -CefqQK %s | gzip > $dump_path/%s.sql.gz ";
20  */
21 $dump_exec = "$bin_mysqldump -efqQK %s | gzip > $dump_path/%s.sql.gz ";
22 $dump_host='localhost';
23 $dump_user='mit-backup';
24 $dump_pass='';
25 $sql_resource = mysql_connect($dump_host,$dump_user,$dump_pass);
26
27 $sql_databases = mysql_list_dbs($sql_resource);
28 $stat['nDatabases'] = mysql_num_rows($sql_databases);
29
30 @unlink("$dump_path/.skipped");
31 while($row1 = mysql_fetch_row($sql_databases)) {
32         if ($row1[0] == 'information_schema')
33                 continue;
34         if (preg_match('/[^a-z0-9\+_.-]+/i', $row1[0])) {
35                 $f = fopen("$dump_path/.skipped",'w');
36                 fwrite($f, "{$row1[0]}\n");
37                 fclose($f);
38         }
39         $databases[$row1[0]]['name'] = $row1[0];
40 }
41
42 $i_database = 1;
43 $time[1][0] = microtime(true);
44 foreach($databases as $name=>$info) {
45         if (in_array($name, $EXCEPTIONS)) {
46                 if (!BACKUP_CRON)
47                         printf('Skipping EXCEPTIONed database: %s', $name);
48                 continue;
49         }
50         if (stristr($name,'+')) {
51                 $owner = array_shift(explode('+',$name)).'/';
52                 @mkdir("$dump_path/$owner");
53                 `fs sa $dump_path/$owner $owner rl 2>/dev/null`;
54                 `fs sa $dump_path/$owner system:authuser none`;
55         } else {
56                 $owner = 'root/';
57                 @mkdir("$dump_path/$owner");
58                 `fs sa $dump_path/$owner system:authuser none`;
59                 `fs sa $dump_path/$owner system:sql-backup none`;
60         }
61         $exec = sprintf($dump_exec, $name, $owner.$name);
62
63         if ($owner!='root' && file_exists("$dump_path/$owner$name.sql.gz")) {
64                 if (!BACKUP_CRON)
65                         printf("Saving old dump file: %s\n",
66                         "$dump_path/$owner$name.sql.gz");
67                 rename("$dump_path/$owner$name.sql.gz","$dump_path/OLD/$name.sql.gz");
68         }
69
70         if (!BACKUP_CRON)
71                 printf("Dumping %d of %d / %d%% (%s):\n",
72                 $i_database,
73                 $stat['nDatabases'],
74                 $i_database/$stat['nDatabases']*100,
75                 $name);
76         //printf("Executing $exec\n");
77
78         $time[$name][0] = microtime(true);
79         $dump_proc = popen($exec, 'r');
80         while(!feof($dump_proc))
81                 echo fread($dump_proc, 1024);
82         pclose($dump_proc);
83         $time[$name][1] = microtime(true);
84
85         if (!BACKUP_CRON)
86                 printf("\n");
87
88         $i_database++;
89 }
90 $time[1][1] = microtime(true);
91
92 if (!BACKUP_CRON)
93         printf("Finished.\n%s seconds.\n", $time[1][1]-$time[1][0]);
94
95 ?>
This page took 0.116443 seconds and 3 git commands to generate.