diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/CMakeLists.txt | 1 | ||||
-rwxr-xr-x | scripts/make_win_bin_dist | 416 | ||||
-rw-r--r-- | scripts/mysql_install_db.pl.in | 659 | ||||
-rw-r--r-- | scripts/mysql_install_db.sh | 47 | ||||
-rw-r--r-- | scripts/mysql_system_tables_data.sql | 17 | ||||
-rw-r--r-- | scripts/mysql_test_db.sql | 31 | ||||
-rw-r--r-- | scripts/wsrep_sst_xtrabackup.sh | 1 |
7 files changed, 61 insertions, 1111 deletions
diff --git a/scripts/CMakeLists.txt b/scripts/CMakeLists.txt index fc133f53b37..d7f7906f713 100644 --- a/scripts/CMakeLists.txt +++ b/scripts/CMakeLists.txt @@ -95,6 +95,7 @@ INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables.sql ${CMAKE_CURRENT_SOURCE_DIR}/mysql_system_tables_data.sql ${CMAKE_CURRENT_SOURCE_DIR}/mysql_performance_tables.sql + ${CMAKE_CURRENT_SOURCE_DIR}/mysql_test_db.sql ${CMAKE_CURRENT_SOURCE_DIR}/fill_help_tables.sql ${CMAKE_CURRENT_SOURCE_DIR}/mysql_test_data_timezone.sql ${CMAKE_CURRENT_SOURCE_DIR}/mysql_to_mariadb.sql diff --git a/scripts/make_win_bin_dist b/scripts/make_win_bin_dist deleted file mode 100755 index 2415d4017e4..00000000000 --- a/scripts/make_win_bin_dist +++ /dev/null @@ -1,416 +0,0 @@ -#!/bin/sh -# Copyright (c) 2006, 2011, Oracle and/or its affiliates. -# -# 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 -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -# Exit if failing to copy, we want exact specifications, not -# just "what happen to be built". -set -e - -# ---------------------------------------------------------------------- -# Read first argument that is the base name of the resulting TAR file. -# See usage() function below for a description on the arguments. -# -# NOTE: We will read the rest of the command line later on. -# NOTE: Pattern matching with "{..,..}" can't be used, not portable. -# ---------------------------------------------------------------------- - -# FIXME why "libmysql.dll" installed both in "bin" and "lib/opt"? - -usage() -{ - echo <<EOF -Usage: make_win_bin_dist [ options ] package-base-name [ copy-defs... ] - -This is a script to run from the top of a source tree built on Windows. -The "package-base-name" argument should be something like - - mysql-noinstall-5.0.25-win32 (or winx64) - -and will become the name of the directory of the unpacked ZIP (stripping -away the "noinstall" part of the ZIP file name if any) and the base -for the resulting package name. - -Options are - - --embedded Pack the embedded server and give error if not built. - The default is to pack it if it is built. - - --no-embedded Don't pack the embedded server even if built - - --debug Pack the debug binaries and give error if not built. - The default is to pack them if they are built. - - --no-debug Don't pack the debug binaries even if built - - --only-debug The target for this build was "Debug", and we just - want to replace the normal binaries with debug - versions, i.e. no separate "debug" directories. - - --exe-suffix=SUF Add a suffix to the filename part of the "mysqld" binary. - -As you might want to include files of directories from other builds -(like a "mysqld-max.exe" server), you can instruct this script to copy -them in for you. This is the "copy-def" arguments, and they are of the -form - - relative-dest-name=source-name ..... - -i.e. can be something like - - bin/mysqld-max.exe=../my-max-build/sql/release/mysqld.exe - -If you specify a directory the whole directory will be copied. - -EOF - exit 1 -} - -# ---------------------------------------------------------------------- -# We need to be at the top of a source tree, check that we are -# ---------------------------------------------------------------------- - -if [ ! -d "sql" ] ; then - echo "You need to run this script from inside the source tree" - usage -fi - -# ---------------------------------------------------------------------- -# Actual argument processing, first part -# ---------------------------------------------------------------------- - -NOINST_NAME="" -TARGET="release" -PACK_EMBEDDED="" # Could be "no", "yes" or empty -PACK_DEBUG="" # Could be "no", "yes" or empty -EXE_SUFFIX="" - -for arg do - shift - case "$arg" in - --embedded) PACK_EMBEDDED="yes" ;; - --no-embedded) PACK_EMBEDDED="no" ;; - --debug) PACK_DEBUG="yes" ;; - --no-debug) PACK_DEBUG="no" ;; - --only-debug) TARGET="debug" ; PACK_DEBUG="no" ;; - --exe-suffix=*) EXE_SUFFIX=`echo "$arg" | sed -e "s,--exe-suffix=,,"` ;; - -*) - echo "Unknown argument '$arg'" - usage - ;; - *) - NOINST_NAME="$arg" - break - esac -done - -if [ x"$NOINST_NAME" = x"" ] ; then - echo "No base package name given" - usage -fi -DESTDIR=`echo $NOINST_NAME | sed 's/-noinstall-/-/'` - -if [ -e $DESTDIR ] ; then - echo "Please remove the old $DESTDIR before running this script" - usage -fi - -trap 'echo "Cleaning up and exiting..." ; rm -fr $DESTDIR; exit 1' ERR - -# ---------------------------------------------------------------------- -# Adjust target name if needed, release with debug info has another name -# ---------------------------------------------------------------------- - -if [ x"$TARGET" = x"release" -a -f "client/relwithdebinfo/mysql.exe" ] -then - TARGET="relwithdebinfo" -fi - -# ---------------------------------------------------------------------- -# Copy executables, and client DLL -# ---------------------------------------------------------------------- -MYISAM_BINARIES="myisamchk myisamlog myisampack myisam_ftdump" -MARIA_BINARIES="aria_chk aria_dump_log aria_ftdump aria_pack aria_read_log" -mkdir $DESTDIR -mkdir $DESTDIR/bin -cp client/$TARGET/*.exe $DESTDIR/bin/ -cp extra/$TARGET/*.exe $DESTDIR/bin/ - -# MyISAM -#cp storage/myisam/$TARGET/*.exe $DESTDIR/bin/ -for eng in $MYISAM_BINARIES ; do - cp storage/myisam/$TARGET/$eng.{exe,pdb} $DESTDIR/bin -done - -# Maria -for eng in $MARIA_BINARIES ; do - cp storage/maria/$TARGET/$eng.{exe,pdb} $DESTDIR/bin -done - -if [ x"$TARGET" != x"release" ] ; then - cp client/$TARGET/mysql.pdb $DESTDIR/bin/ - cp client/$TARGET/mysqladmin.pdb $DESTDIR/bin/ - cp client/$TARGET/mysqlbinlog.pdb $DESTDIR/bin/ - cp client/$TARGET/mysqldump.pdb $DESTDIR/bin/ - cp client/$TARGET/mysqlimport.pdb $DESTDIR/bin/ - cp client/$TARGET/mysqlshow.pdb $DESTDIR/bin/ -fi -cp tests/$TARGET/*.exe $DESTDIR/bin/ -cp libmysql/$TARGET/libmysql.dll $DESTDIR/bin/ - -cp sql/$TARGET/mysqld.exe $DESTDIR/bin/mysqld$EXE_SUFFIX.exe -if [ x"$TARGET" != x"release" ] ; then - cp sql/$TARGET/mysqld.pdb $DESTDIR/bin/mysqld$EXE_SUFFIX.pdb -fi - -if [ x"$PACK_DEBUG" = x"" -a -f "sql/debug/mysqld.exe" -o \ - x"$PACK_DEBUG" = x"yes" ] ; then - cp sql/debug/mysqld.exe $DESTDIR/bin/mysqld-debug.exe - cp sql/debug/mysqld.pdb $DESTDIR/bin/mysqld-debug.pdb -fi - -# ---------------------------------------------------------------------- -# Copy data directory, readme files etc -# ---------------------------------------------------------------------- - -if [ -d win/data ] ; then - cp -pR win/data $DESTDIR/ -fi - -mkdir $DESTDIR/Docs -cp Docs/INSTALL-BINARY $DESTDIR/Docs/ -cp Docs/manual.chm $DESTDIR/Docs/ || /bin/true -cp ChangeLog $DESTDIR/Docs/ || /bin/true -cp support-files/my-*.ini $DESTDIR/ -cp README $DESTDIR/ - -if [ -f COPYING ] ; then - cp COPYING EXCEPTIONS-CLIENT $DESTDIR/ - cp COPYING $DESTDIR/Docs/ -fi - -# ---------------------------------------------------------------------- -# These will be filled in when we enable embedded. Note that if no -# argument is given, it is copied if exists, else a check is done. -# ---------------------------------------------------------------------- - -copy_embedded() -{ - mkdir -p $DESTDIR/Embedded/DLL/release \ - $DESTDIR/Embedded/static/release \ - $DESTDIR/include - cp libmysqld/libmysqld.def $DESTDIR/include/ - cp libmysqld/$TARGET/mysqlserver.lib $DESTDIR/Embedded/static/release/ - cp libmysqld/$TARGET/libmysqld.dll $DESTDIR/Embedded/DLL/release/ - cp libmysqld/$TARGET/libmysqld.exp $DESTDIR/Embedded/DLL/release/ - cp libmysqld/$TARGET/libmysqld.lib $DESTDIR/Embedded/DLL/release/ - if [ x"$TARGET" != x"release" ] ; then - cp libmysqld/$TARGET/mysqlserver.pdb $DESTDIR/Embedded/static/release/ - cp libmysqld/$TARGET/libmysqld.pdb $DESTDIR/Embedded/DLL/release/ - fi - - if [ x"$PACK_DEBUG" = x"" -a -f "libmysqld/debug/libmysqld.lib" -o \ - x"$PACK_DEBUG" = x"yes" ] ; then - mkdir -p $DESTDIR/Embedded/DLL/debug \ - $DESTDIR/Embedded/static/debug - cp libmysqld/debug/mysqlserver.lib $DESTDIR/Embedded/static/debug/ - cp libmysqld/debug/mysqlserver.pdb $DESTDIR/Embedded/static/debug/ - cp libmysqld/debug/libmysqld.dll $DESTDIR/Embedded/DLL/debug/ - cp libmysqld/debug/libmysqld.exp $DESTDIR/Embedded/DLL/debug/ - cp libmysqld/debug/libmysqld.lib $DESTDIR/Embedded/DLL/debug/ - cp libmysqld/debug/libmysqld.pdb $DESTDIR/Embedded/DLL/debug/ - fi -} - -if [ x"$PACK_EMBEDDED" = x"" -a \ - -f "libmysqld/$TARGET/mysqlserver.lib" -a \ - -f "libmysqld/$TARGET/libmysqld.lib" -o \ - x"$PACK_EMBEDDED" = x"yes" ] ; then - copy_embedded -fi - -# ---------------------------------------------------------------------- -# Note: Make sure to sync with include/Makefile.am and WiX installer -# XML specifications -# ---------------------------------------------------------------------- - -mkdir -p $DESTDIR/include -cp include/mysql.h \ - include/mysql_com.h \ - include/mysql_time.h \ - include/my_list.h \ - include/my_alloc.h \ - include/typelib.h \ - include/my_dbug.h \ - include/m_string.h \ - include/my_sys.h \ - include/my_xml.h \ - include/mysql_embed.h \ - include/my_pthread.h \ - include/my_no_pthread.h \ - include/decimal.h \ - include/errmsg.h \ - include/my_global.h \ - include/my_config.h \ - include/my_net.h \ - include/my_getopt.h \ - include/sslopt-longopts.h \ - include/my_dir.h \ - include/sslopt-vars.h \ - 'include/sslopt-case.h' \ - include/sql_common.h \ - include/keycache.h \ - include/m_ctype.h \ - include/my_attribute.h \ - include/my_compiler.h \ - include/mysqld_error.h \ - include/sql_state.h \ - include/mysqld_ername.h \ - include/mysql_version.h \ - libmysql/libmysql.def \ - $DESTDIR/include/ - -mkdir -p $DESTDIR/include/mysql -cp include/mysql/plugin.h $DESTDIR/include/mysql/ - -# ---------------------------------------------------------------------- -# Client libraries, and other libraries -# ---------------------------------------------------------------------- - -mkdir -p $DESTDIR/lib/opt -mkdir -p $DESTDIR/lib/plugin -cp sql/$TARGET/mysqld.lib $DESTDIR/lib/ -cp libmysql/$TARGET/libmysql.dll \ - libmysql/$TARGET/libmysql.lib \ - libmysql/$TARGET/mysqlclient.lib \ - mysys/$TARGET/mysys.lib \ - regex/$TARGET/regex.lib \ - strings/$TARGET/strings.lib \ - zlib/$TARGET/zlib.lib $DESTDIR/lib/opt/ -cp storage/*/$TARGET/ha_*.dll $DESTDIR/lib/plugin/ - -if [ x"$TARGET" != x"release" ] ; then - cp libmysql/$TARGET/libmysql.pdb \ - libmysql/$TARGET/mysqlclient.pdb \ - mysys/$TARGET/mysys.pdb \ - regex/$TARGET/regex.pdb \ - strings/$TARGET/strings.pdb \ - zlib/$TARGET/zlib.pdb $DESTDIR/lib/opt/ - cp storage/*/$TARGET/ha_*.pdb $DESTDIR/lib/plugin/ -fi - - -if [ x"$PACK_DEBUG" = x"" -a -f "libmysql/debug/libmysql.lib" -o \ - x"$PACK_DEBUG" = x"yes" ] ; then - mkdir -p $DESTDIR/lib/debug - mkdir -p $DESTDIR/lib/plugin/debug - cp libmysql/debug/libmysql.dll \ - libmysql/debug/libmysql.lib \ - libmysql/debug/libmysql.pdb \ - libmysql/debug/mysqlclient.lib \ - libmysql/debug/mysqlclient.pdb \ - mysys/debug/mysys.lib \ - mysys/debug/mysys.pdb \ - regex/debug/regex.lib \ - regex/debug/regex.pdb \ - strings/debug/strings.lib \ - strings/debug/strings.pdb \ - zlib/debug/zlib.lib \ - zlib/debug/zlib.pdb $DESTDIR/lib/debug/ - cp storage/*/debug/ha_*.dll \ - storage/*/debug/ha_*.lib \ - storage/*/debug/ha_*.pdb \ - $DESTDIR/lib/plugin/debug/ -fi - -# ---------------------------------------------------------------------- -# Copy the test directory -# ---------------------------------------------------------------------- - -mkdir $DESTDIR/mysql-test -cp mysql-test/mysql-test-run.pl $DESTDIR/mysql-test/ -cp mysql-test/mysql-stress-test.pl $DESTDIR/mysql-test/ -cp mysql-test/README $DESTDIR/mysql-test/ -cp -R mysql-test/{t,r,include,suite,std_data,lib,collections} $DESTDIR/mysql-test/ - -rm -rf $DESTDIR/mysql-test/lib/My/SafeProcess/my_safe_kill.{dir,vcproj} -rm -rf $DESTDIR/mysql-test/lib/My/SafeProcess/my_safe_process.{dir,vcproj} -rm -rf $DESTDIR/mysql-test/lib/My/SafeProcess/{Debug,RelWithDebInfo}/*.{ilk,idb} - - -# Note that this will not copy "extra" if a soft link -if [ -d mysql-test/extra ] ; then - mkdir $DESTDIR/mysql-test/extra - cp -pR mysql-test/extra/* $DESTDIR/mysql-test/extra/ -fi - -# ---------------------------------------------------------------------- -# Copy what could be usable in the "scripts" directory -# ---------------------------------------------------------------------- - -mysql_scripts="\ -mysql_config.pl \ -mysql_convert_table_format.pl \ -mysql_install_db.pl \ -mysql_secure_installation.pl \ -mysqld_multi.pl \ -mysqldumpslow.pl \ -mysqlhotcopy.pl \ -mytop.pl \ -" - -mkdir -p $DESTDIR/scripts - -for i in $mysql_scripts -do - cp scripts/$i $DESTDIR/scripts/$i -done - -cp -pR sql/share $DESTDIR/ -cp -pR sql-bench $DESTDIR/ -rm -f $DESTDIR/sql-bench/*.sh $DESTDIR/sql-bench/Makefile* - -# The SQL initialisation code is to be in "share" -cp scripts/*.sql $DESTDIR/share/ - -# ---------------------------------------------------------------------- -# Clean up from possibly copied SCCS directories -# ---------------------------------------------------------------------- - -rm -rf `/bin/find $DISTDIR -type d -name SCCS -print` - -# ---------------------------------------------------------------------- -# Copy other files specified on command line DEST=SOURCE -# ---------------------------------------------------------------------- - -for arg do - dst=`echo $arg | sed -n 's/=.*$//p'` - src=`echo $arg | sed -n 's/^.*=//p'` - - if [ x"$dst" = x"" -o x"$src" = x"" ] ; then - echo "Invalid specification of what to copy" - usage - fi - - mkdir -p `dirname $DESTDIR/$dst` - cp -pR "$src" $DESTDIR/$dst -done - -# ---------------------------------------------------------------------- -# Finally create the ZIP archive -# ---------------------------------------------------------------------- - -rm -f $NOINST_NAME.zip -zip -r $NOINST_NAME.zip $DESTDIR -rm -Rf $DESTDIR diff --git a/scripts/mysql_install_db.pl.in b/scripts/mysql_install_db.pl.in deleted file mode 100644 index 9d2c1f6874a..00000000000 --- a/scripts/mysql_install_db.pl.in +++ /dev/null @@ -1,659 +0,0 @@ -#!@PERL_PATH@ -# -*- cperl -*- -# -# Copyright (c) 2007, 2017, Oracle and/or its affiliates. -# -# 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 -# the Free Software Foundation; version 2 of the License. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - -############################################################################## -# -# This scripts creates the MySQL Server system tables. -# -# This script try to match the shell script version as close as possible, -# but in addition being compatible with ActiveState Perl on Windows. -# -# All unrecognized arguments to this script are passed to mysqld. -# -# NOTE: This script in 5.0 doesn't really match the shell script -# version 100%, it is more close to the 5.1 version. -# -# NOTE: This script was deliberately written to be as close to the shell -# script as possible, to make the maintenance of both in parallel -# easier. -# -############################################################################## - -use File::Basename; -use Getopt::Long; -use Sys::Hostname; -use Data::Dumper; -use strict; - -Getopt::Long::Configure("pass_through"); - -my @args; # Argument list filled in - -############################################################################## -# -# Usage information -# -############################################################################## - -sub usage -{ - print <<EOF; -Usage: $0 [OPTIONS] - --basedir=path The path to the MySQL installation directory. - --builddir=path If using --srcdir with out-of-directory builds, you - will need to set this to the location of the build - directory where built files reside. - --cross-bootstrap For internal use. Used when building the MySQL system - tables on a different host than the target. - --datadir=path The path to the MySQL data directory. - --defaults-extra-file=name - Read this file after the global files are read. - --defaults-file=name Only read default options from the given file name. - --force Causes mysql_install_db to run even if DNS does not - work. In that case, grant table entries that - normally use hostnames will use IP addresses. - --help Display this help and exit. - --ldata=path The path to the MySQL data directory. Same as --datadir. - --no-defaults Don't read default options from any option file. - --rpm For internal use. This option is used by RPM files - during the MySQL installation process. - --skip-name-resolve Use IP addresses rather than hostnames when creating - grant table entries. This option can be useful if - your DNS does not work. - --srcdir=path The path to the MySQL source directory. This option - uses the compiled binaries and support files within the - source tree, useful for if you don't want to install - MySQL yet and just want to create the system tables. - --user=user_name The login username to use for running mysqld. Files - and directories created by mysqld will be owned by this - user. You must be root to use this option. By default - mysqld runs using your current login name and files and - directories that it creates will be owned by you. - -All other options are passed to the mysqld program - -EOF - exit 1; -} - -############################################################################## -# -# Parse an argument list -# -# We only need to pass arguments through to the server if we don't -# handle them here. So, we collect unrecognized options (passed on -# the command line) into the args variable. -# -############################################################################## - -sub parse_arguments -{ - my $opt = shift; - - my @saved_ARGV = @ARGV; - @ARGV = @_; # Set ARGV so GetOptions works - - my $pick_args; - if (@ARGV and $ARGV[0] eq 'PICK-ARGS-FROM-ARGV') - { - $pick_args = 1; - shift @ARGV; - } - - GetOptions( - $opt, - "force", - "basedir=s", - "builddir=s", # FIXME not documented - "srcdir=s", - "ldata|datadir|data=s", - - # Note that the user will be passed to mysqld so that it runs - # as 'user' (crucial e.g. if log-bin=/some_other_path/ - # where a chown of datadir won't help) - "user=s", - - "skip-name-resolve", - "verbose", - "rpm", - "help", - "defaults-file|defaults-extra-file|no-defaults:s", - - # Used when building the MySQL system tables on a different host than - # the target. The platform-independent files that are created in - # --datadir on the host can be copied to the target system. - # - # The most common use for this feature is in the Windows installer - # which will take the files from datadir and include them as part of - # the install package. See top-level 'dist-hook' make target. - # - # --windows is a deprecated alias - "cross-bootstrap|windows", # FIXME undocumented, even needed? - ) or usage(); - - usage() if $opt->{help}; - - @args = @ARGV if $pick_args; - - @ARGV = @saved_ARGV; # Set back ARGV -} - -############################################################################## -# -# Try to find a specific file within --basedir which can either be a binary -# release or installed source directory and return the path. -# -############################################################################## - -sub find_in_basedir -{ - my $opt = shift; - my $mode = shift; # "dir" or "file" - my $files = shift; - - foreach my $file ( @{ref($files) ? $files : [$files]} ) - { - foreach my $dir ( @_ ) - { - foreach my $part ( "$file","$file.exe","release/$file.exe", - "debug/$file.exe","relwithdebinfo/$file.exe" ) - { - my $path = "$opt->{basedir}/$dir/$part"; - if ( -f $path ) - { - return $mode eq "dir" ? dirname($path) : $path; - } - } - } - } -} - -############################################################################## -# -# Just a function to write out an error report -# -############################################################################## - -sub cannot_find_file -{ - my $file = shift; - - print "FATAL ERROR: Could not find $file\n"; - print "\n"; - print "If you compiled from source, you need to run 'make install' to\n"; - print "copy the software into the correct location ready for operation.\n"; - print "\n"; - print "If you are using a binary release, you must either be at the top\n"; - print "level of the extracted archive, or pass the --basedir option\n"; - print "pointing to that location.\n"; - print "\n"; - - exit 1; -} - -############################################################################## -# -# Form a command line that can handle spaces in paths and arguments -# -############################################################################## - -# FIXME this backslash escaping needed if using '"..."' ? -# This regexp makes sure that any special chars are quoted, -# so the arg gets passed exactly to the server. -# XXX: This is broken; true fix requires using eval and proper -# quoting of every single arg ($opt->{basedir}, $opt->{ldata}, etc.) -# join(" ", map {s/([^\w\_\.\-])/\\$1/g} - -sub quote_options { - my @cmd; - foreach my $opt ( @_ ) - { - next unless $opt; # If undefined or empty, just skip - push(@cmd, "\"$opt\""); # Quote argument - } - return join(" ", @cmd); -} - -############################################################################## -# -# Ok, let's go. We first need to parse arguments which are required by -# my_print_defaults so that we can execute it first, then later re-parse -# the command line to add any extra bits that we need. -# -############################################################################## - -my $opt = {}; -parse_arguments($opt, @ARGV); - -# ---------------------------------------------------------------------- -# We can now find my_print_defaults. This script supports: -# -# --srcdir=path pointing to compiled source tree -# --basedir=path pointing to installed binary location -# -# or default to compiled-in locations. -# ---------------------------------------------------------------------- - -my $print_defaults; - -if ( $opt->{srcdir} and $opt->{basedir} ) -{ - error("Specify either --basedir or --srcdir, not both"); -} -if ( $opt->{srcdir} ) -{ - $opt->{builddir} = $opt->{srcdir} unless $opt->{builddir}; - $print_defaults = "$opt->{builddir}/extra/my_print_defaults"; -} -elsif ( $opt->{basedir} ) -{ - $print_defaults = find_in_basedir($opt,"file","my_print_defaults","bin","extra"); -} -else -{ - $print_defaults='@bindir@/my_print_defaults'; -} - --x $print_defaults or -f "$print_defaults.exe" - or cannot_find_file($print_defaults); - -# ---------------------------------------------------------------------- -# 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 @default_options; -my $cmd = quote_options($print_defaults,$opt->{'defaults-file'}, - "mysqld","mariadb","mysql_install_db","server","client-server"); -open(PIPE, "$cmd |") or error($opt,"can't run $cmd: $!"); -while ( <PIPE> ) -{ - chomp; - next unless /\S/; - push(@default_options, $_); -} -close PIPE; -$opt = {}; # Reset the arguments FIXME ? -parse_arguments($opt, @default_options); -parse_arguments($opt, 'PICK-ARGS-FROM-ARGV', @ARGV); - -# ---------------------------------------------------------------------- -# Configure paths to support files -# ---------------------------------------------------------------------- - -# FIXME $extra_bindir is not used -my ($bindir,$extra_bindir,$mysqld,$srcpkgdatadir,$buildpkgdatadir,$mysqld_opt, - $scriptdir); - -if ( $opt->{srcdir} ) -{ - $opt->{basedir} = $opt->{builddir}; - $bindir = "$opt->{basedir}/client"; - $extra_bindir = "$opt->{basedir}/extra"; - $mysqld = "$opt->{basedir}/sql/mysqld"; - $mysqld_opt = "--language=$opt->{srcdir}/sql/share/english"; - $srcpkgdatadir = "$opt->{srcdir}/scripts"; - $buildpkgdatadir = "$opt->{builddir}/scripts"; - $scriptdir = "$opt->{srcdir}/scripts"; -} -elsif ( $opt->{basedir} ) -{ - $bindir = "$opt->{basedir}/bin"; - $extra_bindir = $bindir; - $mysqld = find_in_basedir($opt,"file",["mysqld-nt","mysqld"], - "libexec","sbin","bin") || # ,"sql" - find_in_basedir($opt,"file","mysqld-nt", - "bin"); # ,"sql" - $srcpkgdatadir = find_in_basedir($opt,"dir","fill_help_tables.sql", - "share","share/mysql"); # ,"scripts" - $buildpkgdir = $srcpkgdatadir; - $scriptdir = "$opt->{basedir}/scripts"; -} -else -{ - $opt->{basedir} = '@prefix@'; - $bindir = '@bindir@'; - $extra_bindir = $bindir; - $mysqld = '@libexecdir@/mysqld'; - $srcpkgdatadir = '@pkgdatadir@'; - $buildpkgdatadir = '@pkgdatadir@'; - $scriptdir = '@scriptdir@'; -} - -unless ( $opt->{ldata} ) -{ - $opt->{ldata} = '@localstatedir@'; -} - - -# ---------------------------------------------------------------------- -# Set up paths to SQL scripts required for bootstrap -# ---------------------------------------------------------------------- - -my $fill_help_tables = "$srcpkgdatadir/fill_help_tables.sql"; -my $create_system_tables = "$srcpkgdatadir/mysql_system_tables.sql"; -my $fill_system_tables = "$srcpkgdatadir/mysql_system_tables_data.sql"; -my $maria_add_gis_sp = "$buildpkgdatadir/maria_add_gis_sp_bootstrap.sql"; - -foreach my $f ( $fill_help_tables,$create_system_tables,$fill_system_tables,$maria_add_gis_sp ) -{ - -f $f or cannot_find_file($f); -} - --x $mysqld or -f "$mysqld.exe" or cannot_find_file($mysqld); -# Try to determine the hostname -my $hostname = hostname(); - -# ---------------------------------------------------------------------- -# Check if hostname is valid -# ---------------------------------------------------------------------- - -my $resolved; -if ( !$opt->{'cross-bootstrap'} and !$opt->{rpm} and !$opt->{force} ) -{ - my $resolveip = "$extra_bindir/resolveip"; - - $resolved = `$resolveip $hostname 2>&1`; - if ( $? != 0 ) - { - $resolved=`$resolveip localhost 2>&1`; - if ( $? != 0 ) - { - error($opt, - "Neither host '$hostname' nor 'localhost' could be looked up with", - "$resolveip", - "Please configure the 'hostname' command to return a correct", - "hostname.", - "If you want to solve this at a later stage, restart this script", - "with the --force option"); - } - warning($opt, - "The host '$hostname' could not be looked up with $resolveip.", - "This probably means that your libc libraries are not 100 % compatible", - "with this binary MySQL version. The MySQL daemon, mysqld, should work", - "normally with the exception that host name resolving will not work.", - "This means that you should use IP addresses instead of hostnames", - "when specifying MySQL privileges !"); - } -} - -# FIXME what does this really mean.... -if ( $opt->{'skip-name-resolve'} and $resolved and $resolved =~ /\s/ ) -{ - $hostname = (split(' ', $resolved))[5]; -} - -# ---------------------------------------------------------------------- -# Create database directories mysql & test -# ---------------------------------------------------------------------- - -foreach my $dir ( $opt->{ldata}, "$opt->{ldata}/mysql", "$opt->{ldata}/test" ) -{ - # FIXME not really the same as original "mkdir -p", but ok? - mkdir($dir, 0700) unless -d $dir; - chown($opt->{user}, $dir) if -w "/" and !$opt->{user}; -} - -push(@args, "--user=$opt->{user}") if $opt->{user}; - -# ---------------------------------------------------------------------- -# Configure mysqld command line -# ---------------------------------------------------------------------- - -# FIXME use --init-file instead of --bootstrap ?! - -my $mysqld_bootstrap = $ENV{MYSQLD_BOOTSTRAP} || $mysqld; -my $mysqld_install_cmd_line = quote_options($mysqld_bootstrap, - $opt->{'defaults-file'}, - $mysqld_opt, - "--bootstrap", - "--basedir=$opt->{basedir}", - "--datadir=$opt->{ldata}", - "--log-warnings=0", - "--max_allowed_packet=8M", - "--default-storage-engine=MyISAM", - "--net_buffer_length=16K", - "--enforce-storage-engine=\"\"", - @args, - ); - -# ---------------------------------------------------------------------- -# Create the system and help tables by passing them to "mysqld --bootstrap" -# ---------------------------------------------------------------------- - -report_verbose_wait($opt,"Installing MySQL system tables..."); - -open(SQL, $create_system_tables) - or error($opt,"can't open $create_system_tables for reading: $!"); -open(SQL2, $fill_system_tables) - or error($opt,"can't open $fill_system_tables for reading: $!"); -# FIXME > /dev/null ? -if ( open(PIPE, "| $mysqld_install_cmd_line") ) -{ - print PIPE "use mysql;\n"; - while ( <SQL> ) - { - # When doing a "cross bootstrap" install, no reference to the current - # host should be added to the system tables. So we filter out any - # lines which contain the current host name. - next if $opt->{'cross-bootstrap'} and /\@current_hostname/; - - print PIPE $_; - } - while ( <SQL2> ) - { - # TODO: make it similar to the above condition when we're sure - # @@hostname returns a fqdn - # When doing a "cross bootstrap" install, no reference to the current - # host should be added to the system tables. So we filter out any - # lines which contain the current host name. - next if /\@current_hostname/; - - print PIPE $_; - } - close PIPE; - close SQL; - close SQL2; - - report_verbose($opt,"OK"); - - # ---------------------------------------------------------------------- - # Pipe fill_help_tables.sql to "mysqld --bootstrap" - # ---------------------------------------------------------------------- - - report_verbose_wait($opt,"Filling help tables..."); - open(SQL, $fill_help_tables) - or error($opt,"can't open $fill_help_tables for reading: $!"); - # FIXME > /dev/null ? - if ( open(PIPE, "| $mysqld_install_cmd_line") ) - { - print PIPE "use mysql;\n"; - while ( <SQL> ) - { - print PIPE $_; - } - close PIPE; - close SQL; - - report_verbose($opt,"OK"); - } - else - { - warning($opt,"HELP FILES ARE NOT COMPLETELY INSTALLED!", - "The \"HELP\" command might not work properly"); - } - - # ---------------------------------------------------------------------- - # Pipe maria_add_gis_sp.sql to "mysqld --bootstrap" - # ---------------------------------------------------------------------- - - report_verbose_wait($opt,"Creating OpenGIS required SP-s..."); - open(SQL, $maria_add_gis_sp) - or error($opt,"can't open $maria_add_gis_sp for reading: $!"); - # FIXME > /dev/null ? - if ( open(PIPE, "| $mysqld_install_cmd_line") ) - { - print PIPE "use mysql;\n"; - while ( <SQL> ) - { - print PIPE $_; - } - close PIPE; - close SQL; - - report_verbose($opt,"OK"); - } - else - { - warning($opt,"OPENGIS REQUIRED SP-S WERE NOT COMPLETELY INSTALLED!", - "GIS extentions might not work properly"); - } - - report_verbose($opt,"To start mysqld at boot time you have to copy", - "support-files/mysql.server to the right place " . - "for your system"); - - if ( !$opt->{'cross-bootstrap'} ) - { - # This is not a true installation on a running system. The end user must - # set a password after installing the data files on the real host system. - # At this point, there is no end user, so it does not make sense to print - # this reminder. - 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} ) - { - report($opt, - "You can start the MySQL daemon with:", - "", - " cd " . '@prefix@' . " ; $bindir/mysqld_safe &", - "", - "You can test the MySQL daemon with mysql-test-run.pl", - "", - " cd mysql-test ; perl mysql-test-run.pl"); - } - report($opt, - "Please report any problems at http://bugs.mysql.com/", - "", - "The latest information about MySQL is available on the web at", - "", - " http://www.mysql.com", - "", - "Support MySQL by buying support/licenses at http://shop.mysql.com"); - } - exit 0 -} -else -{ - error($opt, - "Installation of system tables failed!", - "", - "Examine the logs in $opt->{ldata} for more information.", - "You can try to start the mysqld daemon with:", - "$mysqld --skip-grant &", - "and use the command line tool", - "$bindir/mysql to connect to the mysql", - "database and look at the grant tables:", - "", - "shell> $bindir/mysql -u root mysql", - "mysql> show tables;", - "", - "Try 'mysqld --help' if you have problems with paths. Using --log", - "gives you a log in $opt->{ldata} that may be helpful.", - "", - "The latest information about MySQL is available on the web at", - "http://www.mysql.com", - "Please consult the MySQL manual section: 'Problems running mysql_install_db',", - "and the manual section that describes problems on your OS.", - "Another information source is the MySQL email archive.", - "", - "Please check all of the above before submitting a bug report", - "at http://bugs.mysql.com/") -} - -############################################################################## -# -# Misc -# -############################################################################## - -sub report_verbose -{ - my $opt = shift; - my $text = shift; - - report_verbose_wait($opt, $text, @_); - print "\n\n"; -} - -sub report_verbose_wait -{ - my $opt = shift; - my $text = shift; - - if ( $opt->{verbose} or (!$opt->{rpm} and !$opt->{'cross-bootstrap'}) ) - { - print "$text"; - map {print "\n$_"} @_; - } -} - -sub report -{ - my $opt = shift; - my $text = shift; - - print "$text\n"; - map {print "$_\n"} @_; - print "\n"; -} - -sub error -{ - my $opt = shift; - my $text = shift; - - print "FATAL ERROR: $text\n"; - map {print "$_\n"} @_; - exit 1; -} - -sub warning -{ - my $opt = shift; - my $text = shift; - - print "WARNING: $text\n"; - map {print "$_\n"} @_; - print "\n"; -} diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 5afeb6a6f47..8d706e4c5ad 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -37,9 +37,9 @@ force=0 in_rpm=0 ip_only=0 cross_bootstrap=0 -install_params="" auth_root_authentication_method=normal auth_root_socket_user='root' +skip_test_db=0 usage() { @@ -80,11 +80,10 @@ Usage: $0 [OPTIONS] --defaults-file=path Read only this configuration file. --rpm For internal use. This option is used by RPM files during the MariaDB installation process. - --skip-auth-anonymous-user - Do not install an unprivileged anonymous user. --skip-name-resolve Use IP addresses rather than hostnames when creating grant table entries. This option can be useful if your DNS does not work. + --skip-test-db Don't install a test database. --srcdir=path The path to the MariaDB source directory. This option uses the compiled binaries and support files within the source tree, useful for if you don't want to install @@ -168,9 +167,6 @@ parse_arguments() # # --windows is a deprecated alias cross_bootstrap=1 ;; - --skip-auth-anonymous-user) - install_params="$install_params -SET @skip_auth_anonymous=1;" ;; --auth-root-authentication-method=normal) auth_root_authentication_method=normal ;; --auth-root-authentication-method=socket) @@ -179,6 +175,7 @@ SET @skip_auth_anonymous=1;" ;; usage ;; --auth-root-socket-user=*) auth_root_socket_user="$(parse_arg "$arg")" ;; + --skip-test-db) skip_test_db=1 ;; *) if test -n "$pick_args" @@ -353,8 +350,9 @@ create_system_tables="$srcpkgdatadir/mysql_system_tables.sql" create_system_tables2="$srcpkgdatadir/mysql_performance_tables.sql" fill_system_tables="$srcpkgdatadir/mysql_system_tables_data.sql" maria_add_gis_sp="$buildpkgdatadir/maria_add_gis_sp_bootstrap.sql" +mysql_test_db="$srcpkgdatadir/mysql_test_db.sql" -for f in "$fill_help_tables" "$create_system_tables" "$create_system_tables2" "$fill_system_tables" "$maria_add_gis_sp" +for f in "$fill_help_tables" "$create_system_tables" "$create_system_tables2" "$fill_system_tables" "$maria_add_gis_sp" "$mysql_test_db" do if test ! -f "$f" then @@ -418,7 +416,7 @@ then fi # Create database directories -for dir in "$ldata" "$ldata/mysql" "$ldata/test" +for dir in "$ldata" "$ldata/mysql" do if test ! -d "$dir" then @@ -467,20 +465,31 @@ mysqld_install_cmd_line() --net_buffer_length=16K } +cat_sql() +{ + echo "use mysql;" + + case "$auth_root_authentication_method" in + normal) + echo "SET @skip_auth_root_nopasswd=NULL;" + echo "SET @auth_root_socket=NULL;" + ;; + socket) + echo "SET @skip_auth_root_nopasswd=1;" + echo "SET @auth_root_socket='$auth_root_socket_user';" + ;; + esac + + cat "$create_system_tables" "$create_system_tables2" "$fill_system_tables" "$fill_help_tables" "$maria_add_gis_sp" + if test "$skip_test_db" -eq 0 + then + cat "$mysql_test_db" + fi +} # Create the system and help tables by passing them to "mysqld --bootstrap" s_echo "Installing MariaDB/MySQL system tables in '$ldata' ..." -case "$auth_root_authentication_method" in - normal) - install_params="$install_params -SET @skip_auth_root_nopasswd=NULL; -SET @auth_root_socket=NULL;" ;; - socket) - install_params="$install_params -SET @skip_auth_root_nopasswd=1; -SET @auth_root_socket='$auth_root_socket_user';" ;; -esac -if { echo "use mysql;$install_params"; cat "$create_system_tables" "$create_system_tables2" "$fill_system_tables" "$fill_help_tables" "$maria_add_gis_sp"; } | eval "$filter_cmd_line" | mysqld_install_cmd_line > /dev/null +if cat_sql | eval "$filter_cmd_line" | mysqld_install_cmd_line > /dev/null then s_echo "OK" else diff --git a/scripts/mysql_system_tables_data.sql b/scripts/mysql_system_tables_data.sql index 4821b18bcbf..0fbbfe4701f 100644 --- a/scripts/mysql_system_tables_data.sql +++ b/scripts/mysql_system_tables_data.sql @@ -26,21 +26,10 @@ -- a plain character SELECT LOWER( REPLACE((SELECT REPLACE(@@hostname,'_','\_')),'%','\%') )INTO @current_hostname; - --- Fill "db" table with default grants for anyone to --- access database 'test' and 'test_%' if "db" table didn't exist -CREATE TEMPORARY TABLE tmp_db LIKE db; -INSERT INTO tmp_db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y','Y'); -INSERT INTO tmp_db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y','Y'); -INSERT INTO db SELECT * FROM tmp_db WHERE @had_db_table=0; -DROP TABLE tmp_db; - - -- Fill "user" table with default users allowing root access -- from local machine if "user" table didn't exist before CREATE TEMPORARY TABLE tmp_user_nopasswd LIKE user; CREATE TEMPORARY TABLE tmp_user_socket LIKE user; -CREATE TEMPORARY TABLE tmp_user_anonymous LIKE user; -- Classic passwordless root account. INSERT INTO tmp_user_nopasswd VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N', 'N','', 0); REPLACE INTO tmp_user_nopasswd SELECT @current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N','N','',0 FROM dual WHERE @current_hostname != 'localhost'; @@ -48,14 +37,10 @@ REPLACE INTO tmp_user_nopasswd VALUES ('127.0.0.1','root','','Y','Y','Y','Y','Y' REPLACE INTO tmp_user_nopasswd VALUES ('::1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'','','N','N', '', 0); -- More secure root account using unix sucket auth. INSERT INTO tmp_user_socket VALUES ('localhost',IFNULL(@auth_root_socket, 'root'),'','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0,'unix_socket','','N', 'N','', 0); --- Anonymous user with no privileges. -INSERT INTO tmp_user_anonymous (host,user) VALUES ('localhost',''); -INSERT INTO tmp_user_anonymous (host,user) SELECT @current_hostname,'' FROM dual WHERE @current_hostname != 'localhost'; INSERT INTO user SELECT * FROM tmp_user_nopasswd WHERE @had_user_table=0 AND @skip_auth_root_nopasswd IS NULL; INSERT INTO user SELECT * FROM tmp_user_socket WHERE @had_user_table=0 AND @auth_root_socket IS NOT NULL; -INSERT INTO user SELECT * FROM tmp_user_anonymous WHERE @had_user_table=0 AND @skip_auth_anonymous IS NULL; -DROP TABLE tmp_user_nopasswd, tmp_user_socket, tmp_user_anonymous; +DROP TABLE tmp_user_nopasswd, tmp_user_socket; CREATE TEMPORARY TABLE tmp_proxies_priv LIKE proxies_priv; INSERT INTO tmp_proxies_priv VALUES ('localhost', 'root', '', '', TRUE, '', now()); diff --git a/scripts/mysql_test_db.sql b/scripts/mysql_test_db.sql new file mode 100644 index 00000000000..c1bb3661ec3 --- /dev/null +++ b/scripts/mysql_test_db.sql @@ -0,0 +1,31 @@ +-- Copyright (c) 2018 MariaDB Foundation +-- +-- 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 +-- the Free Software Foundation; version 2 of the License. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program; if not, write to the Free Software +-- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + +CREATE DATABASE IF NOT EXISTS test CHARACTER SET latin1 COLLATE latin1_swedish_ci; + +-- Fill "db" table with default grants for anyone to +-- access database 'test' and 'test_%' if "db" table didn't exist +CREATE TEMPORARY TABLE tmp_db LIKE db; +INSERT INTO tmp_db VALUES ('%','test','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y','Y'); +INSERT INTO tmp_db VALUES ('%','test\_%','','Y','Y','Y','Y','Y','Y','N','Y','Y','Y','Y','Y','Y','Y','Y','N','N','Y','Y','Y'); +INSERT INTO db SELECT * FROM tmp_db WHERE @had_db_table=0; +DROP TABLE tmp_db; + +-- Anonymous user with no privileges. +CREATE TEMPORARY TABLE tmp_user_anonymous LIKE user; +INSERT INTO tmp_user_anonymous (host,user) VALUES ('localhost',''); +INSERT INTO tmp_user_anonymous (host,user) SELECT @current_hostname,'' FROM dual WHERE @current_hostname != 'localhost'; +INSERT INTO user SELECT * FROM tmp_user_anonymous WHERE @had_user_table=0; +DROP TABLE tmp_user_anonymous; diff --git a/scripts/wsrep_sst_xtrabackup.sh b/scripts/wsrep_sst_xtrabackup.sh index 3a30f5898db..41ed4485de5 100644 --- a/scripts/wsrep_sst_xtrabackup.sh +++ b/scripts/wsrep_sst_xtrabackup.sh @@ -399,7 +399,6 @@ if [[ ! ${WSREP_SST_OPT_ROLE} == 'joiner' && ! ${WSREP_SST_OPT_ROLE} == 'donor' fi read_cnf -setup_ports get_stream get_transfer |