我的问题开始于我不能再以root用户身份登录mysql安装.我试图在没有打开密码的情况下运行mysql...但每当我执行命令时

# mysqld_safe --skip-grant-tables &

我再也回不到提示了.我试着跟着these instructions to recover the password.

屏幕如下所示:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

而且我没有收到开始键入SQL命令重置密码的提示.

当我按下CTRL键杀死它时,我会得到以下信息:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

如果我重试该命令并将其保留足够长的时间,我确实会收到以下一系列消息:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

但如果我try 以root用户身份登录,请执行以下操作:

# mysql -u root

我收到以下错误消息:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我查过了,/var/run/mysqld/mysqld.sock号文件不存在.文件夹有,但文件没有.

此外,我不知道这是否有帮助,但我跑了find / -name mysqld次,结果是:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

我不熟悉Linux和MySQL,所以我不知道这是否正常.但我会把这些信息包括进来,以防万一.

I finally decided to uninstall and reinstall mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

按照上述相同顺序重新安装所有软件包后,在phpmyadmin安装过程中,我遇到了相同的错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

所以我再次try 卸载/重新安装.这一次,在我卸载了这些包之后,我还手动将所有mysql文件和目录的各自位置重命名为mysql.bad.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

然后我又试着重新安装mysql-servermysql-client.但我注意到它不会提示我输入密码.它不是应该要求管理员密码吗?

推荐答案

要查找系统上的所有套接字文件,请运行:

sudo find / -type s

我的Mysql服务器系统的套接字在/var/lib/mysql/mysql.sock时打开

找到插座的打开位置后,将该行添加或编辑到/etc/my.带有套接字文件路径的cnf文件:

socket=/var/lib/mysql/mysql.sock

有时,启动命令行可执行文件的系统启动脚本会指定一个标志--socket=path.这面旗子可以覆盖my.cnf位置,这将导致在my的位置找不到套接字.cnf文件表明它应该是.然后,当您try 运行mysql命令行客户端时,它将读取我的.cnf无法找到套接字,但它无法找到,因为它与服务器创建套接字的位置不同.所以,除非你关心插座的位置,否则只需更改my.cnf匹配应该是有效的.

然后,停止mysqld进程.如何做到这一点将因系统而异.

如果您是linux系统中的超级用户,如果不知道Mysql安装程序使用的具体方法,请try 以下方法之一:

  • service mysqld stop
  • /etc/init.d/mysqld stop
  • mysqladmin -u root -p shutdown
  • Some systems aren't setup to have an elegant way to stop mysql (or for some reason mysql doesn't respond) and you can force terminate mysql with either:
    • 一步:pkill -9 mysqld
    • Two step (least preferred):
      • pgrep mysqlps aux | grep mysql | grep -v grep查找mysql的进程id
      • 假设进程id为4969,则以kill -9 4969终止

完成此操作后,您可能希望在/var/run/mysqld/中查找pid文件并将其删除

确保你的套接字上的权限是这样的,无论运行哪个用户mysqld,都可以读/写它.一个简单的测试是打开它进行完全读/写,看看它是否仍然有效:

chmod 777 /var/run/mysqld/mysqld.sock

如果这解决了问题,您可以根据安全设置根据需要定制套接字的权限和所有权.

此外,运行mysqld进程的用户必须能够访问套接字所在的目录.

Mysql相关问答推荐

正则表达式转换为MYSQL格式

在MySQL中查找具有公共值的列名

如何在产品查询中插入GROUP_CONCAT?

对多个数据库运行UPDATE mySQL查询

从表中 Select 具有不同顺序的列

如何在sql中包含0作为计数?

多列分组并进行求和

在 MySQL 中,如何对 LIKE 查询进行批量更新,删除字符?

0000-00-00 00:00:00 表中的日期设置为 NOT NULL

MySQL DISTINCT 日期仅返回特定表的 1 个值.相同的查询适用于其他表

使用 SET 变量进行 MySQL 查询

SQL从字典中的键获取值

JOOQ:如何将 POJO 列序列化为 JSON

DECIMAL(m, n) 在 64 位系统中如何表示?

动态创建内联 SQL 表(用于排除左连接)

mysql 按日期 Select 总和组

MySQL 整数与日期时间索引

Mysql:创建表时将DATETIME的格式设置为'DD-MM-YYYY HH:MM:SS'

加快 mysql 转储和导入

MySQL 的最大并发连接数