mysql_install_db.sh 8.5 KB
Newer Older
unknown's avatar
unknown committed
1
#!/bin/sh
unknown's avatar
unknown committed
2
# Copyright (C) 2002-2003 MySQL AB
3
# For a more info consult the file COPYRIGHT distributed with this file.
unknown's avatar
unknown committed
4 5

# This scripts creates the privilege tables db, host, user, tables_priv,
6
# columns_priv, procs_priv in the mysql database, as well as the func table.
unknown's avatar
unknown committed
7
#
8
# All unrecognized arguments to this script are passed to mysqld.
unknown's avatar
unknown committed
9

10
in_rpm=0
11
windows=0
12
defaults=""
13
user=""
unknown's avatar
unknown committed
14

15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
case "$1" in
    --no-defaults|--defaults-file=*|--defaults-extra-file=*)
      defaults="$1"; shift
      ;;
esac

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
unknown's avatar
unknown committed
31

32 33 34 35 36
  for arg do
    case "$arg" in
      --force) force=1 ;;
      --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
      --ldata=*|--datadir=*) ldata=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
unknown's avatar
unknown committed
37 38 39 40 41
      --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=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
42
      --skip-name-resolve) ip_only=1 ;;
unknown's avatar
unknown committed
43
      --verbose) verbose=1 ;;
44 45
      --rpm) in_rpm=1 ;;
      --windows) windows=1 ;;
46 47 48 49 50 51 52 53 54 55
      *)
        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.
          args="$args "`echo "$arg" | sed -e 's,\([^a-zA-Z0-9_.-]\),\\\\\1,g'`
        fi
        ;;
    esac
  done
unknown's avatar
unknown committed
56 57
}

58 59 60 61 62
# Get first arguments from the my.cfg file, groups [mysqld] and
# [mysql_install_db], and then merge with the command line arguments
if test -x ./bin/my_print_defaults
then
  print_defaults="./bin/my_print_defaults"
63 64 65
elif test -x ./extra/my_print_defaults
then
  print_defaults="./extra/my_print_defaults"
66 67 68 69 70 71 72 73 74
elif test -x @bindir@/my_print_defaults
then
  print_defaults="@bindir@/my_print_defaults"
elif test -x @bindir@/mysql_print_defaults
then
  print_defaults="@bindir@/mysql_print_defaults"
else
  print_defaults="my_print_defaults"
fi
unknown's avatar
unknown committed
75

76 77 78 79 80 81
args=
ldata=
execdir=
bindir=
basedir=
force=0
unknown's avatar
unknown committed
82 83
verbose=0
fill_help_tables=""
84

85 86
parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
parse_arguments PICK-ARGS-FROM-ARGV "$@"
unknown's avatar
unknown committed
87

88 89 90 91 92
test -z "$ldata" && ldata=@localstatedir@
if test -z "$basedir"
then
  basedir=@prefix@
  bindir=@bindir@
unknown's avatar
unknown committed
93
  execdir=@libexecdir@
unknown's avatar
unknown committed
94
  pkgdatadir=@pkgdatadir@
95
else
96
  bindir="$basedir/bin"
unknown's avatar
unknown committed
97 98 99
  if test -x "$basedir/libexec/mysqld"
  then
    execdir="$basedir/libexec"
unknown's avatar
Merge  
unknown committed
100
  elif test -x "$basedir/sbin/mysqld"
unknown's avatar
unknown committed
101
  then
unknown's avatar
Merge  
unknown committed
102
    execdir="$basedir/sbin"
unknown's avatar
unknown committed
103 104 105 106 107
  else
    execdir="$basedir/bin"
  fi
fi

unknown's avatar
unknown committed
108
# find fill_help_tables.sh
109
for i in $basedir/support-files $basedir/share $basedir/share/mysql $basedir/scripts `pwd` `pwd`/scripts @pkgdatadir@
unknown's avatar
unknown committed
110 111 112 113 114 115 116
do
  if test -f $i/fill_help_tables.sql
  then
    pkgdatadir=$i
  fi
done

unknown's avatar
unknown committed
117
if test -f $pkgdatadir/fill_help_tables.sql
unknown's avatar
unknown committed
118
then
unknown's avatar
unknown committed
119
  fill_help_tables=$pkgdatadir/fill_help_tables.sql
120
else
121 122
  echo "Could not find help file 'fill_help_tables.sql' in @pkgdatadir@ or inside $basedir".
  exit 1;
123
fi
unknown's avatar
unknown committed
124 125

mdata=$ldata/mysql
126 127
mysqld=$execdir/mysqld
mysqld_opt=""
unknown's avatar
unknown committed
128
scriptdir=$bindir
unknown's avatar
unknown committed
129

130 131 132 133
if test "$windows" = 1
then
  mysqld="./sql/mysqld"
  mysqld_opt="--language=./sql/share/english"
unknown's avatar
unknown committed
134
  scriptdir="./scripts"
135 136 137
fi

if test ! -x $mysqld
unknown's avatar
unknown committed
138
then
139
  if test "$in_rpm" = 1
unknown's avatar
unknown committed
140
  then
141
    echo "FATAL ERROR $mysqld not found!"
unknown's avatar
unknown committed
142 143
    exit 1
  else
144
    echo "Didn't find $mysqld"
