]>
Commit | Line | Data |
---|---|---|
a0ac57ea JP |
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 "; | |
4c1ceb1a | 22 | $dump_host=':/srv/mysql/mysql.sock'; |
a0ac57ea JP |
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 | ?> |