免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6005 | 回复: 2
打印 上一主题 下一主题

请教mysql登录问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-05-14 08:52 |只看该作者 |倒序浏览
我在系统中这样登录mysq:
[root@localhost root]# service mysql start
[root@localhost root]# mysql -uroot -p111111
ERROR 1045: Access denied for user: 'root@localhost' (Using password: YES)
[root@localhost root]#
请问这是不是说密码不正确?
如果是那怎么以mysql的root登录呢?谢谢!

在此之前我曾经这样配置过root
mysql
create database radius;
use mysql;
update user set password='111111' where user='root';

quit
service mysql restart
不知道是不是哪儿不对?

论坛徽章:
0
2 [报告]
发表于 2004-05-14 15:07 |只看该作者

请教mysql登录问题!

见MYSQL手册


18.7 Access denied错误

见6.6 权限系统如何工作。并且特别要看6.13 引起Access denied错误的原因。
18.8 怎样作为一个一般用户运行MySQL

MySQL服务器mysqld能被任何用户启动并运行。为了将mysqld改由Unix用户user_name来运行,你必须做下列事情:

   1. 如果它正在运行,停止服务器(使用mysqladmin shutdown)。
   2. 改变数据库目录和文件以便user_name有权限读和写文件(你可能需要作为Unix的root用户才能做到):

shell>; chown -R user_name /path/to/mysql/datadir

      如果在MySQL数据目录中的目录或文件是符号链接,你也将需要顺着那些链接并改变他们指向的目录和文件。chown -R不能跟随符号链接。
   3. 以user_name用户启动服务器,或如果你正在使用MySQL 3.22或以后版本,以Unix root用户启动mysqld并使用--user=user_name选项,mysqld将在接受任何连接之前切换到以Unix user_name用户运行。
   4. 如果在系统被重新启动时,你使用mysql.server脚本启动mysqld,你应该编辑mysql.server用su以用户user_name运行mysqld,或使用--user选项调用mysqld。(不改变safe_mysqld是必要的。)

现在,你的mysqld进程应该正在作为Unix用户user_name运行,并运行完好。尽管有一件事情没有变化:权限表的内容。缺省 地(就在运行了脚本mysql_install_db安装的权限表后),MySQL用户root是唯一有存取mysql数据库或创建或抛弃数据库权限的用户。除非你改变了那些权限,否则他们仍然保持。当你作为一个Unix用户而不是root登录时,这不应该阻止你作为MySQL root用户来存取MySQL;只要为客户程序指定-u root的选项。

注意通过在命令行上提供-u root,作为root存取MySQL,与作为Unix root用户或其他Unix用户运行MySQL没有关系。MySQL的存取权限和用户名与Unix用户名字是完全分开的。唯一与Unix用户名有关的是,如果当你调用一个客户程序时,你不提供一个-u选项,客户将试图使用你的Unix登录名作为你的MySQL用户名进行连接。

如果你的Unix机器本身不安全,你可能应该至少在存取表中为MySQL root用户放上一个口令。否则,在那台机器上有一个帐号的任何用户能运行mysql -u root db_name并且做他喜欢做的任何事情。

论坛徽章:
0
3 [报告]
发表于 2004-05-14 15:09 |只看该作者

请教mysql登录问题!

当你试着联接MySQL服务器时,如果你碰到Access denied错误,显示在下面的表指出一些你能用来更正这个问题的动作:

    * 你是在安装MySQL以后运行mysql_install_db的脚本,来设置初始授权表内容吗?如果不是,这样做。见6.10 设置初始MySQL权限。通过执行这个命令测试初始权限:

shell>; mysql -u root test

      服务器应该让你无误地连接。你也应该保证你在MySQL数据库目录有一个文件“user.MYD”。通常,它是“PATH/var/mysql/user.MYD”,在此PATH是MySQL安装根目录的路径。
    * 在一个新的安装以后,你应该连接服务器并且设置你的用户及其存取许可:

