ljr/local/bin/ljr-tools/mysql-convert-storable.pl

54 lines
1.5 KiB
Perl
Executable File

#!/usr/bin/perl -w
#
# converts s1usercache and s1stylecache blob fields
# which store Storable::freeze data from ::freeze to ::nfreeze
#
# 14oct07 petya@nigilist.ru
# initial revision
#
sub convert {
my ($dbh, $table, $unique, $field) = @_;
print "convert $table.$field ($unique)\n";
my $sql = "select * from $table;";
my $sth = $dbh->prepare($sql) or die "preparing: ", $dbh->errstr;
$sth->execute or die "executing: ", $dbh->errstr;
while (my $row = $sth->fetchrow_hashref) {
if ($row->{"$field"}) {
my $obj = Storable::thaw($row->{"$field"});
if ($obj) {
print $row->{"$unique"} . "\n";
$dbh->do("UPDATE $table SET $field=? WHERE $unique=?", undef,
Storable::nfreeze($obj), $row->{"$unique"}) ||
die "Error updating $table. Unique id: " . $row->{"$unique"} . "\n";
}
}
}
print "\n";
}
use strict;
use DBI;
use Storable;
$ENV{'LJHOME'} = "/home/lj-admin";
do $ENV{'LJHOME'} . "/lj/cgi-bin/ljconfig.pl";
my $host = $LJ::DBINFO{'master'}->{'host'};
my $user = $LJ::DBINFO{'master'}->{'user'};
my $pwd = $LJ::DBINFO{'master'}->{'pass'};
my $db = "prod_livejournal";
$| = 1; # turn off buffered output
# connect to the database.
my $dbh = DBI->connect( "DBI:mysql:mysql_socket=/tmp/mysql.sock;hostname=$host;port=3306;database=$db", $user, $pwd)
or die "Connecting : $DBI::errstr\n ";
#convert ($dbh, "s1stylecache", "styleid", "vars_stor");
#convert ($dbh, "s1usercache", "userid", "color_stor");
#convert ($dbh, "s1usercache", "userid", "override_stor");