#!/usr/bin/perl -w =pod USE test; CREATE TABLE data ( id INTEGER NOT NULL AUTO_INCREMENT, value CHAR(30), count INTEGER, PRIMARY KEY (value), KEY (id) ); =cut use DBI; my $host = "dev"; my $dbname = "test"; my $table = "data"; my $user = "galera"; my $pass = "password"; foreach $i ( 0..99 ) { my $backoff = 0.1; # exponential backoff, in seconds TRY: eval { my $dbh = DBI->connect("DBI:mysql:$dbname:$host", $user, $pass, {PrintError => 0}) or die "Can't connect to DBI:mysql:$dbname:$host: ".$DBI::errstr; # Which database have we connected to? my $sql = "SHOW VARIABLES WHERE Variable_name = 'hostname';"; my $q = $dbh->prepare($sql) or die "Can't prepare '$sql': ".$dbh->errstr; $q->execute or die "Can't execute '$sql': ".$q->errstr; # Only expect one row, with key 'hostname', value thehostname @row = $q->fetchrow_array(); $upstream = $row[1]; $q->finish; # Add a row: value = "value-$i", count = 1; increment count on duplicate adds $value = sprintf "value-%03d", $i; $sql = "INSERT INTO $table (value, count) VALUES ( '$value', 1 ) ON DUPLICATE KEY UPDATE count=count+1"; $q = $dbh->prepare($sql) or die "Can't prepare '$sql': ".$dbh->errstr; $q->execute or die "Can't execute '$sql': ".$q->errstr; $q->finish; # print "$upstream\n"; } or do { print "Failed: $@"; select( undef, undef, undef, $backoff ); $backoff *= 1.5; goto TRY; }; }