shell>; mysql -u root mysql

      服务器应该让你连接,因为MySQL root用户初始时没有口令。既然那也是一个安全风险,当你正在设置其他MySQL用户时,设定root口令是一件重要的事请。如果你作为root尝试连接并且得到这个错误:

Access denied for user: '@unknown' to database mysql

      这意味着,你没有一个条目在user表中的一个User列值为'root'并且mysqld不能为你的客库解析主机名。在这种情况下,你必须用--skip-grant-tables选项重启服务器并且编辑你的“/etc/hosts”或“\windows\hosts”文件为你的主机增加一个条目。
    * 如果你从一个3.22.11以前的版本更新一个现存的MySQL安装到3.22.11版或以后版本,你运行了mysql_fix_privilege_tables脚本吗?如果没有,运行它。在GRANT语句变得能工作时,授权表的结构用MySQL 3.22.11修改 。
    * 如果你直接对授权表做修改(使用INSERT或UPDATE语句)并且你的改变似乎被忽略,记住,你必须发出一个FLUSH PRIVILEGES语句或执行一个mysqladmin flush-privileges命令导致服务器再次读入表,否则你的改变要道下一次服务器被重启时再生效。记住在你设定root口令以后,你将不需要指定它,直到在你清洗(flush)权限以后,因为服务器仍然不会知道你改变了口令!
    * 如果你的权限似乎在一个会话(session)当中改变了,可能是一个超级用户改变了他们。再次装入授权表作用于新客户连接,但是它也影响现存的连接,如6.9 权限改变何时生效小节所述。
    * 为了测试,用--skip-grant-tables选项启动mysqld守护进程,然后你可以改变MySQL授权表并且使用mysqlaccess脚本检查你的修改是否有如期的效果。当你对你的改变满意时,执行mysqladmin flush-privileges告诉mysqld服务器开始使用新的权限表。注意:再次装入授权表覆盖了--skip-grant-tables选项。这允许你告诉服务器开始使用授权表,而不用停掉并重启它。
    * 如果你有一个Perl、Python或ODBC程序的存取问题,试着用mysql -u user_name db_name或mysql -u user_name -pyour_pass db_name与服务器连接。如果你能用mysql客户连接,这是你程序的一个问题而不是存取权限的问题。(注意在-p和口令之间没有空格;你也能使用--password=your_pass句法指定口令。)
    * 如果你不能让口令工作,记得如果你用INSERT, UPDATE或SET PASSWORD语句设置口令,你必须使用PASSWORD()函数。如果你用GRANT ... INDENTIFIED BY语句或mysqladmin password命令指定口令,PASSWORD()函数是不需要的。见6.12 怎样设置口令。
    * localhost是你本地主机名的一个同义词,并且也是如果你不明确地指定主机而客户尝试连接的缺省主机。然而,如果你正在运行于一个使用MIT-pthreads的系统上,连接localhost是不行的(localhost连接使用Unix套接字进行,它没被 MIT-pthreads支持),为了在这样的系统上避免这个问题,你应该使用--host选项明确地命名服务器主机,这将做一个 TCP/IP连接到mysqld服务器。在这种情况下,你必须有在服务器主机上的user表中条目的你真实的主机名。(即使你在服务器同一台的主机上运行一个客户程序,这也是真的。)
    * 当尝试用mysql -u user_name db_name与数据库连接时,如果你得到一个Access denied错误,你可能有与user桌有关的问题,通过执行mysql -u root mysql并且发出下面的SQL语句检查:

mysql>; SELECT * FROM user;

      结果应该包含一个有Host和User列的条目匹配你的计算机主机名和你的MySQL用户名。
    * Access denied错误消息将告诉你,你正在用哪个用户尝试登录,你正在试图用连接哪个主机,并且你是否正在使用一个口令。通常,你应该在user表中有一个条目,正确地匹配在错误消息给出的主机名和用户名。
    * 如果当你试着从一个不是MySQL服务器正在运行的主机上连接时,你得到下列错误,那么在user表中没有匹配那台主机行:

