4 $EXCEPTIONS = explode("\n",file_get_contents('/mit/sql/etc/db_no-daily-backup'));
5 $EXCEPTIONS = array_filter($EXCEPTIONS, 'strlen');
7 ini_set('memory_limit', '-1');
11 define('BACKUP_RUN_STATS', 0);
12 define('BACKUP_CRON', 1);
14 $bin_mysql='mysql -umit-backup';
15 $bin_mysqldump='mysqldump -umit-backup';
16 $dump_path='/afs/athena.mit.edu/contrib/sql/backup';
17 $partition_path='/afs/athena.mit.edu/contrib/sql/.backup';
18 $dump_exec = "$bin_mysqldump -efqQK %s | gzip > $dump_path/%s.sql.gz ";
19 $dump_host=':/srv/mysql/mysql.sock';
20 $dump_user='mit-backup';
22 $sql_resource = mysql_connect($dump_host,$dump_user,$dump_pass);
24 $sql_databases = mysql_list_dbs($sql_resource);
25 $stat['nDatabases'] = mysql_num_rows($sql_databases);
27 @unlink("$partition_path/skipped");
28 while($row1 = mysql_fetch_row($sql_databases)) {
29 if ($row1[0] == 'information_schema')
31 if (preg_match('/[^a-z0-9\+_.-]+/i', $row1[0])) {
32 $f = fopen("$partition_path/skipped",'a');
33 fwrite($f, "{$row1[0]}\n");
36 $databases[$row1[0]]['name'] = $row1[0];
40 $time[1][0] = microtime(true);
41 foreach($databases as $name=>$info) {
42 if (in_array($name, $EXCEPTIONS)) {
44 printf("Skipping database: %s\n", $name);
48 printf("Dumping database: %s\n", $name);
50 if (stristr($name,'+')) {
51 $owner = array_shift(explode('+',$name));
55 $ownerl = strtolower($owner);
56 if (!is_link($dump_path.'/'.$owner)) {
57 symlink($partition_path.'/'.substr($ownerl,0,1).'/'.$owner, $dump_path.'/'.$owner);
59 if (!is_dir(readlink($dump_path.'/'.$owner))) {
60 mkdir(readlink($dump_path.'/'.$owner));
62 `fs sa $dump_path/$owner/ system:anyuser none`;
63 `fs sa $dump_path/$owner/ system:authuser none`;
64 if ($owner == 'root') {
65 `fs sa $dump_path/$owner/ system:sql-backup none`;
67 $exec = sprintf($dump_exec, $name, $owner.'/'.$name);
69 printf("Dumping %d of %d / %d%% (%s):\n",
72 $i_database/$stat['nDatabases']*100,
75 $time[$name][0] = microtime(true);
76 $dump_proc = popen($exec, 'r');
77 while(!feof($dump_proc))
78 echo fread($dump_proc, 1024);
80 $time[$name][1] = microtime(true);
87 $time[1][1] = microtime(true);
90 printf("Finished.\n%s seconds.\n", $time[1][1]-$time[1][0]);