ALT Linux repositórios
S: | 8.0.30-alt2 |
5.0: | 5.0.89-alt1 |
4.1: | 5.0.51-alt2.a |
4.0: | 5.0.51-alt2.a.M40.2 |
+updates: | 5.0.51-alt2.a.M40.1 |
3.0: | 4.0.24-alt1 |
Group :: Banco de dados
RPM: MySQL
Main Changelog Spec Patches Sources Download Gear Bugs e FR Repocop
Patch: mysql-5.0.51-alt-mysql_install_db.patch
Download
Download
diff --git a/mysql/scripts/mysql_install_db.sh b/mysql/scripts/mysql_install_db.sh
index 5716d4f..9daa1be 100644
--- a/mysql/scripts/mysql_install_db.sh
+++ b/mysql/scripts/mysql_install_db.sh
@@ -1,6 +1,8 @@
#!/bin/sh
-# Copyright (C) 2002-2003 MySQL AB
-#
+# Copyright (C) 2001-2007 Dmitry V. Levin <ldv@altlinux.org>
+# Anton Kachalov <mouse@altlinux.org>
+# Konstantin A. Lepikhov <lakostis@altlinux.org>
+#
# 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.
@@ -14,412 +16,130 @@
# 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
-#
-# All unrecognized arguments to this script are passed to mysqld.
-
-basedir=""
-ldata=""
-srcdir=""
-
-args=""
-defaults=""
-mysqld_opt=""
-user=""
-
-force=0
-in_rpm=0
-ip_only=0
-windows=0
-
-usage()
-{
- cat <<EOF
-Usage: $0 [OPTIONS]
- --basedir=path The path to the MySQL installation directory.
- --datadir=path The path to the MySQL data directory.
- --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.
- --ldata=path The path to the MySQL data directory.
- --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 For internal use. The directory under which
- mysql_install_db looks for support files such as the
- error message file and the file for popoulating the
- help 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.
- --windows For internal use. This option is used for creating
- Windows distributions.
-
-All other options are passed to the mysqld program
-
-EOF
- exit 1
-}
-
-s_echo()
-{
- if test "$in_rpm" -eq 0 -a "$windows" -eq 0
- then
- echo "$1"
- fi
-}
-
-parse_arg()
-{
- echo "$1" | sed -e 's/^[^=]*=//'
-}
-
-parse_arguments()
-{
- # 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.
- pick_args=
- if test "$1" = PICK-ARGS-FROM-ARGV
- then
- pick_args=1
- shift
- fi
-
- for arg
- do
- case "$arg" in
- --force) force=1 ;;
- --basedir=*) basedir=`parse_arg "$arg"` ;;
- --srcdir=*) srcdir=`parse_arg "$arg"` ;;
- --ldata=*|--datadir=*) ldata=`parse_arg "$arg"` ;;
- --user=*)
- # 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=`parse_arg "$arg"` ;;
- --skip-name-resolve) ip_only=1 ;;
- --verbose) verbose=1 ;; # Obsolete
- --rpm) in_rpm=1 ;;
- --help) usage ;;
- --no-defaults|--defaults-file=*|--defaults-extra-file=*)
- defaults="$arg" ;;
-
- --windows)
- # This is actually a "cross bootstrap" argument 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.
- windows=1 ;;
-
- *)
- if test -n "$pick_args"
- then
- # This sed command 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 ($basedir, $ldata, etc.)
- #args="$args "`echo "$arg" | sed -e 's,\([^a-zA-Z0-9_.-]\),\\\\\1,g'`
- args="$args $arg"
- fi
- ;;
- esac
- done
-}
-
-# Try to find a specific file within --basedir which can either be a binary
-# release or installed source directory and return the path.
-find_in_basedir()
-{
- case "$1" in
- --dir)
- return_dir=1; shift
- ;;
- esac
-
- file=$1; shift
-
- for dir in "$@"
- do
- if test -f "$basedir/$dir/$file"
- then
- if test -n "$return_dir"
- then
- echo "$basedir/$dir"
- else
- echo "$basedir/$dir/$file"
- fi
- break
- fi
- done
-}
+PROG="${0##*/}"
-missing_in_basedir()
+GetConf()
{
- echo "FATAL ERROR: Could not find $* inside --basedir"
- echo
- echo "When using --basedir you must point either into a MySQL binary"
- echo "distribution directory or a compiled tree previously populated"
- echo "by 'make install'"
+ local group=$1
+ [ -n "$group" ] || group="$PROG"
+ shift
+
+ local name=$1
+ shift
+
+ local varname=$1
+ [ -n "$varname" ] || varname="$name"
+ shift
+
+ local default=$1
+ shift
+
+ local val=`my_print_defaults "$group" |grep "^--$name=" |tail -1`
+ if [ -n "$val" ]; then
+ eval export $varname="${val#--$name=}"
+ else
+ eval export $varname="$default"
+ fi
}
-# 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.
-parse_arguments PICK-ARGS-FROM-ARGV "$@"
+GetConf '' mysqld '' @sbindir@/mysqld
+GetConf mysqld chroot '' @localstatedir@
+GetConf mysqld datadir '' /db
+GetConf mysqld basedir '' /usr
-# We can now find my_print_defaults, either in the supplied --basedir
-# location or in the installed area.
-if test -n "$basedir"
-then
- print_defaults=`find_in_basedir my_print_defaults bin extra`
- if ! test -x "$print_defaults"
- then
- missing_in_basedir my_print_defaults
- exit 1
- fi
-else
- print_defaults="@bindir@/my_print_defaults"
- if ! test -x "$print_defaults"
- then
- echo "FATAL ERROR: Could not find $print_defaults"
- echo
- echo "If you are using a binary release, you must run this script from"
- echo "within the directory the archive extracted into. If you compiled"
- echo "MySQL yourself you must run 'make install' first."
- exit 1
- fi
-fi
-
-# 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.
-parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
-parse_arguments PICK-ARGS-FROM-ARGV "$@"
-
-# Path to MySQL installation directory
-if test -z "$basedir"
-then
- basedir="@prefix@"
- bindir="@bindir@"
- mysqld="@libexecdir@/mysqld"
- pkgdatadir="@pkgdatadir@"
-else
- bindir="$basedir/bin"
- # We set up bootstrap-specific paths later, so skip this for --windows
- if test "$windows" -eq 0
- then
- pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql`
- if test -z "$pkgdatadir"
- then
- missing_in_basedir fill_help_tables.sql
- exit 1
- fi
- mysqld=`find_in_basedir mysqld libexec sbin bin`
- if ! test -x "$mysqld"
- then
- missing_in_basedir mysqld
- exit 1
- fi
- fi
-fi
-
-# Path to data directory
-if test -z "$ldata"
-then
- ldata="@localstatedir@"
+if ! cd "$chroot$datadir"; then
+ echo "Cannot change to datadir '$datadir'"
+ exit 1
fi
-# Set up paths to SQL scripts required for bootstrap and ensure they exist.
-if test -n "$srcdir"
-then
- pkgdatadir="$srcdir/scripts"
-fi
-
-fill_help_tables="$pkgdatadir/fill_help_tables.sql"
-create_system_tables="$pkgdatadir/mysql_system_tables.sql"
-fill_system_tables="$pkgdatadir/mysql_system_tables_data.sql"
-
-for f in $fill_help_tables $create_system_tables $fill_system_tables
-do
- if test ! -f "$f"
- then
- echo "FATAL ERROR: Could not find SQL file '$f'"
- exit 1
- fi
+hostname=`/bin/hostname` # Install this too in the user table
+
+# Initialize variables
+fill_help_tables=
+mysql_system_tables=
+mysql_system_tables_data=
+create_user=
+
+for file in mysql_system_tables mysql_system_tables_data fill_help_tables; do
+ if test ! -f "@datadir@/mysql/$file.sql"
+ then
+ echo "FATAL ERROR: Could not find SQL file '$file.sql' in"
+ echo "@datadir@/mysql"
+ exit 1
+ else
+ eval $file="@datadir@/mysql/$file.sql"
+ fi
done
-# Set up Windows-specific paths
-if test "$windows" -eq 1
-then
- mysqld="./sql/mysqld"
- if test -n "$srcdir" -a -f "$srcdir/sql/share/english/errmsg.sys"
- then
- mysqld_opt="--language=$srcdir/sql/share/english"
- else
- mysqld_opt="--language=./sql/share/english"
- fi
-fi
-
-# Make sure mysqld is available in default location (--basedir option is
-# already tested above).
-if test ! -x "$mysqld"
-then
- echo "FATAL ERROR: $mysqld not found!"
- exit 1
-fi
-
-# Try to determine the hostname
-hostname=`@HOSTNAME@`
-
-# Check if hostname is valid
-if test "$windows" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
-then
- resolved=`$bindir/resolveip $hostname 2>&1`
- if [ $? -ne 0 ]
- then
- resolved=`$bindir/resolveip localhost 2>&1`
- if [ $? -ne 0 ]
- then
- echo "Neither host '$hostname' nor 'localhost' could be looked up with"
- echo "$bindir/resolveip"
- echo "Please configure the 'hostname' command to return a correct"
- echo "hostname."
- echo "If you want to solve this at a later stage, restart this script"
- echo "with the --force option"
- exit 1
- fi
- echo "WARNING: The host '$hostname' could not be looked up with resolveip."
- echo "This probably means that your libc libraries are not 100 % compatible"
- echo "with this binary MySQL version. The MySQL daemon, mysqld, should work"
- echo "normally with the exception that host name resolving will not work."
- echo "This means that you should use IP addresses instead of hostnames"
- echo "when specifying MySQL privileges !"
- fi
-fi
-
-if test "$ip_only" -eq 1
-then
- hostname=`echo "$resolved" | awk '/ /{print $6}'`
-fi
-
-# Create database directories mysql & test
-for dir in $ldata $ldata/mysql $ldata/test
-do
- if test ! -d $dir
- then
- mkdir -p $dir
- chmod 700 $dir
- fi
- if test -w / -a ! -z "$user"
- then
- chown $user $dir
- fi
-done
-
-if test -n "$user"
-then
- args="$args --user=$user"
-fi
+[ -f "$chroot$datadir/mysql/user.frm" ] || create_user=1
# Peform the install of system tables
-mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}"
-mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \
- --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb \
- --skip-ndbcluster $args --max_allowed_packet=8M --net_buffer_length=16K"
-
-# Pipe mysql_system_tables.sql to "mysqld --bootstrap"
-s_echo "Installing MySQL system tables..."
-if `(echo "use mysql;"; cat $create_system_tables $fill_system_tables) | $mysqld_install_cmd_line`
-then
- s_echo "OK"
-
- s_echo "Filling help tables..."
- # Pipe fill_help_tables.sql to "mysqld --bootstrap"
- if `(echo "use mysql;"; cat $fill_help_tables) | $mysqld_install_cmd_line`
- then
- # Fill suceeded
- s_echo "OK"
- else
- echo
- echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!"
- echo "The \"HELP\" command might not work properly"
- echo
- fi
-
- s_echo
- s_echo "To start mysqld at boot time you have to copy"
- s_echo "support-files/mysql.server to the right place for your system"
- s_echo
-
- if test "$windows" -eq 0
- then
- # A root password should of course also be set on Windows!
- # The reason for not displaying these prompts here is that when
- # executing this script with the --windows argument the script
- # is used to generate system tables mainly used by the
- # windows installer. And thus the password should not be set until
- # those files has been copied to the target system
- echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !"
- echo "To do so, start the server, then issue the following commands:"
- echo "$bindir/mysqladmin -u root password 'new-password'"
- echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
- echo
- echo "Alternatively you can run:"
- echo "$bindir/mysql_secure_installation"
- echo
- echo "which will also give you the option of removing the test"
- echo "databases and anonymous user created by default. This is"
- echo "strongly recommended for production servers."
- echo
- echo "See the manual for more instructions."
- echo
-
- if test "$in_rpm" -eq 0
- then
- echo "You can start the MySQL daemon with:"
- echo "cd @prefix@ ; $bindir/mysqld_safe &"
- echo
- echo "You can test the MySQL daemon with mysql-test-run.pl"
- echo "cd mysql-test ; perl mysql-test-run.pl"
- echo
- fi
- echo "Please report any problems with the @scriptdir@/mysqlbug script!"
- echo
- echo "The latest information about MySQL is available on the web at"
- echo "http://www.mysql.com"
- echo "Support MySQL by buying support/licenses at http://shop.mysql.com"
- fi
- exit 0
+if [ -n "$mysql_system_tables" -o -n "$mysql_system_tables_data" -o -n "$fill_help_tables" ]; then
+ echo "Installing all prepared tables"
+ for dir in mysql test; do
+ [ -d "$chroot$datadir/$dir" ] || mkdir $chroot$datadir/$dir
+ # Change permissions to fix any new files.
+ chown -R mysql:mysql "$chroot$datadir/$dir"
+
+ # Fix permissions for the permission database so that only the user can read them.
+ chmod -R g-w,o-rw "$chroot$datadir/$dir"
+ done
+ if eval "(echo 'use mysql;'; cat $mysql_system_tables $mysql_system_tables_data $fill_help_tables) | \
+ $mysqld --bootstrap --skip-innodb --skip-bdb --skip-ndbcluster \
+ --max_allowed_packet=8M \
+ --net_buffer_length=16K"
+ then
+ if [ -n "$create_user" ]; then
+ cat << END_OF_DATA
+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.
+
+END_OF_DATA
+ fi
+ cat << END_OF_DATA
+Please report any problems with the @bindir@/mysqlbug script!
+
+The latest information about MySQL is available on the web at
+http://www.mysql.com
+END_OF_DATA
+ else
+ cat << END_OF_DATA
+Installation of system tables failed!
+
+Examine the logs in $chroot/log for more information.
+You can also try to start the mysqld daemon with:
+$mysqld --skip-grant &
+You can 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 $chroot/log 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 mailing us!
+And if you do mail us, you MUST use the @bindir@/mysqlbug script!
+END_OF_DATA
+ exit 1
+ fi
else
- echo "Installation of system tables failed!"
- echo
- echo "Examine the logs in $ldata for more information."
- echo "You can try to start the mysqld daemon with:"
- echo "$mysqld --skip-grant &"
- echo "and use the command line tool"
- echo "$bindir/mysql to connect to the mysql"
- echo "database and look at the grant tables:"
- echo
- echo "shell> $bindir/mysql -u root mysql"
- echo "mysql> show tables"
- echo
- echo "Try 'mysqld --help' if you have problems with paths. Using --log"
- echo "gives you a log in $ldata that may be helpful."
- echo
- echo "The latest information about MySQL is available on the web at"
- echo "http://www.mysql.com"
- echo "Please consult the MySQL manual section: 'Problems running mysql_install_db',"
- echo "and the manual section that describes problems on your OS."
- echo "Another information source is the MySQL email archive."
- echo "Please check all of the above before mailing us!"
- echo "And if you do mail us, you MUST use the @scriptdir@/mysqlbug script!"
- exit 1
+ echo No additional actions have to be done with MySQL privilege tables.
fi