diff --git a/mysql-test/mysql-test-run.pl b/mysql-test/mysql-test-run.pl
index 5002f778da5be05e0358ff344292424f62c2dd1a..397adb9e157f5f7be6233c04470031ba97916997 100755
--- a/mysql-test/mysql-test-run.pl
+++ b/mysql-test/mysql-test-run.pl
@@ -58,6 +58,7 @@ $Devel::Trace::TRACE= 0;       # Don't trace boring init stuff
 use File::Path;
 use File::Basename;
 use File::Copy;
+use File::Temp qw / tempdir /;
 use Cwd;
 use Getopt::Long;
 use Sys::Hostname;
@@ -1030,6 +1031,11 @@ sub command_line_setup () {
   my $sockdir = $opt_tmpdir;
   $sockdir =~ s|/+$||;
 
+  # On some operating systems, there is a limit to the length of a
+  # UNIX domain socket's path far below PATH_MAX, so try to avoid long
+  # socket path names.
+  $sockdir = tempdir(CLEANUP => 1) if ( length($sockdir) > 80 );
+
   # Put this into a hash, will be a C struct
 
   $master->[0]=