mysql_install_db.sh 8.5 KB
Newer Older
bk@work.mysql.com's avatar
bk@work.mysql.com committed
1
#!/bin/sh
2
# Copyright (C) 2002-2003 MySQL AB
3
# For a more info consult the file COPYRIGHT distributed with this file.
bk@work.mysql.com's avatar
bk@work.mysql.com 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.
bk@work.mysql.com's avatar
bk@work.mysql.com committed
7
#
8
# All unrecognized arguments to this script are passed to mysqld.
bk@work.mysql.com's avatar
bk@work.mysql.com committed
9

10
in_rpm=0
11
windows=0
12
defaults=""
13
user=""
monty@mysql.com's avatar
monty@mysql.com 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
bk@work.mysql.com's avatar
bk@work.mysql.com 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/^[^=]*=//'` ;;
monty@mysql.com's avatar
monty@mysql.com 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 ;;
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
monty@donna.mysql.com's avatar
monty@donna.mysql.com 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
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
75

76 77 78 79 80 81
args=
ldata=
execdir=
bindir=
basedir=
force=0
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 "$@"
monty@donna.mysql.com's avatar
monty@donna.mysql.com committed
87

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

vva@eagle.mysql.r18.ru's avatar
vva@eagle.mysql.r18.ru 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@
vva@eagle.mysql.r18.ru's avatar
vva@eagle.mysql.r18.ru committed
110 111 112 113 114 115 116
do
  if test -f $i/fill_help_tables.sql
  then
    pkgdatadir=$i
  fi
done

117
if test -f $pkgdatadir/fill_help_tables.sql
118
then
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
bk@work.mysql.com's avatar
bk@work.mysql.com committed
124 125

mdata=$ldata/mysql
126 127
mysqld=$execdir/mysqld
mysqld_opt=""
128
scriptdir=$bindir
bk@work.mysql.com's avatar
bk@work.mysql.com committed
129

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

if test ! -x $mysqld
bk@work.mysql.com's avatar
bk@work.mysql.com committed
138
then
139
  if test "$in_rpm" = 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
140
  then
141
    echo "FATAL ERROR $mysqld not found!"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
142 143
    exit 1
  else
144
    echo "Didn't find $mysqld"
bk@work.mysql.com's avatar
bk@work.mysql.com 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@`
bk@work.mysql.com's avatar
bk@work.mysql.com committed
152 153

# Check if hostname is valid
monty@narttu.mysql.fi's avatar
monty@narttu.mysql.fi committed
154
if test "$windows" = 0 -a "$in_rpm" = 0 -a $force = 0
bk@work.mysql.com's avatar
bk@work.mysql.com committed
155 156 157 158 159
then
  resolved=`$bindir/resolveip $hostname 2>&1`
  if [ $? -ne 0 ]
  then
    resolved=`$bindir/resolveip localhost 2>&1`
160
    if [ $? -ne 0 ]
bk@work.mysql.com's avatar
bk@work.mysql.com committed
161
    then
paul@ice.snake.net's avatar
paul@ice.snake.net committed
162
      echo "Neither host '$hostname' nor 'localhost' could be looked up with"
163
      echo "$bindir/resolveip"
bk@work.mysql.com's avatar
bk@work.mysql.com 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
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"
paul@ice.snake.net's avatar
paul@ice.snake.net committed
171
    echo "with this binary MySQL version. The MySQL daemon, mysqld, should work"
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 !"
bk@work.mysql.com's avatar
bk@work.mysql.com 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

bk@work.mysql.com's avatar
bk@work.mysql.com committed
184
# Create database directories mysql & test
vva@mysql.r18.ru's avatar
vva@mysql.r18.ru committed
185

bk@work.mysql.com's avatar
bk@work.mysql.com 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
vva@eagle.mysql.r18.ru's avatar
vva@eagle.mysql.r18.ru committed
195
  c_d="yes"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
196 197
fi

198
if test $verbose = 1
bk@work.mysql.com's avatar
bk@work.mysql.com committed
199
then
vva@eagle.mysql.r18.ru's avatar
vva@eagle.mysql.r18.ru committed
200 201 202
  create_option="verbose"
else
  create_option="real"
bk@work.mysql.com's avatar
bk@work.mysql.com 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" 
bk@work.mysql.com's avatar
bk@work.mysql.com 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"
monty@mysql.com's avatar
monty@mysql.com 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
monty@narttu.mysql.fi's avatar
monty@narttu.mysql.fi committed
235
  if test "$in_rpm" = 0 -a "$windows" = 0
bk@work.mysql.com's avatar
bk@work.mysql.com committed
236
  then
237
    echo ""
bk@work.mysql.com's avatar
bk@work.mysql.com 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
bk@work.mysql.com's avatar
bk@work.mysql.com 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:"
246 247
  echo "$bindir/mysqladmin -u root password 'new-password'"
  echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
bk@work.mysql.com's avatar
bk@work.mysql.com 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
monty@narttu.mysql.fi's avatar
monty@narttu.mysql.fi committed
259
  if test "$in_rpm" = "0"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
260
  then
261
    echo "You can start the MySQL daemon with:"
262
    echo "cd @prefix@ ; $bindir/mysqld_safe &"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
263
    echo
264
    echo "You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:"
265
    echo "cd sql-bench ; perl run-all-tests"
bk@work.mysql.com's avatar
bk@work.mysql.com 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
bk@work.mysql.com's avatar
bk@work.mysql.com committed
274 275
  exit 0
else
276
  echo "Installation of system tables failed!"
bk@work.mysql.com's avatar
bk@work.mysql.com committed
277 278
  echo
  echo "Examine the logs in $ldata for more information."
279
  echo "You can also try to start the mysqld daemon with:"
280
  echo "$mysqld --skip-grant &"
bk@work.mysql.com's avatar
bk@work.mysql.com 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