~ubuntu-branches/ubuntu/precise/mysql-5.1/precise

« back to all changes in this revision

Viewing changes to scripts/mysql_fix_privilege_tables.sh

  • Committer: Bazaar Package Importer
  • Author(s): Norbert Tretkowski
  • Date: 2010-03-17 14:56:02 UTC
  • Revision ID: james.westby@ubuntu.com-20100317145602-x7e30l1b2sb5s6w6
Tags: upstream-5.1.45
ImportĀ upstreamĀ versionĀ 5.1.45

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#!/bin/sh
 
2
# Copyright (C) 2000-2006 MySQL AB
 
3
 
4
# This program is free software; you can redistribute it and/or modify
 
5
# it under the terms of the GNU General Public License as published by
 
6
# the Free Software Foundation; version 2 of the License.
 
7
 
8
# This program is distributed in the hope that it will be useful,
 
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
 
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
11
# GNU General Public License for more details.
 
12
 
13
# You should have received a copy of the GNU General Public License
 
14
# along with this program; if not, write to the Free Software
 
15
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
16
 
 
17
# This script is a wrapper to pipe the mysql_fix_privilege_tables.sql
 
18
# through the mysql client program to the mysqld server
 
19
 
 
20
# Default values (Can be changed in my.cnf)
 
21
password=""
 
22
host="localhost"
 
23
user="root"
 
24
sql_only=0
 
25
basedir="@prefix@"
 
26
verbose=0
 
27
args=""
 
28
# no elaborate fallback here; with no argument, it will happen in "mysql"
 
29
port=""
 
30
socket=""
 
31
database="mysql"
 
32
bindir=""
 
33
pkgdatadir="@pkgdatadir@"
 
34
print_defaults_bindir="."
 
35
 
 
36
file=mysql_fix_privilege_tables.sql
 
37
 
 
38
# The following test is to make this script compatible with the 4.0 where
 
39
# the single argument could be a password
 
40
if test "$#" = 1
 
41
then
 
42
  case "$1" in
 
43
  --*) ;;
 
44
  *) old_style_password="$1" ; shift ;;
 
45
  esac
 
46
fi
 
47
 
 
48
# The following code is almost identical to the code in mysql_install_db.sh
 
49
 
 
50
case "$1" in
 
51
    --no-defaults|--defaults-file=*|--defaults-extra-file=*)
 
52
      defaults="$1"; shift
 
53
      ;;
 
54
esac
 
55
 
 
56
parse_arguments() {
 
57
  # We only need to pass arguments through to the server if we don't
 
58
  # handle them here.  So, we collect unrecognized options (passed on
 
59
  # the command line) into the args variable.
 
60
  pick_args=
 
61
  if test "$1" = PICK-ARGS-FROM-ARGV
 
62
  then
 
63
    pick_args=1
 
64
    shift
 
65
  fi
 
66
 
 
67
  for arg do
 
68
    case "$arg" in
 
69
      --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
 
70
      --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
 
71
      --password=*) password=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
 
72
      --host=*) host=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
 
73
      --sql|--sql-only) sql_only=1 ;;
 
74
      --verbose) verbose=1 ;;
 
75
      --port=*) port=`echo "$arg" | sed -e "s;--port=;;"` ;;
 
76
      --socket=*) socket=`echo "$arg" | sed -e "s;--socket=;;"` ;;
 
77
      --database=*) database=`echo "$arg" | sed -e "s;--database=;;"` ;;
 
78
      --bindir=*) bindir=`echo "$arg" | sed -e "s;--bindir=;;"`
 
79
                  print_defaults_bindir=$bindir
 
80
                  ;;
 
81
      *)
 
82
        if test -n "$pick_args"
 
83
        then
 
84
          # This sed command makes sure that any special chars are quoted,
 
85
          # so the arg gets passed exactly to the server.
 
86
          args="$args "`echo "$arg" | sed -e 's,\([^=a-zA-Z0-9_.-]\),\\\\\1,g'`
 
87
        fi
 
88
        ;;
 
89
    esac
 
90
  done
 
91
}
 
92
 
 
93
# Get first arguments from the my.cfg file, groups [mysqld] and
 
94
# [mysql_install_db], and then merge with the command line arguments
 
95
 
 
96
print_defaults=my_print_defaults
 
