Add-db
- !/usr/bin/perl
- - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)Our Perl scripts.
- - Author: http://www.organicdesign.co.nz/nad
- - Started: 2007-08-25
$user = 'dbuser'; $pwd = 'dbpasswd'; $tmp = '/tmp/replicate-db';
- Display usage info and die if too few or no parameters supplied
die " Replicate a mediawiki SQL database dump to many databases and prefixes.
Usage: replicate-db TEMPLATE DB1.PREFIX1 [DB2.]PREFIX2 [DB3.]PREFIX3... Where, TEMPLATE is the name of the SQL dump file to use as the template.
DB*.PREFIX* are the databases to replicate the template into and the table prefixes to use (prefixes are mandatory).
Notes: - The database dump being used as a template should only contain one wiki. - It should not include create or drop database statements. - The destination databases must already exist - The destination tables will be replaced if they exist - The DB part is optional for all but the first and means to continue using the previous database. " unless $#ARGV > 0 and $ARGV[1] =~ /^\w+\.\w+$/;
- Read in the template file
$file = shift @ARGV; if (open FH,'<',$file) { sysread FH,$template,-s $file; close FH; } else { die " Could not read template file '$file' " }
- Find the prefix (if any) being used in the template and prepare for use in replacement regexp
die " The template file supplied is not a valid wiki dump " unless $template =~ /^CREATE TABLE `(\w*)recentchanges`/m; $prefix = qr($1);
- Main replication loop
for (@$ARGV) {
# Determine the database and prefix to replicate template into if (/^(\w+)\.(\w+)$/) { ($db,$pre) = ($1,$2) } else { $pre = $_ } $pre .= '_' unless $pre =~ /_$/;
# Make a duplicate of the template modified to the current prefix $data = $template; $data =~ s/$prefix/$pre/g;
# Write the duplicate into a tmp file if (open FH,'>',$tmp) { print FH $data; close FH } else { print "Could not write data for wiki $db.$pre to '$tmp'\n" }
# Pipe the file into MySQL and remove the tmp file qx(mysql -u $user -p $pwd < $tmp); if ($!) { print "Error creating wiki $db.$pre: $!\n" } else { print "Wiki $db.$pre created.\n" } unlink $tmp; }