mysql_fix_privilege_tables.sh
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:5k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. #!/bin/sh
  2. # This script is a wrapper to pipe the mysql_fix_privilege_tables.sql
  3. # through the mysql client program to the mysqld server
  4. # Default values (Can be changed in my.cnf)
  5. password=""
  6. host="localhost"
  7. user="root"
  8. sql_only=0
  9. basedir=""
  10. verbose=0
  11. args=""
  12. port=""
  13. socket=""
  14. database="mysql"
  15. bindir=""
  16. print_defaults_bindir="."
  17. file=mysql_fix_privilege_tables.sql
  18. # The following test is to make this script compatible with the 4.0 where
  19. # the single argument could be a password
  20. if test "$#" = 1
  21. then
  22.   case "$1" in
  23.   --*) ;;
  24.   *) old_style_password="$1" ; shift ;;
  25.   esac
  26. fi
  27. # The following code is almost identical to the code in mysql_install_db.sh
  28. case "$1" in
  29.     --no-defaults|--defaults-file=*|--defaults-extra-file=*)
  30.       defaults="$1"; shift
  31.       ;;
  32. esac
  33. parse_arguments() {
  34.   # We only need to pass arguments through to the server if we don't
  35.   # handle them here.  So, we collect unrecognized options (passed on
  36.   # the command line) into the args variable.
  37.   pick_args=
  38.   if test "$1" = PICK-ARGS-FROM-ARGV
  39.   then
  40.     pick_args=1
  41.     shift
  42.   fi
  43.   for arg do
  44.     case "$arg" in
  45.       --basedir=*) basedir=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  46.       --user=*) user=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  47.       --password=*) password=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  48.       --host=*) host=`echo "$arg" | sed -e 's/^[^=]*=//'` ;;
  49.       --sql|--sql-only) sql_only=1 ;;
  50.       --verbose) verbose=1 ;;
  51.       --port=*) port=`echo "$arg" | sed -e "s;--port=;;"` ;;
  52.       --socket=*) socket=`echo "$arg" | sed -e "s;--socket=;;"` ;;
  53.       --database=*) database=`echo "$arg" | sed -e "s;--database=;;"` ;;
  54.       --bindir=*) bindir=`echo "$arg" | sed -e "s;--bindir=;;"`
  55.                   print_defaults_bindir=$bindir
  56.   ;;
  57.       *)
  58.         if test -n "$pick_args"
  59.         then
  60.           # This sed command makes sure that any special chars are quoted,
  61.           # so the arg gets passed exactly to the server.
  62.           args="$args "`echo "$arg" | sed -e 's,([^=a-zA-Z0-9_.-]),\\1,g'`
  63.         fi
  64.         ;;
  65.     esac
  66.   done
  67. }
  68. # Get first arguments from the my.cfg file, groups [mysqld] and
  69. # [mysql_install_db], and then merge with the command line arguments
  70. print_defaults=my_print_defaults
  71. for dir in ./bin @bindir@ @bindir@ extra $print_defaults_bindir/../bin $print_defaults_bindir/../extra
  72. do
  73.   if test -x $dir/my_print_defaults
  74.   then
  75.     print_defaults="$dir/my_print_defaults"
  76.     break
  77.   fi
  78. done
  79. parse_arguments `$print_defaults $defaults mysql_install_db mysql_fix_privilege_tables`
  80. parse_arguments PICK-ARGS-FROM-ARGV "$@"
  81. if test -z "$basedir"
  82. then
  83.   basedir=@prefix@
  84.   if test -z "$bindir"
  85.   then
  86.      bindir=@bindir@
  87.   fi
  88.   execdir=@libexecdir@ 
  89.   pkgdatadir=@pkgdatadir@
  90. else
  91.   if test -z "$bindir"
  92.   then
  93.     bindir="$basedir/bin"
  94.   fi
  95.   if test -x "$basedir/libexec/mysqld"
  96.   then
  97.     execdir="$basedir/libexec"
  98.   elif test -x "@libexecdir@/mysqld"
  99.   then
  100.     execdir="@libexecdir@"
  101.   else
  102.     execdir="$basedir/bin"
  103.   fi
  104. fi
  105. if test -z "$password"
  106. then
  107.   password=$old_style_password
  108. fi
  109. cmd="$bindir/mysql --no-defaults --force --user=$user --host=$host"
  110. if test ! -z "$password" ; then
  111.   cmd="$cmd --password=$password"
  112. fi
  113. if test ! -z "$port"; then
  114.   cmd="$cmd --port=$port"
  115. fi
  116. if test ! -z "$socket"; then
  117.   cmd="$cmd --socket=$socket"
  118. fi
  119. cmd="$cmd --database=$database"
  120. if test $sql_only = 1
  121. then
  122.   cmd="cat"
  123. fi
  124. # Find where first mysql_fix_privilege_tables.sql is located
  125. for i in $basedir/support-files $basedir/share $basedir/share/mysql 
  126.         $basedir/scripts @pkgdatadir@ . ./scripts
  127. do
  128.   if test -f $i/$file
  129.   then
  130.     pkgdatadir=$i
  131.     break
  132.   fi
  133. done
  134. sql_file="$pkgdatadir/$file"
  135. if test ! -f $sql_file
  136. then
  137.   echo "Could not find file '$file'."
  138.   echo "Please use --basedir to specify the directory where MySQL is installed"
  139.   exit 1
  140. fi
  141. s_echo()
  142. {
  143.    if test $sql_only = 0
  144.    then
  145.      echo $1
  146.    fi
  147. }
  148. s_echo "This script updates all the mysql privilege tables to be usable by"
  149. s_echo "MySQL 4.0 and above."
  150. s_echo ""
  151. s_echo "This is needed if you want to use the new GRANT functions,"
  152. s_echo "CREATE AGGREGATE FUNCTION, or the more secure passwords in 4.1"
  153. s_echo ""
  154. if test $verbose = 1
  155. then
  156.   s_echo "You can safely ignore all 'Duplicate column' and 'Unknown column' errors"
  157.   s_echo "because these just mean that your tables are already up to date."
  158.   s_echo "This script is safe to run even if your tables are already up to date!"
  159.   s_echo ""
  160. fi
  161. if test $verbose = 0
  162. then
  163.   cat $sql_file | $cmd > /dev/null 2>&1
  164. else
  165.   cat $sql_file | $cmd > /dev/null
  166. fi
  167. if test $? = 0
  168. then
  169.   s_echo "done"
  170. else
  171.   s_echo "Got a failure from command:"
  172.   s_echo "$cmd"
  173.   s_echo "Please check the above output and try again."
  174.   if test $verbose = 0
  175.   then
  176.     s_echo ""
  177.     s_echo "Running the script with the --verbose option may give you some information"
  178.     s_echo "of what went wrong."
  179.   fi
  180.   s_echo ""
  181.   s_echo "If you get an 'Access denied' error, you should run this script again and"
  182.   s_echo "give the MySQL root user password as an argument with the --password= option"
  183. fi