diff options
author | unknown <msvensson@pilot.blaudden> | 2007-02-26 11:49:24 +0100 |
---|---|---|
committer | unknown <msvensson@pilot.blaudden> | 2007-02-26 11:49:24 +0100 |
commit | 73559bca22ecb3300fee5878cb2faae336c463a5 (patch) | |
tree | 69ad68fe79bb46e8afcec3061599cc355cb386d9 /scripts/mysql_install_db.sh | |
parent | b14da5242e1dcbaad98502fd02817fabbeaeb7b1 (diff) | |
download | mariadb-git-73559bca22ecb3300fee5878cb2faae336c463a5.tar.gz |
Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Use mysql_system_tables.sql to create MySQL system tables in
all places where we create them(mysql_install_db, mysql-test-run-pl
and mysql_fix_privilege_tables.sql)
BitKeeper/deleted/.del-init_db.sql:
Rename: mysql-test/init_db.sql -> BitKeeper/deleted/.del-init_db.sql
BitKeeper/deleted/.del-init_db.sql~a77d572c39d5a1f8:
Rename: mysql-test/lib/init_db.sql -> BitKeeper/deleted/.del-init_db.sql~a77d572c39d5a1f8
BitKeeper/deleted/.del-mysql_create_system_tables.sh:
Rename: scripts/mysql_create_system_tables.sh -> BitKeeper/deleted/.del-mysql_create_system_tables.sh
BitKeeper/etc/ignore:
Added scripts/mysql_fix_privilege_tables.sql to the ignore list
mysql-test/Makefile.am:
lib/init_db.sql has been removed
mysql-test/mysql-test-run.pl:
- Build var/tmp/bootstrap.sql from mysql_system_tables.sql,
mysql_test_data_timezone.sql and fill_help_tables.sql and use
it when bootsraping the system tables to use during test.
mysql-test/r/create.result:
Update result file
mysql-test/r/derived.result:
Update result file
mysql-test/r/join.result:
Update result file
mysql-test/r/mysql_upgrade.result:
Update result file
mysql-test/r/sp-security.result:
Update result file
mysql-test/t/create.test:
Add user mysqltest_1 before trying to connect as that user - no
anon users by default anymore
mysql-test/t/derived.test:
Add user mysqltest_1 before trying to connect as that user - no
anon users by default anymore
mysql-test/t/grant2.test:
Add anonymous users for part of thes that need it.
mysql-test/t/grant_cache.test:
Add anonymous users for part of thes that need it.
mysql-test/t/init_connect.test:
Add anonymous users for part of thes that need it.
mysql-test/t/lock_multi.test:
Add anonymous users for part of thes that need it.
mysql-test/t/ndb_basic.test:
Connect as "root", blank user will take currently logged in
username
mysql-test/t/ndb_index_ordered.test:
Connect as "root", blank user will take currently logged in
username
mysql-test/t/ndb_multi.test:
Connect as "root", blank user will take currently logged in
username
mysql-test/t/overflow.test:
Connect as root - no anonymous users by default anymore
mysql-test/t/rpl_temporary.test:
Add anonymous users for the test
mysql-test/t/xa.test:
Connect as "root", blank user wil pick currently logged in user
scripts/Makefile.am:
Remove mysql_create_system_tables.sh
Add mysql_system_tables.sql and mysql_test_data_timezone.sql
Build mysql_fix_privilege_tables.sql from mysql_system_tables.sql
and mysql_fix_privilege_tables.sql.in
scripts/mysql_fix_privilege_tables.sh:
Update message describing what the script does
scripts/mysql_fix_privilege_tables.sql.in:
Remove the part that creates system tables as that will be added to
mysql_fix_privileg_tables.sql from mysql_system_tables.sql
Change all comments to use #
scripts/mysql_install_db.sh:
Use mysql_system_tables.sql to create the MySQL system tables
Update comments and indentation
Add more descriptive comments about --windows switch
Reduce number of hardcoded names for the SQL files the script
looks for
mysql-test/include/add_anonymous_users.inc:
New BitKeeper file ``mysql-test/include/add_anonymous_users.inc''
mysql-test/include/delete_anonymous_users.inc:
New BitKeeper file ``mysql-test/include/delete_anonymous_users.inc''
scripts/mysql_system_tables.sql:
New BitKeeper file ``scripts/mysql_system_tables.sql''
scripts/mysql_test_data_timezone.sql:
New BitKeeper file ``scripts/mysql_test_data_timezone.sql''
Diffstat (limited to 'scripts/mysql_install_db.sh')
-rw-r--r-- | scripts/mysql_install_db.sh | 201 |
1 files changed, 120 insertions, 81 deletions
diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh index 0e89a32aa66..ed5c8c97d6b 100644 --- a/scripts/mysql_install_db.sh +++ b/scripts/mysql_install_db.sh @@ -14,8 +14,7 @@ # 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 privilege tables db, host, user, tables_priv, -# columns_priv, procs_priv in the mysql database, as well as the func table. +# This scripts creates the MySQL Server system tables # # All unrecognized arguments to this script are passed to mysqld. @@ -30,6 +29,14 @@ case "$1" in ;; esac +s_echo() +{ + if test "$in_rpm" -eq 0 -a "$windows" -eq 0 + then + echo $1 + fi +} + 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 @@ -53,9 +60,20 @@ parse_arguments() { # where a chown of datadir won't help) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;; --skip-name-resolve) ip_only=1 ;; - --verbose) verbose=1 ;; + --verbose) verbose=1 ;; # Obsolete --rpm) in_rpm=1 ;; - --windows) windows=1 ;; + + --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 @@ -93,8 +111,6 @@ bindir= basedir= srcdir= force=0 -verbose=0 -fill_help_tables="" parse_arguments `$print_defaults $defaults mysqld mysql_install_db` parse_arguments PICK-ARGS-FROM-ARGV "$@" @@ -119,29 +135,42 @@ else fi fi -# find fill_help_tables.sh +# Find SQL scripts needed for bootstrap +fill_help_tables="fill_help_tables.sql" +create_system_tables="mysql_system_tables.sql" if test -n "$srcdir" then - fill_help_tables=$srcdir/scripts/fill_help_tables.sql + fill_help_tables=$srcdir/scripts/$fill_help_tables + create_system_tables=$srcdir/scripts/$create_system_tables else for i in $basedir/support-files $basedir/share $basedir/share/mysql \ $basedir/scripts `pwd` `pwd`/scripts @pkgdatadir@ do - if test -f $i/fill_help_tables.sql + if test -f $i/$fill_help_tables then pkgdatadir=$i fi done - fill_help_tables=$pkgdatadir/fill_help_tables.sql + fill_help_tables=$pkgdatadir/$fill_help_tables + create_system_tables=$pkgdatadir/$create_system_tables +fi + +if test ! -f $create_system_tables +then + echo "FATAL ERROR: Could not find SQL file '$create_system_tables' in" + echo "@pkgdatadir@ or inside $basedir" + exit 1; fi if test ! -f $fill_help_tables then - echo "Could not find help file 'fill_help_tables.sql' in @pkgdatadir@ or inside $basedir". + echo "FATAL ERROR: Could not find help file '$fill_help_tables' in" + echo "@pkgdatadir@ or inside $basedir" exit 1; fi +# Find executables and paths mdata=$ldata/mysql mysqld=$execdir/mysqld mysqld_opt="" @@ -167,7 +196,7 @@ then echo "FATAL ERROR $mysqld not found!" exit 1 else - echo "Didn't find $mysqld" + echo "FATAL ERROR Didn't find $mysqld" echo "You should do a 'make install' before executing this script" exit 1 fi @@ -187,9 +216,10 @@ then 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 hostname." - echo "If you want to solve this at a later stage, restart this script with" - echo "the --force option" + 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." @@ -208,104 +238,113 @@ then fi # Create database directories mysql & test - - if test ! -d $ldata; then mkdir $ldata; chmod 700 $ldata ; fi - if test ! -d $ldata/mysql; then mkdir $ldata/mysql; chmod 700 $ldata/mysql ; fi - if test ! -d $ldata/test; then mkdir $ldata/test; chmod 700 $ldata/test ; fi - if test -w / -a ! -z "$user"; then - chown $user $ldata $ldata/mysql $ldata/test; - fi - -if test ! -f $mdata/db.frm -then - c_d="yes" +if test ! -d $ldata; then + mkdir $ldata; + chmod 700 $ldata ; +fi +if test ! -d $ldata/mysql; then + mkdir $ldata/mysql; + chmod 700 $ldata/mysql ; +fi +if test ! -d $ldata/test; then + mkdir $ldata/test; + chmod 700 $ldata/test ; +fi +if test -w / -a ! -z "$user"; then + chown $user $ldata $ldata/mysql $ldata/test; fi -if test $verbose = 1 +# Check is "db" table already exist +if test ! -f $mdata/db.frm then - create_option="verbose" -else - create_option="real" + db_table_already_exist="yes" fi if test -n "$user"; then args="$args --user=$user" fi -if test "$in_rpm" -eq 0 -a "$windows" -eq 0 -then - echo "Installing all prepared tables" -fi +# Peform the install of system tables mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}" mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \ ---skip-grant-tables --basedir=$basedir --datadir=$ldata --skip-innodb \ ---skip-bdb --skip-ndbcluster $args --max_allowed_packet=8M --net_buffer_length=16K" -if $scriptdir/mysql_create_system_tables $create_option $mdata $hostname $windows \ - | eval "$mysqld_install_cmd_line" +--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) | $mysqld_install_cmd_line` then + s_echo "OK" + if test -n "$fill_help_tables" then - if test "$in_rpm" -eq 0 -a "$windows" -eq 0 - then - echo "Fill help tables" - fi - (echo "use mysql;"; cat $fill_help_tables) | eval "$mysqld_install_cmd_line" - res=$? - if test $res != 0 + 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 fi - if test "$in_rpm" = 0 -a "$windows" = 0 - then - echo "" - echo "To start mysqld at boot time you have to copy support-files/mysql.server" - echo "to the right place for your system" - 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 - 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 "See the manual for more instructions." - # - # Print message about upgrading unless we have created a new db table. - if test -z "$c_d" - then - echo - echo "NOTE: If you are upgrading from a MySQL <= 3.22.10 you should run" - echo "the $bindir/mysql_fix_privilege_tables. Otherwise you will not be" - echo "able to use the new GRANT command!" - fi - echo - if test "$in_rpm" = "0" - then - echo "You can start the MySQL daemon with:" - echo "cd @prefix@ ; $bindir/mysqld_safe &" + # 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 "See the manual for more instructions." + + # Print message about upgrading unless we have created a new db table. + if test -z "$db_table_already_exist" + then + echo + echo "NOTE: If you are upgrading from a previous MySQL verision you " + echo "should run '$bindir/mysql_upgrade', to make sure all tables have " + echo "been upgraded for this version of MySQL" + fi echo - echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:" - echo "cd sql-bench ; perl run-all-tests" + + if test "$in_rpm" = "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 - 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" + 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 else echo "Installation of system tables failed!" echo echo "Examine the logs in $ldata for more information." - echo "You can also try to start the mysqld daemon with:" + echo "You can try to start the mysqld daemon with:" echo "$mysqld --skip-grant &" - echo "You can use the command line tool" + echo "and use the command line tool" echo "$bindir/mysql to connect to the mysql" echo "database and look at the grant tables:" echo |