summaryrefslogtreecommitdiff
path: root/scripts/mysqlhotcopy.sh
diff options
context:
space:
mode:
authorAlexey Botchkov <holyfoot@mysql.com>2010-02-28 23:49:29 +0400
committerAlexey Botchkov <holyfoot@mysql.com>2010-02-28 23:49:29 +0400
commita8d2da233644af86f7f60ffd8bcf71f4fdba1719 (patch)
tree6cbf61af172a10eddf7d0711c535246da75c7ea8 /scripts/mysqlhotcopy.sh
parent9b705237b6c95ee81303e9a86c8ced9c56ddaaf7 (diff)
downloadmariadb-git-a8d2da233644af86f7f60ffd8bcf71f4fdba1719.tar.gz
Bug#42465 mysqlhotcopy fails with "Table '<y>' was locked with a READ lock" error message.
Since 5.5 FLUSH TABLES requires unlocked tables so the old LOCK TABLES/FLUSH TABLES model fails. Use atomic FLUSH TABLES WITH READ LOCK instead. per-file comments: scripts/mysqlhotcopy.sh Bug#42465 mysqlhotcopy fails with "Table '<y>' was locked with a READ lock" error message. Use FLUSH TABLES WITH READ LOCK instead of LOCK TABLES / FLUSH TABLES pair. Keep the old scheme for older servers.
Diffstat (limited to 'scripts/mysqlhotcopy.sh')
-rw-r--r--scripts/mysqlhotcopy.sh39
1 files changed, 31 insertions, 8 deletions
diff --git a/scripts/mysqlhotcopy.sh b/scripts/mysqlhotcopy.sh
index 21fca0c0848..90f759739d0 100644
--- a/scripts/mysqlhotcopy.sh
+++ b/scripts/mysqlhotcopy.sh
@@ -56,6 +56,8 @@ Usage: $0 db_name[./table_regex/] [new_db_name | directory]
-h, --host=# hostname for local server when connecting over TCP/IP
-P, --port=# port to use when connecting to local server with TCP/IP
-S, --socket=# socket to use when connecting to local server
+ --old_server connect to old MySQL-server (before v5.5) which
+ doesn't have FLUSH TABLES WITH READ LOCK fully implemented.
--allowold don\'t abort if target dir already exists (rename it _old)
--addtodest don\'t rename target dir if it exists, just add files to it
@@ -103,6 +105,7 @@ GetOptions( \%opt,
"password|p=s",
"port|P=s",
"socket|S=s",
+ "old_server",
"allowold!",
"keepold!",
"addtodest!",
@@ -441,21 +444,37 @@ if ( $opt{checkpoint} || $opt{record_log_pos} ) {
my $hc_started = time; # count from time lock is granted
if ( $opt{dryrun} ) {
- print "LOCK TABLES $hc_locks\n";
- print "FLUSH TABLES /*!32323 $hc_tables */\n";
+ if ( $opt{old_server} ) {
+ print "LOCK TABLES $hc_locks\n";
+ print "FLUSH TABLES /*!32323 $hc_tables */\n";
+ }
+ else {
+ print "FLUSH TABLES $hc_tables WITH READ LOCK\n";
+ }
+
print "FLUSH LOGS\n" if ( $opt{flushlog} );
print "RESET MASTER\n" if ( $opt{resetmaster} );
print "RESET SLAVE\n" if ( $opt{resetslave} );
}
else {
my $start = time;
- $dbh->do("LOCK TABLES $hc_locks");
- printf "Locked $num_tables tables in %d seconds.\n", time-$start unless $opt{quiet};
- $hc_started = time; # count from time lock is granted
+ if ( $opt{old_server} ) {
+ $dbh->do("LOCK TABLES $hc_locks");
+ printf "Locked $num_tables tables in %d seconds.\n", time-$start unless $opt{quiet};
+ $hc_started = time; # count from time lock is granted
+
+ # flush tables to make on-disk copy up to date
+ $start = time;
+ $dbh->do("FLUSH TABLES /*!32323 $hc_tables */");
+ }
+ else {
+ $dbh->do("FLUSH TABLES $hc_tables WITH READ LOCK");
+ printf "Locked $num_tables tables in %d seconds.\n", time-$start unless $opt{quiet};
+ $hc_started = time; # count from time lock is granted
- # flush tables to make on-disk copy up to date
- $start = time;
- $dbh->do("FLUSH TABLES /*!32323 $hc_tables */");
+ # flush tables to make on-disk copy up to date
+ $start = time;
+ }
printf "Flushed tables ($hc_tables) in %d seconds.\n", time-$start unless $opt{quiet};
$dbh->do( "FLUSH LOGS" ) if ( $opt{flushlog} );
$dbh->do( "RESET MASTER" ) if ( $opt{resetmaster} );
@@ -975,6 +994,10 @@ when using the --host option.
UNIX domain socket to use when connecting to local server.
+=item --old_server
+
+Use old server (pre v5.5) commands.
+
=item --noindices
Don\'t include index files in copy. Only up to the first 2048 bytes