unknown's avatar
unknown committed
145 146 147 148 149
    echo "You should do a 'make install' before executing this script"
    exit 1
  fi
fi

150 151
# Try to determine the hostname
hostname=`@HOSTNAME@`
unknown's avatar
unknown committed
152 153

# Check if hostname is valid
unknown's avatar
unknown committed
154
if test "$windows" = 0 -a "$in_rpm" = 0 -a $force = 0
unknown's avatar
unknown committed
155 156 157 158 159
then
  resolved=`$bindir/resolveip $hostname 2>&1`
  if [ $? -ne 0 ]
  then
    resolved=`$bindir/resolveip localhost 2>&1`
unknown's avatar
unknown committed
160
    if [ $? -ne 0 ]
unknown's avatar
unknown committed
161
    then
unknown's avatar
unknown committed
162
      echo "Neither host '$hostname' nor 'localhost' could be looked up with"
163
      echo "$bindir/resolveip"
unknown's avatar
unknown committed
164 165 166 167 168
      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"
      exit 1
    fi
unknown's avatar
unknown committed
169 170
    echo "WARNING: The host '$hostname' could not be looked up with resolveip."
    echo "This probably means that your libc libraries are not 100 % compatible"
unknown's avatar
unknown committed
171
    echo "with this binary MySQL version. The MySQL daemon, mysqld, should work"
unknown's avatar
unknown committed
172 173 174
    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 !"
unknown's avatar
unknown committed
175 176 177
  fi
fi

178
if test "$ip_only" = "1"
179 180 181 182 183
then
  ip=`echo "$resolved" | awk '/ /{print $6}'`
  hostname=$ip
fi

unknown's avatar
unknown committed
184
# Create database directories mysql & test
unknown's avatar
unknown committed
185

unknown's avatar
unknown committed
186 187 188 189 190 191 192 193 194
  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
unknown's avatar
unknown committed
195
  c_d="yes"
unknown's avatar
unknown committed
196 197
fi

198
if test $verbose = 1
unknown's avatar
unknown committed
199
then
unknown's avatar
unknown committed
200 201 202
  create_option="verbose"
else
  create_option="real"
unknown's avatar
unknown committed
203 204
fi

205 206 207 208
if test -n "$user"; then
  args="$args --user=$user"
fi

209 210 211 212
if test "$in_rpm" -eq 0 -a "$windows" -eq 0
then
  echo "Installing all prepared tables"
fi
213 214
mysqld_install_cmd_line="$mysqld $defaults $mysqld_opt --bootstrap \
--skip-grant-tables --basedir=$basedir --datadir=$ldata --skip-innodb \
215
--skip-bdb --skip-ndbcluster $args --max_allowed_packet=8M --net_buffer_length=16K"
216 217
if $scriptdir/mysql_create_system_tables $create_option $mdata $hostname $windows \
   | eval "$mysqld_install_cmd_line" 
unknown's avatar
unknown committed
218
then
219 220 221 222 223 224
  if test -n "$fill_help_tables"
  then
    if test "$in_rpm" -eq 0 -a "$windows" -eq 0
    then
      echo "Fill help tables"
    fi
225
    (echo "use mysql;"; cat $fill_help_tables) | eval "$mysqld_install_cmd_line"
unknown's avatar
unknown committed
226 227
    res=$?
    if test $res != 0
228 229 230 231 232 233 234
    then
      echo ""
      echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!"
      echo "The \"HELP\" command might not work properly"
      echo ""
    fi
  fi
unknown's avatar
unknown committed
235
  if test "$in_rpm" = 0 -a "$windows" = 0
unknown's avatar
unknown committed
236
  then
237
    echo ""
unknown's avatar
unknown committed
238 239 240 241
    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
242 243
  if test "$windows" -eq 0
  then
unknown's avatar
unknown committed
244
  echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !"
245
  echo "To do so, start the server, then issue the following commands:"
unknown's avatar
unknown committed
246 247
  echo "$bindir/mysqladmin -u root password 'new-password'"
  echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
unknown's avatar
unknown committed
248 249 250 251 252 253 254 255 256 257 258
  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
unknown's avatar
unknown committed
259
  if test "$in_rpm" = "0"
unknown's avatar
unknown committed
260
  then
unknown's avatar
unknown committed
261
    echo "You can start the MySQL daemon with:"
unknown's avatar
unknown committed
262
    echo "cd @prefix@ ; $bindir/mysqld_safe &"
unknown's avatar
unknown committed
263
    echo
unknown's avatar
unknown committed
264
    echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:"
unknown's avatar
unknown committed
265
    echo "cd sql-bench ; perl run-all-tests"
unknown's avatar
unknown committed
266 267 268 269 270 271
    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"
272
  echo "Support MySQL by buying support/licenses at https://order.mysql.com"
273
  fi
unknown's avatar
unknown committed
274 275
  exit 0
else
276
  echo "Installation of system tables failed!"
unknown's avatar
unknown committed
277 278
  echo
  echo "Examine the logs in $ldata for more information."
unknown's avatar
unknown committed
279
  echo "You can also try to start the mysqld daemon with:"
280
  echo "$mysqld --skip-grant &"
unknown's avatar
unknown committed
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
  echo "You can 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
fi