97
for dir in ./bin @bindir@ @bindir@ extra $print_defaults_bindir/../bin $print_defaults_bindir/../extra
 
98
do
 
99
  if test -x $dir/my_print_defaults
 
100
  then
 
101
    print_defaults="$dir/my_print_defaults"
 
102
    break
 
103
  fi
 
104
done
 
105
 
 
106
parse_arguments `$print_defaults $defaults mysql_install_db mysql_fix_privilege_tables`
 
107
parse_arguments PICK-ARGS-FROM-ARGV "$@"
 
108
 
 
109
if test -z "$password"
 
110
then
 
111
  password=$old_style_password
 
112
fi
 
113
 
 
114
# Find where 'mysql' command is located
 
115
 
 
116
dirname=`dirname "$0"`
 
117
 
 
118
if test -z "$bindir"
 
119
then
 
120
  for i in @bindir@ $basedir/bin "$dirname/../client"
 
121
  do
 
122
    if test -f $i/mysql
 
123
    then
 
124
      bindir=$i
 
125
      break
 
126
    fi
 
127
  done
 
128
fi
 
129
 
 
130
if test -z "$bindir"
 
131
then
 
132
  echo "Could not find MySQL command-line client (mysql)."
 
133
  echo "Please use --basedir to specify the directory where MySQL is installed."
 
134
  exit 1
 
135
fi
 
136
 
 
137
cmd="$bindir/mysql --no-defaults --force --user=$user --host=$host"
 
138
if test ! -z "$port"; then
 
139
  cmd="$cmd --port=$port"
 
140
fi
 
141
if test ! -z "$socket"; then
 
142
  cmd="$cmd --socket=$socket"
 
143
fi
 
144
cmd="$cmd --database=$database"
 
145
 
 
146
if test $sql_only = 1
 
147
then
 
148
  cmd="cat"
 
149
fi
 
150
 
 
151
# Find where first mysql_fix_privilege_tables.sql is located
 
152
for i in $basedir/support-files $basedir/share $basedir/share/mysql \
 
153
        $basedir/scripts $pkgdatadir . "$dirname"
 
154
do
 
155
  if test -f $i/$file
 
156
  then
 
157
    pkgdatadir=$i
 
158
    break
 
159
  fi
 
160
done
 
161
 
 
162
sql_file="$pkgdatadir/$file"
 
163
if test ! -f $sql_file
 
164
then
 
165
  echo "Could not find file '$file'."
 
166
  echo "Please use --basedir to specify the directory where MySQL is installed"
 
167
  exit 1
 
168
fi
 
169
 
 
170
s_echo()
 
171
{
 
172
   if test $sql_only = 0
 
173
   then
 
174
     echo $1
 
175
   fi
 
176
}
 
177
 
 
178
s_echo "This script updates all the mysql privilege tables to be usable by"
 
179
s_echo "the current version of MySQL"
 
180
s_echo ""
 
181
 
 
182
if test $verbose = 1
 
183
then
 
184
  s_echo "You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
 
185
  s_echo "because these just mean that your tables are already up to date."
 
186
  s_echo "This script is safe to run even if your tables are already up to date!"
 
187
  s_echo ""
 
188
fi
 
189
 
 
190
run_cmd() {
 
191
  # Password argument is added here to allow for spaces in password.
 
192
  
 
193
  if test ! -z "$password"
 
194
  then
 
195
    cat $sql_file | $cmd --password="$password"
 
196
  else
 
197
    cat $sql_file | $cmd
 
198
  fi
 
199
}
 
200
 
 
201
if test $verbose = 0
 
202
then
 
203
  run_cmd > /dev/null 2>&1
 
204
else
 
205
  run_cmd > /dev/null
 
206
fi
 
207
if test $? = 0
 
208
then
 
209
  s_echo "done"
 
210
else
 
211
  s_echo "Got a failure from command:"
 
212
  s_echo "cat $sql_file | $cmd"
 
213
  s_echo "Please check the above output and try again."
 
214
  if test $verbose = 0
 
215
  then
 
216
    s_echo ""
 
217
    s_echo "Running the script with the --verbose option may give you some information"
 
218
    s_echo "of what went wrong."
 
219
  fi
 
220
  s_echo ""
 
221
  s_echo "If you get an 'Access denied' error, you should run this script again and"
 
222
  s_echo "give the MySQL root user password as an argument with the --password= option"
 
223
fi