summaryrefslogtreecommitdiff
path: root/scripts/mysql_install_db.sh
diff options
context:
space:
mode:
authorunknown <msvensson@pilot.blaudden>2007-02-26 11:49:24 +0100
committerunknown <msvensson@pilot.blaudden>2007-02-26 11:49:24 +0100
commit73559bca22ecb3300fee5878cb2faae336c463a5 (patch)
tree69ad68fe79bb46e8afcec3061599cc355cb386d9 /scripts/mysql_install_db.sh
parentb14da5242e1dcbaad98502fd02817fabbeaeb7b1 (diff)
downloadmariadb-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.sh201
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