4448 Bjorn Munch 2012-10-10
WL #6055 New default config file in MySQL 5.6
Bug #14725217 PLEASE ADD SQL_MODE=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES TO
Bug #14729792 NO WARNING WHEN MY.CNF EXISTS IN /ETC/MYSQL
Bug #14735440 WRONG WARNING MESSAGES SHOWN WHEN MYSQL_INSTALL_DB IS RUN
Bug #14735448 NEW MY.CNF NOT CREATED WHEN --DEFAULTS-FILE IS USED WITH MYSQL_INSTALL_DB
Extending mysql_install_db to install new default
Handle cases where it exists already, or system file like /etc/my.cnf does
modified:
scripts/mysql_install_db.pl.in
support-files/CMakeLists.txt
support-files/mysql.spec.sh
4447 Nirbhay Choubey 2012-10-10
Bug#14722862 : MYSQL_CLIENT_TEST_EMBEDDED FAILS WITH
SEGMENTATION FAULT
mysql_client_test framework's print_error() was
referring to an invalid mysql handle (a possible
typo), which caused the segfault.
Fixed by correcting the handle.
modified:
tests/mysql_client_fw.c
=== modified file 'scripts/mysql_install_db.pl.in'
--- a/scripts/mysql_install_db.pl.in 2012-10-10 11:05:03 +0000
+++ b/scripts/mysql_install_db.pl.in 2012-10-10 13:05:43 +0000
@@ -36,6 +36,7 @@
use Fcntl;
use File::Basename;
+use File::Copy;
use Getopt::Long;
use Sys::Hostname;
use Data::Dumper;
@@ -44,6 +45,7 @@ use strict;
Getopt::Long::Configure("pass_through");
my @args; # Argument list filled in
+my $basedir;
##############################################################################
#
@@ -165,20 +167,11 @@ sub parse_arguments
usage() if $opt->{help};
- # To make these options acceptable for mysqld, we must prepend the name to the value -
- # but only if they are set, and have not been fixed already.
- if ( $opt->{'defaults-file'} && $opt->{'defaults-file'} !~ /^--/ )
+ if ( $opt->{'no-defaults'} && ( $opt->{'defaults-extra-file'} ||
+ $opt->{'defaults-file'} ) )
{
- $opt->{'defaults-file'} = '--defaults-file=' . $opt->{'defaults-file'};
- }
- if ( $opt->{'defaults-extra-file'} && $opt->{'defaults-extra-file'} !~ /^--/ )
- {
- $opt->{'defaults-extra-file'} = '--defaults-extra-file=' . $opt->{'defaults-extra-file'};
- }
- # This option has no value, so we just have to spell it in full.
- if ( $opt->{'no-defaults'} && $opt->{'no-defaults'} !~ /^--/ )
- {
- $opt->{'no-defaults'} = '--no-defaults=';
+ error($opt,
+ "Cannot use both --no-defaults and --defaults-[extra-]file");
}
@args = @ARGV if $pick_args;
@@ -206,7 +199,7 @@ sub find_in_basedir
foreach my $part ( "$file","$file.exe","release/$file.exe",
"debug/$file.exe","relwithdebinfo/$file.exe" )
{
- my $path = "$opt->{basedir}/$dir/$part";
+ my $path = "$basedir/$dir/$part";
if ( -f $path )
{
return $mode eq "dir" ? dirname($path) : $path;
@@ -389,6 +382,17 @@ my $opt = {};
parse_arguments($opt, 'PICK-ARGS-FROM-ARGV', @ARGV);
# ----------------------------------------------------------------------
+# Actual basedir, not to be confused with --basedir option
+# ----------------------------------------------------------------------
+
+if ( $opt->{srcdir} ) {
+ $basedir= $opt->{builddir};
+} else {
+ $basedir= $opt->{basedir};
+}
+$basedir= "@prefix@" if ! $basedir; # Default
+
+# ----------------------------------------------------------------------
# We can now find my_print_defaults. This script supports:
#
# --srcdir=path pointing to compiled source tree
@@ -408,11 +412,11 @@ if ( $opt->{srcdir} )
$opt->{builddir} = $opt->{srcdir} unless $opt->{builddir};
$print_defaults = "$opt->{builddir}/extra/my_print_defaults";
}
-elsif ( $opt->{basedir} )
+else
{
$print_defaults = find_in_basedir($opt,"file","my_print_defaults","bin","extra");
}
-else
+if ( ! $print_defaults )
{
$print_defaults='@bindir@/my_print_defaults';
}
@@ -420,13 +424,52 @@ else
-x $print_defaults or -f "$print_defaults.exe"
or cannot_find_file($print_defaults);
+my $config_file;
+my $copy_cfg_file;
+
+# ----------------------------------------------------------------------
+# This will be the default config file
+# ----------------------------------------------------------------------
+
+$config_file= "$basedir/my.cnf";
+
+my $cfg_template= find_in_basedir($opt,"file","my-default.cnf",
+ "share","share/mysql","support-files");
+-e $cfg_template or cannot_find_file("my-default.cnf");
+
+$copy_cfg_file= $config_file;
+if (-e $copy_cfg_file)
+{
+ $copy_cfg_file =~ s/my.cnf/my-new.cnf/;
+ # Too early to print warning here, the user may not notice
+}
+open (TEMPL, $cfg_template) or error("Could not open config template");
+open (CFG, "> $copy_cfg_file") or error("Could not open config file");
+while (<TEMPL>)
+{
+ # Remove lines beginning with # *** which are template comments
+ print CFG $_ unless /^# \*\*\*/;
+}
+close CFG;
+close TEMPL;
+
# ----------------------------------------------------------------------
# Now we can get arguments from the groups [mysqld] and [mysql_install_db]
# in the my.cfg file, then re-run to merge with command line arguments.
# ----------------------------------------------------------------------
+my $print_def_file;
+if ( $opt->{'defaults-file'} )
+{
+ $print_def_file= $opt->{'defaults-file'};
+}
+else
+{
+ $print_def_file= $config_file;
+}
+
my @default_options;
-my $cmd = quote_options($print_defaults,$opt->{'defaults-file'},
+my $cmd = quote_options($print_defaults,"--defaults-file=$print_def_file",
"mysqld","mysql_install_db");
open(PIPE, "$cmd |") or error($opt,"can't run $cmd: $!");
while ( <PIPE> )
@@ -475,10 +518,9 @@ my ($bindir,$extra_bindir,$mysqld,$pkgda
if ( $opt->{srcdir} )
{
- $opt->{basedir} = $opt->{builddir};
- $bindir = "$opt->{basedir}/client";
- $extra_bindir = "$opt->{basedir}/extra";
- $mysqld = "$opt->{basedir}/sql/mysqld";
+ $bindir = "$basedir/client";
+ $extra_bindir = "$basedir/extra";
+ $mysqld = "$basedir/sql/mysqld";
$mysqld_opt = "--language=$opt->{srcdir}/sql/share/english";
$pkgdatadir = "$opt->{srcdir}/scripts";
$scriptdir = "$opt->{srcdir}/scripts";
@@ -497,7 +539,6 @@ elsif ( $opt->{basedir} )
}
else
{
- $opt->{basedir} = '@prefix@';
$bindir = '@bindir@';
$extra_bindir = $bindir;
$mysqld = '@libexecdir@/mysqld';
@@ -604,12 +645,26 @@ push(@args, "--user=$opt->{user}") if $o
# FIXME use --init-file instead of --bootstrap ?!
+my $defaults_option = "";
+if ( $opt->{'no-defaults'} )
+{
+ $defaults_option= "--no-defaults";
+}
+elsif ( $opt->{'defaults-file'} )
+{
+ $defaults_option= "--defaults-file=$opt->{'defaults-file'}";
+}
+
+my $defaults_extra= "--defaults-extra-file=$opt->{'defaults-extra-file'}"
+ if $opt->{'defaults-extra-file'};
+
my $mysqld_bootstrap = $ENV{MYSQLD_BOOTSTRAP} || $mysqld;
my $mysqld_install_cmd_line = quote_options($mysqld_bootstrap,
- $opt->{'defaults-file'},
+ $defaults_option,
+ $defaults_extra,
$mysqld_opt,
"--bootstrap",
- "--basedir=$opt->{basedir}",
+ "--basedir=$basedir",
"--datadir=$opt->{ldata}",
"--log-warnings=0",
"--loose-skip-ndbcluster",
@@ -660,8 +715,8 @@ if ( open(PIPE, "| $mysqld_install_cmd_l
{
# using the implicit variable $_ !
s/ABC123xyz/$escaped_password/e ; # Replace placeholder by random password
- print PIPE $_;
- }
+ print PIPE $_;
+ }
close SQL3;
tell_root_password();
}
@@ -728,22 +783,22 @@ if ( open(PIPE, "| $mysqld_install_cmd_l
"",
"See the manual for more instructions.");
} else {
- report($opt,
- "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !",
- "To do so, start the server, then issue the following commands:",
- "",
- " $bindir/mysqladmin -u root password 'new-password'",
- " $bindir/mysqladmin -u root -h $hostname password 'new-password'",
- "",
- "Alternatively you can run:",
- "",
- " $bindir/mysql_secure_installation",
- "",
- "which will also give you the option of removing the test",
- "databases and anonymous user created by default. This is",
- "strongly recommended for production servers.",
- "",
- "See the manual for more instructions.");
+ report($opt,
+ "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !",
+ "To do so, start the server, then issue the following commands:",
+ "",
+ " $bindir/mysqladmin -u root password 'new-password'",
+ " $bindir/mysqladmin -u root -h $hostname password 'new-password'",
+ "",
+ "Alternatively you can run:",
+ "",
+ " $bindir/mysql_secure_installation",
+ "",
+ "which will also give you the option of removing the test",
+ "databases and anonymous user created by default. This is",
+ "strongly recommended for production servers.",
+ "",
+ "See the manual for more instructions.");
}
if ( !$opt->{rpm} )
@@ -765,6 +820,28 @@ if ( open(PIPE, "| $mysqld_install_cmd_l
" http://www.mysql.com",
"",
"Support MySQL by buying support/licenses at http://shop.mysql.com");
+
+ if ($copy_cfg_file eq $config_file)
+ {
+ report($opt,
+ "New default config file was created as $config_file and",
+ "will be used by default by the server when you start it.",
+ "You may edit this file to change server settings");
+ }
+ else
+ {
+ warning($opt,
+ "Found existing config file $config_file on the system.",
+ "Because this file might be in use, it was not replaced,",
+ "but was used in bootstrap (unless you used --defaults-file)",
+ "and when you later start the server.",
+ "The new default config file was created as $copy_cfg_file,",
+ "please compare it with your file and take the changes you need.");
+ }
+ foreach my $cfg ( "/etc/my.cnf", "/etc/mysql/my.cnf" )
+ {
+ check_sys_cfg_file ($opt, $cfg);
+ }
}
exit 0
}
@@ -801,6 +878,21 @@ else
#
##############################################################################
+sub check_sys_cfg_file
+{
+ my $opt= shift;
+ my $fname= shift;
+
+ if ( -e $fname )
+ {
+ warning($opt,
+ "Default config file $fname exists on the system",
+ "This file will be read by default by the MySQL server",
+ "If you do not want to use this, either remove it, or use the",
+ "--defaults-file argument to mysqld_safe when starting the server");
+ }
+}
+
sub report_verbose
{
my $opt = shift;
=== modified file 'support-files/CMakeLists.txt'
--- a/support-files/CMakeLists.txt 2012-05-23 09:54:40 +0000
+++ b/support-files/CMakeLists.txt 2012-10-10 13:05:43 +0000
@@ -1,4 +1,4 @@
-# Copyright (c) 2006, 2010, Oracle and/or its affiliates. All rights reserved.
+# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
#
# 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
@@ -16,6 +16,7 @@
IF(WIN32)
SET(localstatedir "C:\\\\mysql\\\\data\\\\")
SET(ini_file_extension "ini")
+ SET(CNF_SOCKET_LINE "")
ELSE()
SET(localstatedir "${MYSQL_DATADIR}")
SET(prefix "${CMAKE_INSTALL_PREFIX}")
@@ -30,6 +31,7 @@ ELSE()
SET(MYSQLD_USER "mysql")
SET(ini_file_extension "cnf")
SET(HOSTNAME "hostname")
+ SET(CNF_SOCKET_LINE "# socket = .....")
ENDIF()
SET(dictionary "${CMAKE_INSTALL_PREFIX}/${INSTALL_SHAREDIR}/dictionary.txt" )
@@ -42,12 +44,11 @@ ELSE()
SET(inst_location ${INSTALL_SUPPORTFILESDIR})
ENDIF()
-FOREACH(inifile my-huge my-innodb-heavy-4G my-large my-medium my-small)
- CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${inifile}.cnf.sh
- ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension} @ONLY)
- INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension}
- DESTINATION ${inst_location} COMPONENT IniFiles)
-ENDFOREACH()
+SET(inifile my-default)
+CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${inifile}.cnf.sh
+ ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension} @ONLY)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${inifile}.${ini_file_extension}
+ DESTINATION ${inst_location} COMPONENT IniFiles)
IF(UNIX)
SET(prefix ${CMAKE_INSTALL_PREFIX})
=== modified file 'support-files/mysql.spec.sh'
--- a/support-files/mysql.spec.sh 2012-10-05 15:04:43 +0000
+++ b/support-files/mysql.spec.sh 2012-10-10 13:05:43 +0000
@@ -988,7 +988,7 @@ echo "====="
%doc %{src_dir}/Docs/ChangeLog
%doc %{src_dir}/Docs/INFO_SRC*
%doc release/Docs/INFO_BIN*
-%doc release/support-files/my-*.cnf
+%doc release/support-files/my-default.cnf
%doc %attr(644, root, root) %{_infodir}/mysql.info*
@@ -1149,6 +1149,10 @@ echo "====="
# merging BK trees)
##############################################################################
%changelog
+* Wed Oct 10 2012 Bjorn Munch <bjorn.munch@stripped>
+
+- Replace old my-*.cnf config file examples with template my-default.cnf
+
* Fri Oct 05 2012 Joerg Bruehe <joerg.bruehe@stripped>
- Let the installation use the new option "--random-passwords" of "mysql_install_db".
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-5.6 branch (bjorn.munch:4447 to 4448) Bug#14725217Bug#14729792 Bug#14735440 Bug#14735448 WL#6055 | Bjorn Munch | 10 Oct |