Host ... is not allowed to connect to this MySQL server

      你可以通过使用mysql命令行工具(在服务器主机上!)修正它,把你正在试图连接的用户/主机名组合新加一行到user表中。如果你不在运行MySQL 3.22并且你不知道你正在从它连接的机器的IP数字或主机名,你应该把一个'%'条目作为Host列值放在user表中并且在服务器机器上使用--log选项重启mysqld。在试图从客户机器连接以后,在MySQL记录文件中的信息将显示你如何真正进行连接。(然后用在记录文件上面显示出的实际的主机名代替user表中的'%'条目。否则,你将有一个不安全的系统。)
    * 如果mysql -u root test工作但是mysql -h your_hostname -u root test导致Access denied,那么在user表中你可能没有你的主机的正确名字。这里的一个普遍的问题是在user表条目中的Host值指定一个唯一的主机名,但是你系统的名字解析例程返回一个完全正规的域名(或相反)。例如,如果你在user表中有一个主机是'tcx'的条目,但是你的 DNS告诉MySQL你的主机名是'tcx.subnet.se',条目将不工作。尝试把一个条目加到user表中,它包含你主机的IP数字作为Host列的值。(另外,你可以把一个条目加到user表中,它有包含一个通配符如'tcx.%'的Host值。然而,使用以“%”结尾的主机名是不安全的并且不推荐!)
    * 如果mysql -u user_name test工作但是mysql -u user_name other_db_name不工作,对other_db_name,你在db表中没有没有一个条目列出。
    * 当在服务器机器上执行mysql -u user_name db_name时,它工作,但是在其它客户机器上执行mysql -h host_name -u user_name db_name时,它却不工作,你没有把客户机器列在user表或db表中。
    * 如果你不能弄明白你为什么得到Access denied,从user表中删除所有Host包含通配符值的条目(包含“%”或“_”的条目)。一个很普遍的错误是插入用Host='%'和User='some user'插入一个新条目,认为这将允许你指定localhost从同一台机器进行连接。它不工作的原因是缺省权限包括一个有Host='localhost'和User=''的条目,因为那个条目一个比'%'更具体的Host值'localhost',当从localhost连接时,它用于指向新条目!正确的步骤是插入Host='localhost'和User='some_user'的第2个条目,或删除Host='localhost'和User=''条目。
    * 如果你得到下列错误,你可以有一个与db或host表有关的问题:

Access to database denied

      如果从db表中选择了在Host列有空值的条目,保证在host表中有一个或多个相应的条目,指定运用db表中的哪些主机。如果在使用SQL命令SELECT ... INTO OUTFILE或LOAD DATA INFILE时,你得到错误,在user表中的你的条目可能启用file权限。
    * 记住,客户程序将使用在配置文件或环境变量被指定了的连接参数。如果当你不在命令行上指定他们时,一个客户似乎正在发送错误的缺省连接参数,检查你的环境和在你的主目录下的“.my.cnf”文件。你也可以检查系统范围的MySQL配置文件,尽管更不可能将在那里指定那个客户的连接参数。见4.15.4 选项文件。如果当你没有任何选项运行一个客户时,你得到Access denied,确认你没在任何选项文件里指定一个旧的口令!见4.15.4 选项文件。
    * 如果任何其它事情失败,用调试选项(例如,--debug=d,general,query)启动mysqld守护进程。这将打印有关尝试连接的主机和用户信息,和发出的每个命令的信息。见G.1 调试一个MySQL服务器。
    * 如果你有任何与MySQL授权表的其它问题,而且觉得你必须邮寄这个问题到邮寄表,总是提供一个MySQL授权表的倾倒副本(dump)。你可用mysqldump mysql命令倾倒数据库表。象平时一样,用mysqlbug脚本邮寄你的问题。在一些情况下你可能用--skip-grant-tables重启mysqld以便能运行mysqldump。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP