在我的 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
最后我找到了解决方法。以下是我所做的
- 使用以下方式卸载 mysql
sudo apt purge mysql*
- 删除
/etc/mysql
文件夹 - 刪除
/var/lib/mysql, /var/lib/mysql-files, /var/lib/mysql-kering
文件夹。 - 重启
- 使用以下方式安装 mysql
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 文件,但没有用。当我删除里面的所有 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
和密码登录。