mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
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)
This commit is contained in:
@@ -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
|
||||
# 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 "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 &"
|
||||
|
||||
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
|
||||
echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:"
|
||||
echo "cd sql-bench ; perl run-all-tests"
|
||||
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
|
||||
|
Reference in New Issue
Block a user