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 +# Anton Kachalov +# Konstantin A. Lepikhov +# # 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 <&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