mysql_fix_privilege_tables
时间:2009-02-23 来源:l__sl
mysql_fix_privilege_tables,是一个mysql下的命令,是为了解决权限升级中的问题,问题也不算从这方面解决的,但最终是把这个密码问题给解决掉了;
今天把通达的OA系统从2.8升级到3.0上去,由于升级以前思路已经确实,各表的结构以及数据都考虑到了,所以升级过后觉得还算可以;但有一个问题,就是修改通达oa的原始密码myoa888,通常,做这些用phpmyadmin来做是最简单不过的,但这可恶的,到这个关键的时刻却遇见了警告:
Warning: Your privilege table structure seems to be older than this MySQL version!
Please run the script mysql_fix_privilege_tables that should be included in your MySQL server distribution to solve this problem!
这样看来,明显是因为mysql的权限表结构版权老于当前的mysql版本,以前那么多都没遇到过,奇怪了;是不是用了phpmyadmin高版本的原因,用的是phpmyadmin2.9版本,确实是最新的,找个老版本试试?找了老半天,找了一个2.7的,试了一下,还是提示上述问题。再找更老的版本,找不到了,这条路,暂时视为行不通。另外想办法。
既然是mysql_fix_privilege_tables这个脚本,那就找这个脚本来解决不就行了?到网上搜索一下,没有人提供这个脚本下载,呵,找mysql大本营去,果然不错,最新版本的中文说明书,非常详细啊!这是mysql5.1的中文说明书地址,很详细的;http://dev.mysql.com/doc/refman/5.1/zh/index.html
从上述地址中找到了以下说明:
5.4. mysql_fix_privilege_tables:升级MySQL系统表
一些MySQL发布对mysql数据库中的系统表的结构进行了更改,添加了新权限或特性。当你更新到新版本MySQL,你应同时更新系统表,以确保它们的结构最新。首先备份mysql数据库,然后按照下面的程序操作。在Unix或Unix类系统中,运行mysql_fix_privilege_tables脚本来更新系统表:
shell> mysql_fix_privilege_tables
你必须在服务器运行时执行该脚本。它试图连接本机上用root运行的服务器。如果root账户需要密码,在命令行中按下述方法给出密码:
shell> mysql_fix_privilege_tables--password=root_password
mysql_fix_privilege_tables脚本可以执行将系统表转换为当前格式的任何动作。运行时你可能会看见一些Duplicate column name警告;你可以忽略它们。
运行完脚本后,停止服务器并重启。
在Windows系统中,MySQL分发包括mysql_fix_privilege_tables.sql SQL脚本,你可以用mysql客户端来运行。例如,如果MySQL安装到C:\Program Files\MySQL\MySQL Server 5.1,命令应为:
C:\> C:\Program Files\MySQL\MySQL Server 5.1\bin\mysql -u root -p mysql
mysql> SOURCE C:/Program Files/MySQL/MySQL Server 5.1/scripts/mysql_fix_privilege_tables.sql
如果安装到其它目录,相应地更改路径名。
mysql命令将提示输入root密码;按照提示输入密码。
在Unix中,当mysql处理mysql_fix_privilege_tables.sql script脚本中的语句时,你可能会看见一些Duplicate column name警告;你可以忽略它们。
运行完脚本后,停止服务器并重启。
既然有这个方法,就试一把;下载最新的mysql for windows版本,到虚拟机上安装一把(在本机上装,影响现在的mysql,不方便),安装时,注意自定义安装或者全部安装,不然,脚本安装不上去的。安装后,找到mysql_fix_privilege_tables这个脚本,按照上述命令执行了一下,果然,警告之声大作,和说明上说的一样,但执行后,重启mysql服务,还是不行,phpmyadmin还是依旧提示那个问题。说明命令脚本没有生效。但在虚拟机中执行时,ok的字符非常多,说明是生效的。
既然这样,那就把本地的mysql表拷贝到虚拟机上,执行,警报之声少了许多,说明还是起了一定的作用。执行之后,把mysql拷贝到本地机,重启oa服务,这样一来,不好了,phpmyadmin访问不了,mysql命令行也进不去了,用myoa888,进不去,用空也进不去,只有这两种可能;进不去,天知道运行一下,怎么把密码改成什么了?嘿。放弃,也行不通。不是不锲而不舍,时间不多了,两个小时以后,oa要正常运行了。
既然这样,就再想一想办法,在网上找了一些修改mysql密码的办法,很多,一试,果然不错,有这么多办法,我走那么多弯路干什么?呵;其实,走弯路不见得不好,走弯路可以接触到很多新的东西,其乐无穷啊!
最后还是用phpmyadmin在mysql数据库中的user表,修改了root的mdb密码值,以上所走的弯路,有机会时再摸索一把。
有些莫名其妙,但本人对mysql纯粹是业余级别的,只是用到的时候,摸索一把。希望高手指导!
相关mysql资料站:
mysql中文站 http://imysql.cn/
mysql中文论坛 http://bbs.mysql.cn/