From a0ac57ea8b7a665a84c5f6a178e23bc8c47a8bc4 Mon Sep 17 00:00:00 2001 From: Joe Presbrey Date: Fri, 27 Oct 2006 22:11:41 +0000 Subject: [PATCH] locker binaries git-svn-id: svn://presbrey.mit.edu/sql@119 a142d4bd-2cfb-0310-9673-cb33a7e74f58 --- bin/backup.php | 95 +++++++++++++++++++++++++++++++ bin/backup.php_OLD | 134 ++++++++++++++++++++++++++++++++++++++++++++ bin/permissions.php | 30 ++++++++++ 3 files changed, 259 insertions(+) create mode 100755 bin/backup.php create mode 100644 bin/backup.php_OLD create mode 100755 bin/permissions.php diff --git a/bin/backup.php b/bin/backup.php new file mode 100755 index 0000000..eb27cbd --- /dev/null +++ b/bin/backup.php @@ -0,0 +1,95 @@ +#!/usr/bin/env php +&1"; +//$dump_exec = "$bin_mysqldump -CefqQK --result-file=$dump_path/%s %s 2>&1"; +/* great from linerva: +$dump_exec = "$bin_mysqldump -CefqQK %s | gzip > $dump_path/%s.sql.gz "; + */ +$dump_exec = "$bin_mysqldump -efqQK %s | gzip > $dump_path/%s.sql.gz "; +$dump_host='localhost'; +$dump_user='mit-backup'; +$dump_pass=''; +$sql_resource = mysql_connect($dump_host,$dump_user,$dump_pass); + +$sql_databases = mysql_list_dbs($sql_resource); +$stat['nDatabases'] = mysql_num_rows($sql_databases); + +@unlink("$dump_path/.skipped"); +while($row1 = mysql_fetch_row($sql_databases)) { + if ($row1[0] == 'information_schema') + continue; + if (preg_match('/[^a-z0-9\+_.-]+/i', $row1[0])) { + $f = fopen("$dump_path/.skipped",'w'); + fwrite($f, "{$row1[0]}\n"); + fclose($f); + } + $databases[$row1[0]]['name'] = $row1[0]; +} + +$i_database = 1; +$time[1][0] = microtime(true); +foreach($databases as $name=>$info) { + if (in_array($name, $EXCEPTIONS)) { + if (!BACKUP_CRON) + printf('Skipping EXCEPTIONed database: %s', $name); + continue; + } + if (stristr($name,'+')) { + $owner = array_shift(explode('+',$name)).'/'; + @mkdir("$dump_path/$owner"); + `fs sa $dump_path/$owner $owner rl 2>/dev/null`; + `fs sa $dump_path/$owner system:authuser none`; + } else { + $owner = 'root/'; + @mkdir("$dump_path/$owner"); + `fs sa $dump_path/$owner system:authuser none`; + `fs sa $dump_path/$owner system:sql-backup none`; + } + $exec = sprintf($dump_exec, $name, $owner.$name); + + if ($owner!='root' && file_exists("$dump_path/$owner$name.sql.gz")) { + if (!BACKUP_CRON) + printf("Saving old dump file: %s\n", + "$dump_path/$owner$name.sql.gz"); + rename("$dump_path/$owner$name.sql.gz","$dump_path/OLD/$name.sql.gz"); + } + + if (!BACKUP_CRON) + printf("Dumping %d of %d / %d%% (%s):\n", + $i_database, + $stat['nDatabases'], + $i_database/$stat['nDatabases']*100, + $name); + //printf("Executing $exec\n"); + + $time[$name][0] = microtime(true); + $dump_proc = popen($exec, 'r'); + while(!feof($dump_proc)) + echo fread($dump_proc, 1024); + pclose($dump_proc); + $time[$name][1] = microtime(true); + + if (!BACKUP_CRON) + printf("\n"); + + $i_database++; +} +$time[1][1] = microtime(true); + +if (!BACKUP_CRON) + printf("Finished.\n%s seconds.\n", $time[1][1]-$time[1][0]); + +?> diff --git a/bin/backup.php_OLD b/bin/backup.php_OLD new file mode 100644 index 0000000..b5a3870 --- /dev/null +++ b/bin/backup.php_OLD @@ -0,0 +1,134 @@ +#!/usr/bin/env php +&1"; +//$dump_exec = "$bin_mysqldump -CefqQK --result-file=$dump_path/%s %s 2>&1"; +$dump_exec = "$bin_mysqldump -CefqQK %s | gzip > $dump_path/%s.sql.gz "; +$dump_host='localhost'; +$dump_user='mit-backup'; +$dump_pass=''; +$sql_resource = mysql_connect($dump_host,$dump_user,$dump_pass); + +$sql_databases = mysql_list_dbs($sql_resource); +$stat['nDatabases'] = mysql_num_rows($sql_databases); + +if (BACKUP_RUN_STATS): + if (!BACKUP_CRON) { + printf("Polling statistics for {$stat['nDatabases']} databases...\n"); + } + +$time[0][0] = microtime(true); +while($row1 = mysql_fetch_row($sql_databases)) { + $i_database++; + $databases[$row1[0]]['name'] = $row1[0]; + $sql_tables = mysql_query("SHOW TABLE STATUS FROM `{$row1[0]}`"); + $databases[$row1[0]]['Tables'] = mysql_num_rows($sql_tables); + while($row2 = mysql_fetch_assoc($sql_tables)) { + $databases[$row1[0]]['Rows'] += $row2['Rows']; + $databases[$row1[0]]['Data_length'] += $row2['Data_length']; + $databases[$row1[0]]['Size'] += $row2['Data_length']; + } + if ($i_database%100==0) { + if (!BACKUP_CRON) { + printf("polled $i_database databases: %d%%\n", $i_database/$stat['nDatabases']*100); + } + break; + } +} +$time[0][1] = microtime(true); + +foreach($databases as $name=>$info) { + $stat['nTables'] += $info['Tables']; + $stat['nRows'] += $info['Rows']; + $stat['nSize'] += $info['Size']; +} + +if (!BACKUP_CRON) { + printf("\nPreparing backup...\n\nDatabases:\t%d\nTables:\t\t%d\nRows:\t\t%d\nSize:\t\t%d MB\n\n", + $stat['nDatabases'], + $stat['nTables'], + $stat['nRows'], + $stat['nSize']/1024/1024); +} + +else: + +while($row1 = mysql_fetch_row($sql_databases)) { + if ($row1[0] == 'information_schema') + continue; + $databases[$row1[0]]['name'] = $row1[0]; +} + +endif; + +$i_database = 1; +$time[1][0] = microtime(true); +foreach($databases as $name=>$info) { + if (in_array($name, $EXCEPTIONS)) { + if (!BACKUP_CRON) { + printf('Skipping EXCEPTIONed database: %s', $name); + } + continue; + } + if (stristr($name,'+')) { + $owner = array_shift(explode('+',$name)).'/'; + @mkdir("$dump_path/$owner"); + `fs sa $dump_path/$owner $owner rl 2>/dev/null`; + `fs sa $dump_path/$owner system:authuser none`; + } else { + $owner = 'root/'; + @mkdir("$dump_path/$owner"); + `fs sa $dump_path/$owner system:authuser none`; + `fs sa $dump_path/$owner system:sql-backup none`; + } + $exec = sprintf($dump_exec, $name, $owner.$name); + + if (file_exists("$dump_path/$owner$name.sql.gz")) { + if (!BACKUP_CRON) { + printf("Saving old dump file: %s\n", + "$dump_path/$owner$name.sql.gz"); + } + rename("$dump_path/$owner$name.sql.gz","$dump_path/OLD/$name.sql.gz"); + } + + if (!BACKUP_CRON) { + printf("Dumping %d of %d / %d%% (%s):\n", + $i_database, + $stat['nDatabases'], + $i_database/$stat['nDatabases']*100, + $name); + } + //printf("Executing $exec\n"); + + $time[$name][0] = microtime(true); + $dump_proc = popen($exec, 'r'); + while(!feof($dump_proc)) + echo fread($dump_proc, 1024); + pclose($dump_proc); + $time[$name][1] = microtime(true); + + if (!BACKUP_CRON) { + printf("\n"); + } + + $i_database++; +} +$time[1][1] = microtime(true); + +if (!BACKUP_CRON) { + printf("Finished.\n%s seconds.\n", $time[1][1]-$time[1][0]); +} + +?> diff --git a/bin/permissions.php b/bin/permissions.php new file mode 100755 index 0000000..af410b9 --- /dev/null +++ b/bin/permissions.php @@ -0,0 +1,30 @@ +#!/usr/bin/env php +3) + $filsys_type = $filsys[3]; + else + $filsys_type = 'unknown'; + + if (!isset($logs[$filsys_type])) + $logs[$filsys_type] = fopen('.'.$filsys_type, 'w'); + + fwrite($logs[$filsys_type], "$locker\n"); + + switch($filsys_type) { + case 'user': + echo `fs sa /mit/sql/backup/$locker $locker rl`; + break; + } +} + +foreach($logs as $file) + fclose($file); -- 2.45.1