From 9d709d636785aa32aaa1b2ddd5395835f6e4acc5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Elan=20Ruusam=C3=A4e?= Date: Fri, 20 Dec 2013 14:57:26 +0200 Subject: [PATCH] fix for mysqlhotcopy failing to backup databases with dash --- bug-44278.patch | 180 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 180 insertions(+) create mode 100644 bug-44278.patch diff --git a/bug-44278.patch b/bug-44278.patch new file mode 100644 index 0000000..f8371b0 --- /dev/null +++ b/bug-44278.patch @@ -0,0 +1,180 @@ +http://bugs.mysql.com/bug.php?id=44278 +http://lists.mysql.com/commits/80079?f=plain + +From: Jim Winstead +Date: August 4 2009 7:00pm +Subject: bzr commit into mysql-5.1-bugteam branch (jimw:3055) Bug#44278 +List-Archive: http://lists.mysql.com/commits/80079 +X-Bug: 44278 +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="===============1792034184==" + +--===============1792034184== +MIME-Version: 1.0 +Content-Type: text/plain; charset="us-ascii" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +#At file:///Users/jimw/my/mysql-5.1-fixes/ based on revid:jimw@stripped + + 3055 Jim Winstead 2009-08-04 + mysqlhotcopy did not handle the encoding of schema names in the filesystem, so + schemas with most non-alphanumeric characters in their name could not be + backed up. (Bug #44278). + + modified: + scripts/mysqlhotcopy.sh +=== modified file 'scripts/mysqlhotcopy.sh' +--- a/scripts/mysqlhotcopy.sh 2009-04-28 16:16:17 +0000 ++++ b/scripts/mysqlhotcopy.sh 2009-08-04 18:57:34 +0000 +@@ -222,7 +222,7 @@ my ($tgt_dirname, $to_other_database); + $to_other_database=0; + if (defined($tgt_name) && $tgt_name =~ m:^\w+$: && @db_desc <= 1) + { +- $tgt_dirname = "$datadir/$tgt_name"; ++ $tgt_dirname = "$datadir/" . encode_identifier_as_filename($tgt_name); + $to_other_database=1; + } + elsif (defined($tgt_name) && ($tgt_name =~ m:/: || $tgt_name eq '.')) { +@@ -285,7 +285,7 @@ foreach my $rdb ( @db_desc ) { + } + + ## get list of files to copy +- my $db_dir = "$datadir/$db"; ++ my $db_dir = "$datadir/" . encode_identifier_as_filename($db); + opendir(DBDIR, $db_dir ) + or die "Cannot open dir '$db_dir': $!"; + +@@ -353,7 +353,8 @@ if (defined($tgt_name) && length $tgt_na + elsif ($opt{method} =~ /^scp\b/) + { # we have to trust scp to hit the target + foreach my $rdb ( @db_desc ) { +- $rdb->{target} = "$tgt_dirname/$rdb->{src}"; ++ $rdb->{target} = "$tgt_dirname/" . ++ encode_identifier_as_filename($rdb->{src}); + } + } + else +@@ -361,7 +362,8 @@ if (defined($tgt_name) && length $tgt_na + die "Last argument ($tgt_dirname) is not a directory\n" + if (!(-e $tgt_dirname && -d $tgt_dirname ) ); + foreach my $rdb ( @db_desc ) { +- $rdb->{target} = "$tgt_dirname/$rdb->{src}"; ++ $rdb->{target} = "$tgt_dirname/" . ++ encode_identifier_as_filename($rdb->{src}); + } + } + } +@@ -369,7 +371,8 @@ else { + die "Error: expected \$opt{suffix} to exist" unless ( exists $opt{suffix} ); + + foreach my $rdb ( @db_desc ) { +- $rdb->{target} = "$datadir/$rdb->{src}$opt{suffix}"; ++ $rdb->{target} = "$datadir/" . ++ encode_identifier_as_filename("$rdb->{src}$opt{suffix}"); + } + } + +@@ -414,7 +417,8 @@ foreach my $rdb ( @db_desc ) { + unless -d $tgt_dirpath; + if ($^O !~ m/^(NetWare)$/) + { +- my @f_info= stat "$datadir/$rdb->{src}"; ++ my @f_info= stat "$datadir/" . ++ encode_identifier_as_filename($rdb->{src}); + chown $f_info[4], $f_info[5], $tgt_dirpath; + } + } +@@ -471,7 +475,9 @@ my @failed = (); + + foreach my $rdb ( @db_desc ) + { +- my @files = map { "$datadir/$rdb->{src}/$_" } @{$rdb->{files}}; ++ my @files = map { "$datadir/" . ++ encode_identifier_as_filename($rdb->{src}) . ++ "/$_" } @{$rdb->{files}}; + next unless @files; + + eval { copy_files($opt{method}, \@files, $rdb->{target}); }; +@@ -482,7 +488,8 @@ foreach my $rdb ( @db_desc ) + if ($rdb->{index}) + { + copy_index($opt{method}, \@files, +- "$datadir/$rdb->{src}", $rdb->{target} ); ++ "$datadir/" . encode_identifier_as_filename($rdb->{src}), ++ $rdb->{target} ); + } + + if ( $opt{checkpoint} ) { +@@ -794,6 +801,20 @@ sub quote_names { + return "`$db`.`$table`"; + } + ++# ++# In MySQL 5.1 and later, directory and table names are encoded on disk. ++# We use the server to figure out the encoded names, and just fall back ++# to the unencoded identifier if that fails. ++# ++sub encode_identifier_as_filename { ++ my ($ident)= @_; ++ my ($filename)= $dbh->selectrow_array( ++ "SELECT BINARY(CAST(? AS CHAR CHARACTER SET FILENAME))", ++ { RaiseError => 0 }, ++ $ident); ++ return $filename ? $filename : $ident; ++} ++ + __END__ + + =head1 DESCRIPTION + + +--===============1792034184== +MIME-Version: 1.0 +Content-Type: text/bzr-bundle; charset="us-ascii"; + name="bzr/jimw@stripped" +Content-Transfer-Encoding: 7bit +Content-Disposition: inline + +# Bazaar merge directive format 2 (Bazaar 0.90) +# revision_id: jimw@stripped +# target_branch: file:///Users/jimw/my/mysql-5.1-fixes/ +# testament_sha1: 21dd6f5b49582e2759b846d4abfe69e3f3c913d4 +# timestamp: 2009-08-04 12:00:08 -0700 +# source_branch: bzr+ssh://bk-internal.mysql.com/bzrroot/server/mysql-\ +# 5.1-bugteam/ +# base_revision_id: jimw@stripped +# +# Begin bundle +IyBCYXphYXIgcmV2aXNpb24gYnVuZGxlIHY0CiMKQlpoOTFBWSZTWVQztd0AApl/gEh4YiBdZ/// ++3c8oL////pQBe66qvPdunW5ninW21e3q7wJRCaDVPQmmNMgmCmzU1NqaG0aQaA02oZGmQSlNU/T +VPxU/SPRT9UAD1DIAAAAAyMJoA0E0mI1TANU9J6DU0eg0aajQMENPU0DPU9RGEkggTUeagAp+Knp +qYjTQGIAAA0BpoJJAjFGU9CMmkwjJmo000NGgyDQA0A0mS6qPShPOrHozAK/u3m/PNkFxceJjFUI +eeZll2Je5bSQGVrS28T/hEArxWufTLQxNx8bn6JY9QhKq5hmSWbk8FDt8mbMXN2xGG7lw8oh20qq +iGKG8LUUqtEUqKWZHY12j2jU30I406YoqJF8GPdvWIg8FXJjDZNevWm9j3HLZw4YWfCrDDhfI39Z +EiSM1RtNeUiz31sDmF/vrR8z5v3JMpqV0b4H3mDdfqoYNF987qMJVtA7p6n7vUAM89KZ54/HU6ms ++LwvhtXoUr58G5QluZGuVEPahJeoEg0FerIVxOQ3dXSYcHaIZ9sIDBciWHzTxdqLRxqKjo4WODm9 +nBsesFvCCgh+zoej50Q5NUOd7R/L1lsSPLbzuTUaIWrCoGBKLwooZpkox6kVplsWywJ7NqZs5EHC +IqA8LudPgLM5VJGEEEBEzjIkxmGA9FDqFgK4IsrvKOxQRIGcjD7EsFjKjwrq96FiiWTM5UVCZriq +RjOKRplgtmQXE0rsiIVXRApxwQVBQcCroEaQaCkQA+YD3NUzj7HyMuvYTkKwLhhy5i6LSlSVawE4 +LrLTKX8DxFgyKA7a5MRkR0BUhTdL0ww6Tx0jo1uUMbQQpt/KME26ZH6Cgs5l2Th1PL46Vrl5aVz3 +6i5i4hAhHWoMVHLSP/rGxbgrNaZivMGiGMYahyxFTZL5Z4FYERySJztqnqiRU5aBjvtLYJSSYULS +YSzSPEFtUMxWwfAgQDXDBY4xLsyLE+0pQJd4Xgb0tuLzruMJ81LKEQuarUshWziKNajVST0bjZZa +9hH1sc6oEk2qWYEPUnXb3g17q5AGF+UggTutbt/B9aRhIWaFweM7dhlWTlMON6ZFkz0YYLLa9wgN +OYspAbZJhIh8TARXdl5w5+kgExx3SPZzDo6mux8o0RYyAX5cXtfxZBIts2Fgsk3PvFIPDJkDnRY4 +xdE+37oAqlx5jnIPLtTPlfv9ZstVALN0FJcZ6fYzSfPpsvWwkRZpkL0pE2sGmmuMZVqFCBSNrxOe +1u8ZNRFYlpIJ8BUC3JVpDFZrOcFFCfLYQvgKDk1XnlNzbtoYWNnZnOdpd1xSIMNwGxvDP6DoOkw2 +pl5hM3b6mJBIIX60Y+1j4125WU3FTyoFp/jdLdXUzsrKqxVsI+qcja7ehndBBNJ+0H2QXLMZ3qBH +FAGAoUdOFHFxpvFI1G4vIl5QdjQOEJN9bCs0oCzt79cEwQIk5op3WF1axGUhk8sAXGlbb1y8g4LX +bmiyZEmcWa1wBzbEibDRjWTHw3CuUnINoRQfEcIfObkg0dkT7iLVyBfWvL1b8bLjSBwFqXSoha4w +GdVdwlqo1+O3KfgYi29khnSZaQ4DZEJdG6UidU923t5c7+djSySpCDzzCdQ0eWuT7KGEbLE+xnqa +QQo5ZtyZppSWgyyEdcTsbr5hDdryHDkn77hxB2NugTCzTtWyDBnj0X5IITKoGnpiQUY1zrCMUAzI +i5YoaO+QH6ULHPeeCi/kclxSRySB0wmuRQWk03igk2DoEimZCIPYV11pROQDVi9rSaDLLB4ZG+ks +rCmjodJw4TAnPDgyTCzpEd+jY8Wa3Ql4yVwEw+mvRcKqor1GECCy4uyopGRgGT2R9fMShRoIHZSW +TC23tYXz4vWnmUnAZq1JRn4TU1ySuF5QqhcjNY5oOAvw31oGIRPEh0yDZQnJkgEJTyiFxgSTBqhF +xDNuWFN4M70p7ZjEPCgWvXSM7ecSZW4fFxnHuCkSbHMM7LGmd1nUgqsouO2yLVoJUt4L93iAbYH1 +V+tRCexYKb/DwJS6RC09X4Wo1vczNejREo9zZcNonSclxRzlnBsEuCY7p2aOVElUORgRVRiM773/ +F3JFOFCQVDO13Q== + + +--===============1792034184==-- -- 2.43.0