好吧,首先让我们澄清一下,我已经阅读了 Ask Ubuntu 上关于这个问题的所有问题,并且我已经遵循了官方文档中的所有步骤:
我正在使用 Ubuntu 16.04.1 LTS
因此,在有人提出我可能已经尝试过的任何事情之前,我将展示我所做的事情:
root@localhost:/# sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
MySQL 正确停止。
root@localhost:/# sudo /usr/sbin/mysqld --skip-grant-tables --skip-networking &
[1] 3316
root@localhost:/#
这里我不知道这是否有效,所以我无论如何都会按照以下步骤操作。
root@localhost:/# mysql -u root
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@localhost:/#
似乎不起作用,因为服务未启动。由于无法继续执行后续步骤,我尝试了另一种方法(清除)。
使用后:
sudo apt-get --purge remove
sudo apt-get install
我尝试下一步:
root@localhost:/# mysqladmin -u root password MyNewPassword
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
root@localhost:/#
由于这也不起作用,我尝试了 mysql 网站上提到的其他方法:
因此我按照指示终止了 mysql 进程,然后使用
root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &
[1] 5267
root@localhost:/# 2017-02-01T12:47:49.250083Z mysqld_safe Logging to syslog.
2017-02-01T12:47:49.252427Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T12:47:49.254765Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-01T12:47:49.257045Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
[1]+ Salida 1 mysqld_safe --init-file=/home/me/mysql-init
root@localhost:/#
现在我已经没有选择了,所以我还尝试了 Ask Ubuntu 上提到的另一种方法:
root@localhost:/# sudo dpkg-reconfigure mysql-server-5.7
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.17, use --force if you still need to run mysql_upgrade
root@localhost:/#
现在我真的没有选择了,所以欢迎任何建议。
答案1
我遇到了同样的问题,并通过执行此行解决了它:
$ sudo mkdir /var/run/mysqld; sudo chown mysql /var/run/mysqld
在执行此行之前:
root@localhost:/# mysqld_safe --init-file=/home/me/mysql-init &
为我,这些步骤效果更好。
我认为有一个更简洁的方法可以做到这一点,但对我来说,这是一个快速而有效的解决方法。
答案2
无论我怎么尝试,我都无法重新安装 mysql,最后我只需要尝试重置密码。
我不得不在 Ubuntu 16.04.1 LTS 上走这条路。我花了一个多小时尝试了 MySql 网站上的所有其他建议,以及 SO 上的所有内容以及 AskUbuntu 问答,我终于让它工作了:
笔记:虽然它显示输入用户 root 的密码,但是我没有原始密码,所以我只能输入相同的密码作为新密码。
笔记:没有 /var/log/mysqld.log,只有 /var/log/mysql/error.log
另请注意,这对我不起作用:
sudo dpkg-reconfigure mysql-server-5.7
也没有:
sudo dpkg-reconfigure --force mysql-server-5.5
创建 MySQL 服务目录。
sudo mkdir /var/run/mysqld
授予 MySQL 用户写入服务目录的权限。
sudo chown mysql: /var/run/mysqld
然后:
- 终止当前 mysqld pid
- 使用 sudo /usr/sbin/mysqld & 运行 mysqld
运行 /usr/bin/mysql_secure_installation
mysql_secure_installation 的输出root@myServer:~# /usr/bin/mysql_secure_installation
确保 MySQL 服务器部署的安全。
输入用户root的密码:
验证密码插件可用于测试密码并提高安全性。它检查密码的强度并允许用户仅设置足够安全的密码。您想设置验证密码插件吗?
按 y|Y 表示是,按任何其他键表示否:否 使用 root 的现有密码。更改 root 的密码?((按 y|Y 表示是,按任何其他键表示否):y
新密码:
重新输入新密码:默认情况下,MySQL 安装有一个匿名用户,允许任何人登录 MySQL,而无需为他们创建用户帐户。这仅用于测试,并使安装过程更顺利。您应该在进入生产环境之前将其删除。
删除匿名用户?(按 y|Y 表示是,按任何其他键表示否):y 成功。
通常,只应允许 root 从“localhost”进行连接。这可确保有人无法从网络猜测 root 密码。
不允许远程 root 登录?(按 y|Y 表示是,按任何其他键表示否):y 成功。
默认情况下,MySQL 带有一个名为“test”的数据库,任何人都可以访问。这也仅用于测试,在进入生产环境之前应将其删除。
删除测试数据库并访问它?(按 y|Y 表示是,按任何其他键表示否):y
删除测试数据库...成功。
删除测试数据库的权限...成功。
重新加载权限表将确保迄今为止所做的所有更改立即生效。
现在重新加载权限表吗?(按 y|Y 表示是,按任何其他键表示否):y 成功。
全做完了!
答案3
我遇到了同样的问题并解决了:
# /etc/init.d/mysql stop
# service mysql stop
# mkdir -p /var/run/mysqld
# chown mysql:mysql /var/run/mysqld
# mysqld_safe --skip-grant-tables &
# mysql -u root
mysql> use mysql;
mysql> update user set authentication_string=password('1234') where user='root';
(此处authentication_string
保存密码字段。)