[packages/mysql] fix for mysqlhotcopy failing to backup databases with dash

glen glen at pld-linux.org
Sun Dec 22 16:29:39 CET 2013


commit 9d709d636785aa32aaa1b2ddd5395835f6e4acc5
Author: Elan Ruusamäe <glen at delfi.ee>
Date:   Fri Dec 20 14:57:26 2013 +0200

    fix for mysqlhotcopy failing to backup databases with dash

 bug-44278.patch | 180 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 180 insertions(+)
---
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 at 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 at stripped"
+Content-Transfer-Encoding: 7bit
+Content-Disposition: inline
+
+# Bazaar merge directive format 2 (Bazaar 0.90)
+# revision_id: jimw at 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 at stripped
+# 
+# Begin bundle
+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
+F3JFOFCQVDO13Q==
+
+
+--===============1792034184==--
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/packages/mysql.git/commitdiff/d2ba42194432d386b7af84a84b2f5fde74752e7d



More information about the pld-cvs-commit mailing list