Commit ba22c3f2 authored by Tor Didriksen's avatar Tor Didriksen

Bug#16316074 RFE: MAKE TMPDIR A BUILD-TIME CONFIGURABLE OPTION

Bug#68338    RFE: make tmpdir a build-time configurable option

Background: Some distributions use tmpfs for mounting /tmp by
default, which has some advantages, but brings also new
issues. Fedora started using tmpfs on /tmp in version 18 for
example. If not configured otherwise in my.cnf, MySQL uses
system's constant P_tmpdir expanded to /tmp on Linux. This can
introduce some problems with limited space in /tmp and also some
data loss in case of replication slave [1].

In case distributions would like to use /var/tmp, which should be
better for MySQL purposes, then we have to patch the source or
change tmpdir option in my.cnf, which is however not updated in
case it has already existed.

Thus, it would be useful to be able to specify default tmpdir
path using a configure option, while using P_tmpdir in case it is
not defined explicitly.

Based on a contribution from Honza Horak
parent 11c0805e
...@@ -329,6 +329,15 @@ IF(SYSCONFDIR) ...@@ -329,6 +329,15 @@ IF(SYSCONFDIR)
SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}") SET(DEFAULT_SYSCONFDIR "${SYSCONFDIR}")
ENDIF() ENDIF()
OPTION(TMPDIR
"PATH to MySQL TMP dir. If unspecified, defaults to P_tmpdir in <stdio.h>" OFF)
IF(TMPDIR)
# Quote it, to make it a const char string.
SET(DEFAULT_TMPDIR "\"${TMPDIR}\"")
ELSE()
# Do not quote it, to refer to the P_tmpdir macro in <stdio.h>.
SET(DEFAULT_TMPDIR "P_tmpdir")
ENDIF()
# Run platform tests # Run platform tests
INCLUDE(configure.cmake) INCLUDE(configure.cmake)
......
/* Copyright (c) 2009, 2011, Oracle and/or its affiliates. All rights reserved. /* Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -600,6 +600,7 @@ ...@@ -600,6 +600,7 @@
#cmakedefine DEFAULT_CHARSET_HOME "@DEFAULT_CHARSET_HOME@" #cmakedefine DEFAULT_CHARSET_HOME "@DEFAULT_CHARSET_HOME@"
#cmakedefine PLUGINDIR "@PLUGINDIR@" #cmakedefine PLUGINDIR "@PLUGINDIR@"
#cmakedefine DEFAULT_SYSCONFDIR "@DEFAULT_SYSCONFDIR@" #cmakedefine DEFAULT_SYSCONFDIR "@DEFAULT_SYSCONFDIR@"
#cmakedefine DEFAULT_TMPDIR @DEFAULT_TMPDIR@
#cmakedefine SO_EXT "@CMAKE_SHARED_MODULE_SUFFIX@" #cmakedefine SO_EXT "@CMAKE_SHARED_MODULE_SUFFIX@"
......
...@@ -558,7 +558,7 @@ int init_embedded_server(int argc, char **argv, char **groups) ...@@ -558,7 +558,7 @@ int init_embedded_server(int argc, char **argv, char **groups)
opt_mysql_tmpdir=getenv("TMP"); opt_mysql_tmpdir=getenv("TMP");
#endif #endif
if (!opt_mysql_tmpdir || !opt_mysql_tmpdir[0]) if (!opt_mysql_tmpdir || !opt_mysql_tmpdir[0])
opt_mysql_tmpdir=(char*) P_tmpdir; /* purecov: inspected */ opt_mysql_tmpdir= const_cast<char*>(DEFAULT_TMPDIR); /* purecov: inspected*/
init_ssl(); init_ssl();
umask(((~my_umask) & 0666)); umask(((~my_umask) & 0666));
......
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -43,7 +43,7 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist) ...@@ -43,7 +43,7 @@ my_bool init_tmpdir(MY_TMPDIR *tmpdir, const char *pathlist)
pathlist=getenv("TMP"); pathlist=getenv("TMP");
#endif #endif
if (!pathlist || !pathlist[0]) if (!pathlist || !pathlist[0])
pathlist=(char*) P_tmpdir; pathlist= DEFAULT_TMPDIR;
} }
do do
{ {
......
/* Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. /* Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by it under the terms of the GNU General Public License as published by
...@@ -111,7 +111,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix, ...@@ -111,7 +111,7 @@ File create_temp_file(char *to, const char *dir, const char *prefix,
sizeof(prefix_buff)-7),"XXXXXX") - sizeof(prefix_buff)-7),"XXXXXX") -
prefix_buff); prefix_buff);
if (!dir && ! (dir =getenv("TMPDIR"))) if (!dir && ! (dir =getenv("TMPDIR")))
dir=P_tmpdir; dir= DEFAULT_TMPDIR;
if (strlen(dir)+ pfx_len > FN_REFLEN-2) if (strlen(dir)+ pfx_len > FN_REFLEN-2)
{ {
errno=my_errno= ENAMETOOLONG; errno=my_errno= ENAMETOOLONG;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment