Pruneterrain.php
From OpenSimulator
(Difference between revisions)
m (Removed 'Template:' prefix from template includings and/or changed external-link into internal-link) |
m (Robot: Cosmetic changes) |
||
Line 3: | Line 3: | ||
<br /> | <br /> | ||
− | ==Description== | + | == Description == |
Currently, the terrain revision table in the mysql database gets too big after a while(more than 1gb is no exception), so backups slow down greatly. This script prunes the revisions per region, thus limiting the maximum space which this table occupies. | Currently, the terrain revision table in the mysql database gets too big after a while(more than 1gb is no exception), so backups slow down greatly. This script prunes the revisions per region, thus limiting the maximum space which this table occupies. | ||
− | ==Usage== | + | == Usage == |
Save the script in your scripts directory, make it executable(chmod +x) and fire up like: | Save the script in your scripts directory, make it executable(chmod +x) and fire up like: | ||
./pruneterrain.php sqlhostname sqluser sqlpw sqldb prunelimit | ./pruneterrain.php sqlhostname sqluser sqlpw sqldb prunelimit | ||
The prunelimit cuts off every revision after the amount you give(1-x). | The prunelimit cuts off every revision after the amount you give(1-x). | ||
− | ==Souce== | + | == Souce == |
<source lang="php"> | <source lang="php"> | ||
#!/usr/bin/php | #!/usr/bin/php |
Latest revision as of 20:01, 3 March 2012
[edit] Description
Currently, the terrain revision table in the mysql database gets too big after a while(more than 1gb is no exception), so backups slow down greatly. This script prunes the revisions per region, thus limiting the maximum space which this table occupies.
[edit] Usage
Save the script in your scripts directory, make it executable(chmod +x) and fire up like:
./pruneterrain.php sqlhostname sqluser sqlpw sqldb prunelimit
The prunelimit cuts off every revision after the amount you give(1-x).
[edit] Souce
#!/usr/bin/php <?php //First do some basic parameter checking if (sizeof($argv)!=6) { echo "\nInvalid amount of parameters!\nUsage:".$argv[0]." host user pw db limit\n"; die; } else { foreach($argv as $arg){ if(empty($arg)){ echo "\nInvalid parameter input!\nUsage:".$argv[0]." host user pw db limit\n"; die; } } $host = $argv[1]; $username = $argv[2]; $password = $argv[3]; $database = $argv[4]; if(intval($argv[5]) > 0) { $prunelimit = $argv[5]; } else { echo "Enter a valid Prune-limit!(> 1). You don't want to loose your work do you?\n"; die; } } $connect = mysql_connect($host, $username, $password); if (!$connect) { die('Could not connect: ' . mysql_error()); } mysql_select_db($database); //Get unique regions from terrain table $query = "SELECT uuid,regionName from regions"; $result = mysql_query($query); if(!$result) die("Query Failed."); //For every unique Region $tempspace = 0; $space = 0; while ($row = mysql_fetch_assoc($result)) { $query = "SELECT RegionUUID,Revision from terrain WHERE RegionUUID = '".ereg_replace("-", "", $row['uuid'])."' ORDER BY Revision DESC"; $nextresult = mysql_query($query); //Get the amount of revisions $revnum = mysql_num_rows($nextresult); //If revision amount exceeds the prune-limit if($revnum > $prunelimit) { $tempspace = (($revnum - $prunelimit) / 2); echo "Freeing ".$tempspace."MB of data from ".$row['regionName']."\n"; mysql_data_seek($nextresult, ($prunelimit)); if($lastrow = mysql_fetch_assoc($nextresult)) { $query = "DELETE FROM terrain WHERE Revision <= '".$lastrow['Revision']."'"; mysql_query($query) or die (mysql_error()); $space += $tempspace; } } } echo "Totally removed ".$space."MB of terrain-revision data...\n"; mysql_close($connect); ?>