Difference between revisions of "Add-db"

From Organic Design wiki
m
m (lc)
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
#!/usr/bin/perl
+
{{lowercase}}{{svn|tools|add-db}}
# - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html){{perl}}{{Category:OD2}}
 
# - 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;
 
}
 

Latest revision as of 05:02, 30 May 2009

Info.svg This code is in our Git repository here.

Note: If there is no information in this page about this code and it's a MediaWiki extension, there may be something at mediawiki.org.