]> andersk Git - sql.git/blame - libexec/afs-run-backup.php
more old code
[sql.git] / libexec / afs-run-backup.php
CommitLineData
a0ac57ea
JP
1#!/usr/bin/env php
2<?php
3
d978d005
JP
4$EXCEPTIONS = explode("\n",file_get_contents('/mit/sql/etc/db_no-daily-backup'));
5$EXCEPTIONS = array_filter($EXCEPTIONS, 'strlen');
a0ac57ea
JP
6
7ini_set('memory_limit', '-1');
8set_time_limit(0);
9ignore_user_abort(1);
10
11define('BACKUP_RUN_STATS', 0);
12define('BACKUP_CRON', 1);
13
d978d005
JP
14$bin_mysql='mysql -umit-backup';
15$bin_mysqldump='mysqldump -umit-backup';
a0ac57ea 16$dump_path='/afs/athena.mit.edu/contrib/sql/backup';
d978d005 17$partition_path='/afs/athena.mit.edu/contrib/sql/.backup';
a0ac57ea 18$dump_exec = "$bin_mysqldump -efqQK %s | gzip > $dump_path/%s.sql.gz ";
4c1ceb1a 19$dump_host=':/srv/mysql/mysql.sock';
a0ac57ea
JP
20$dump_user='mit-backup';
21$dump_pass='';
22$sql_resource = mysql_connect($dump_host,$dump_user,$dump_pass);
23
24$sql_databases = mysql_list_dbs($sql_resource);
25$stat['nDatabases'] = mysql_num_rows($sql_databases);
26
d978d005 27@unlink("$partition_path/skipped");
a0ac57ea
JP
28while($row1 = mysql_fetch_row($sql_databases)) {
29 if ($row1[0] == 'information_schema')
30 continue;
31 if (preg_match('/[^a-z0-9\+_.-]+/i', $row1[0])) {
d978d005 32 $f = fopen("$partition_path/skipped",'a');
a0ac57ea
JP
33 fwrite($f, "{$row1[0]}\n");
34 fclose($f);
35 }
36 $databases[$row1[0]]['name'] = $row1[0];
37}
38
39$i_database = 1;
40$time[1][0] = microtime(true);
41foreach($databases as $name=>$info) {
42 if (in_array($name, $EXCEPTIONS)) {
43 if (!BACKUP_CRON)
d978d005 44 printf("Skipping database: %s\n", $name);
a0ac57ea 45 continue;
d978d005
JP
46 } else {
47 if (!BACKUP_CRON)
48 printf("Dumping database: %s\n", $name);
a0ac57ea
JP
49 }
50 if (stristr($name,'+')) {
d978d005 51 $owner = array_shift(explode('+',$name));
a0ac57ea 52 } else {
d978d005 53 $owner = 'root';
a0ac57ea 54 }
f3e7245a 55 $ownerl = strtolower($owner);
d978d005 56 if (!is_link($dump_path.'/'.$owner)) {
f3e7245a 57 symlink($partition_path.'/'.substr($ownerl,0,1).'/'.$owner, $dump_path.'/'.$owner);
d978d005
JP
58 }
59 if (!is_dir(readlink($dump_path.'/'.$owner))) {
60 mkdir(readlink($dump_path.'/'.$owner));
61 }
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`;
66 }
67 $exec = sprintf($dump_exec, $name, $owner.'/'.$name);
a0ac57ea
JP
68 if (!BACKUP_CRON)
69 printf("Dumping %d of %d / %d%% (%s):\n",
70 $i_database,
71 $stat['nDatabases'],
72 $i_database/$stat['nDatabases']*100,
73 $name);
a0ac57ea
JP
74
75 $time[$name][0] = microtime(true);
76 $dump_proc = popen($exec, 'r');
77 while(!feof($dump_proc))
78 echo fread($dump_proc, 1024);
79 pclose($dump_proc);
80 $time[$name][1] = microtime(true);
81
82 if (!BACKUP_CRON)
83 printf("\n");
84
85 $i_database++;
86}
87$time[1][1] = microtime(true);
88
89if (!BACKUP_CRON)
90 printf("Finished.\n%s seconds.\n", $time[1][1]-$time[1][0]);
91
92?>
This page took 0.064651 seconds and 5 git commands to generate.