我很沮丧!我在 Ubuntu 14.04 32 位中使用开发源代码树(版本 5.7.5)安装了 mysql。
开始
我使用以下命令以安全模式启动 mysql :
mysqlnew@dpaks:~$ mysqld_safe & [1] 4548 mysqlnew@dpaks:~$ 141024 11:18:58 mysqld_safe Logging to'/usr/local/mysql/data/dpaks.err'. 141024 11:18:58 mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
但是,在输入'mysqladmin version'时,出现以下错误:
mysqladmin: connect to server at 'localhost' failed error: 'Access denied for user 'deepaks'@'localhost' (using password: NO)'
如果我给出前缀“--skip-grant-tables”,mysqladmin 将启动并提供以下内容:
mysqladmin Ver 8.42 Distrib 5.7.5-m15,适用于 i686 上的 Linux
版权所有 (c) 2000、2014,Oracle 和/或其附属公司。版权所有。
Oracle 是 Oracle Corporation 和/或其附属公司的注册商标。其他名称可能是其各自所有者的商标。
服务器版本 5.7.5-m15
协议版本 10
通过 UNIX 套接字连接本地主机
UNIX 套接字 /tmp/mysql.sock
正常运行时间:7 秒
线程:1 问题:2 慢速查询:0 打开:84 刷新表:1 打开表:79 每秒平均查询数:0.285
那么,grants 表发生了什么?
权限:
- 为了运行 mysql,我创建了一个用户和一个名为 mysqlnew 的组。
- 我在 /usr/local/mysql 的整个安装都归 mysqlnew 所有。除数据目录外,整个目录的权限递归设置为 777。
- 数据目录为 744。
- my.cnf为用户 mysqlnew 设置为 755。它的临时文件归 root 所有。
- mysql.sock有权限 777
服务器正在运行? 是的!
它列在进程状态中。
mysqlnew 5022 4341 0 12:22 pts/8 00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe
mysqlnew 5154 5022 3 12:22 pts/8 00:00:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/dpaks.err --pid-file=/usr/local/mysql/data/dpaks.pid --socket=/tmp/mysql.sock --port=3306
另外,netstat 命令给了我以下信息:
tcp 0 0 localhost:mysql *:* LISTEN 4680/mysqld
错误日志错误日志 说明如下:
2014-10-24T05:49:00.835656Z 0 [Note] InnoDB: 5.7.5 started; log sequence number 1296682
2014-10-24T05:49:00.854718Z 0 [Warning] Failed to setup SSL
2014-10-24T05:49:00.854736Z 0 [Warning] SSL error: SSL context is not usable without certificate and private key
2014-10-24T05:49:00.854757Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2014-10-24T05:49:00.854795Z 0 [Note] - '127.0.0.1' resolves to '127.0.0.1';
2014-10-24T05:49:00.864657Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2014-10-24T05:49:01.399455Z 0 [Note] Event Scheduler: Loaded 0 events
2014-10-24T05:49:01.399499Z 0 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.7.5-m15' socket: '/tmp/mysql.sock' port: 3306 Source distribution
这意味着服务器正在运行!正确的?
Conf 文件以下是我位于 etc 目录中的my.cnf文件的摘录:
[client]
port=3306
socket=/tmp/mysql.sock
[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
user = mysql
bind-address = 127.0.0.1
port = 3306
socket = /tmp/mysql.sock
我还验证了 mysql.sock 是在 /tmp 目录中创建的。
问题:为什么在服务器运行时启动 mysqladmin 而未使用前缀“--skip-grant-tables”时出现错误?
任何帮助将不胜感激
PS:我已经仔细阅读并尝试了此处类似问题中给出的所有解决方案,但无济于事。
更新 1
当我给出 --skip-grants-table 然后运行“mysql”时,它工作了!但是我为什么要跳过它呢?
我的天啊!我不敢相信我解决了它!
我启动了mysqld。但是,无法启动客户端。当我给出命令“mysql”时,显示以下错误:
为什么不在 mysql 中创建一个用户帐户?!因此,我通过将以下内容写入名为init-file的文本文件并将其放置在用户mysqlnew具有访问权限的位置,创建了一个以“root”作为密码的用户帐户“root” 。请注意,它们必须在不同的行中。另外,确保服务器未运行。
我通过以下方式启动服务器:
然后我开始了客户端
因为我现在已经在 mysql 中创建了一个用户帐户,所以我不需要再使用--skip-grant-tables来启动服务器。
然而,它还没有完成!
所以,现在我需要纠正这个!
就是这样!:)