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 -u root登录到mysql。 在mysql中我无法做任何操作,创建新用户或修改权限。 我只能浏览默认数据库

  • INFORMATION_SCHEMA
  • 测试

当我输入show grants它会显示以下结果

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

这很奇怪。 为了确保这一点,我检查了user_privileges中的user_privileges表,它给了我:

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

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

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

apt操作在此之后保持运行而没有任何错误(!)

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

最后我得到了解决方法。 这就是我做的

  • 使用sudo apt purge mysql*卸载mysql
  • 删除/etc/mysql文件夹
  • 删除/var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering文件夹。
  • 重启
  • 使用sudo 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文件,但这不起作用。 当我删除/var/lib所有mysql文件夹时,它工作。 所以我猜/var/lib/msyql目录中有一些文件阻止创建任何新用户(甚至是root用户)。

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

首先,停止mysql服务器。

 sudo /etc/init.d/mysql stop 

要使用--skip-grant-tables选项启动MySQL,请尝试配置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>退出

删除my.cnf配置中的skip-grant-tables以使用身份validation。

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

 sudo /etc/init.d/mysql restart 

尝试使用root和密码登录。