mysql 安装卡在 Ubuntu 16.04 上(没有 root 用户权限)

mysql 安装卡在 Ubuntu 16.04 上(没有 root 用户权限)

在我的 ubuntu 16.04 服务器中,我尝试通过以下命令安装 mysql

sudo apt-get install mysql-server

每次它都会显示以下消息:

update-alternatives: using /etc/mysql/mysql.cnf to provide /etc/mysql/my.cnf (my.cnf) in auto mode 
Renaming removed key_buffer and myisam-recover options (if present) 
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.16, use --force if you still need to run mysql_upgrade

我必须按Ctrl+z才能停止它。我已检查日志文件,/var/log/mysql/error.log其中最后 10 行显示了以下结果:

2017-01-18T09:07:30.329930Z 0 [Note] InnoDB: Buffer pool(s) load completed at 170118  9:07:30
2017-01-18T09:07:30.335086Z 0 [Warning] Failed to set up SSL because of the following SSL library error: SSL context is not usable without certificate and private key
2017-01-18T09:07:30.335137Z 0 [Note] Server hostname (bind-address): '127.0.0.1'; port: 3306
2017-01-18T09:07:30.335157Z 0 [Note]   - '127.0.0.1' resolves to '127.0.0.1';
2017-01-18T09:07:30.335216Z 0 [Note] Server socket created on IP: '127.0.0.1'.
2017-01-18T09:07:30.349491Z 0 [Note] Event Scheduler: Loaded 1 event
2017-01-18T09:07:30.349749Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' started.
2017-01-18T09:07:30.350543Z 1 [ERROR] 1396  Operation ALTER USER failed for 'root'@'localhost'
2017-01-18T09:07:30.350737Z 0 [Note] Execution of init_file '/var/lib/mysql-files/tmp.sJ5rMac6mK' ended.
2017-01-18T09:07:30.350864Z 0 [Note] mysqld: ready for connections.

重启后,我通过 登录到 mysql mysql -u root。在 mysql 中,我无法执行任何操作,无法创建新用户或修改权限。我只能浏览默认数据库

  • 信息架构
  • 测试

当我输入时,show grants它显示了以下结果

+--------------------------------------+
| Grants for @localhost                |
+--------------------------------------+
| GRANT USAGE ON *.* TO ''@'localhost' |
+--------------------------------------+

这很奇怪。为了确认这一点,我查看了user_privileges表格,information_schema其中给出了以下内容:

+----------------+---------------+----------------+--------------+
| GRANTEE        | TABLE_CATALOG | PRIVILEGE_TYPE | IS_GRANTABLE |
+----------------+---------------+----------------+--------------+
| ''@'localhost' | def           | USAGE          | NO           |
+----------------+---------------+----------------+--------------+

我如何启用 root 访问权限来创建、更新?

答案1

一个简单的解决方案是sudo killall mysqld在 apt-get 操作运行时。

此后,apt 操作一直运行,没有任何错误(!)

来源:https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1596815

答案2

最后我找到了解决方法。以下是我所做的

  • 使用以下方式卸载 mysqlsudo apt purge mysql*
  • 删除/etc/mysql文件夹
  • 刪除/var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering文件夹。
  • 重启
  • 使用以下方式安装 mysqlsudo apt-get install mysql-server

这次 mysql 安装成功,没有卡住。安装时提示我输入 root 密码,我输入了一个。安装完成后,我使用提供的密码以 root 身份登录。这次创建新用户,更新一切正常。现在,结果如下show grants

+---------------------------------------------------------------------+
| Grants for root@localhost                                           |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION        |
+---------------------------------------------------------------------+

虽然我仍然不知道为什么第一次它不起作用。我尝试只删除 cnf 文件,但没有用。当我删除里面的所有 mysql 文件夹时,它就起作用了/var/lib。所以我猜目录中有一些文件/var/lib/msyql阻止创建任何新用户(甚至是 root 用户)。

答案3

几个月来我一直在寻找解决 mysql_server 配置问题的方法,安装其他任何东西时,mysql_server 配置都会冻结,因此必须终止进程并手动启动 mysql。这也导致我每次重启电脑时都必须手动启动 MySQL。

我编辑了 /var/lib/dpkg/info/mysql-server-5.7.postinst 并且我注意到配置)部分没有返回任何内容,所以它只是冻结了。

您只需编辑该文件并在配置部分的末尾(在 abort-upgrade|abort-remove|abort-configure 部分之前)添加一行“exit 0”,大约在第 290 行。我的现在看起来像这样:

    # To avoid downgrades. This has to happen after the database is created, or --initialize will fail
touch $mysql_statedir/debian-5.7.flag

    exit 0   # Corregimos el bug del postinst de mysql

;;
abort-upgrade|abort-remove|abort-configure)

答案4

这是因为 MySQL 中没有创建 root 用户。但我不知道为什么。尝试将“root”用户插入mysql.user表中。

首先,停止mysql服务器。

sudo /etc/init.d/mysql stop 

要使用选项启动 MySQL --skip-grant-tables,请尝试进行配置my.cnf

sudo vi /etc/mysql/my.cnf

在 下方添加以下行[mysqld]

 skip-grant-tables

再次启动 MySQL 服务器。

sudo /etc/init.d/mysql start

登录 MySQL

mysql -u root

插入“root”用户和您想要的密码。

mysql> INSERT INTO mysql.user VALUES ('localhost','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0); 
mysql> INSERT INTO mysql.user VALUES ('127.0.0.1','root',password('newpassword'),'Y','Y ','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y', 'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','' ,'','','',0,0,0,0); 

newpassword应该更改为你想要的密码。mysql> exit

skip-grant-tables在配置中删除my.cnf以使用身份验证。

之后以正常方式重新启动 MySQL 服务器。

sudo /etc/init.d/mysql restart

尝试使用root和密码登录。

相关内容