Difference between revisions of "Add-db"
(take a bit of the manual labour out of replicating a template many times) |
m |
||
Line 11: | Line 11: | ||
die " | die " | ||
Replicate a mediawiki SQL database dump to many databases and prefixes. | Replicate a mediawiki SQL database dump to many databases and prefixes. | ||
− | |||
− | |||
− | |||
− | |||
Usage: | Usage: | ||
Line 21: | Line 17: | ||
TEMPLATE is the name of the SQL dump file to use as the template. | 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). The DB part is optional for all but the first and means to continue using the previous database. | + | 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+$/; | " unless $#ARGV > 0 and $ARGV[1] =~ /^\w+\.\w+$/; | ||
Revision as of 11:53, 25 August 2007
- !/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; }