mysql_secure_installation: "通过套接字无法连接到本地MySQL服务器"

22

我调用mysql_secure_installation文件时出现错误,如下:

    [mysqk123@InstallZeMo bin]$ ./mysql_secure_installation 
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!


In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Enter current password for root (enter for none): 

但是在我的.cnf文件中给出的sock文件是/home/mysqk123/tmp/mysql.sock,我正在使用redhat linux 5.3和mysql 5.1.47。

我知道mysql_secure_installation脚本执行的任务可以手动执行,但是这里我必须运行脚本[不允许手动执行任务]。

8个回答

17

由于该实用程序旨在在标准安装上使用,并且似乎不接受任何参数,因此我认为几乎没有什么选择:

  • 临时配置MySQL以在过程时间内使用默认套接字位置(或者从默认位置到自定义位置的符号链接可能有效)。
  • 修改脚本mysql_secure_installation,使其使用您的自定义位置。如果我理解正确,该脚本会在第46行左右的make_config子例程中创建一个临时配置文件,名为./.my.cnf.$$(其中$$是进程ID)。

修改如下: (免责声明:未经测试 :)

make_config() {
    echo "# mysql_secure_installation config file" >$config
    echo "[mysql]" >>$config
    echo "user=root" >>$config
    echo "password='$rootpass'" >>$config
    # add the line below
    echo "socket=/home/mysqk123/tmp/mysql.sock" >>$config
}

再次强调,此脚本适用于标准的开箱即用安装。告诉您的老板(或客户),如果您能够配置 MySQL 使用非标准套接字位置,那么您也能够手动运行简单的命令,例如删除帐户和设置密码。


3
从MySQL 5.7.2开始,mysql_secure_installation.sh将被一个二进制文件所取代,该文件可以在命令行上接受选项,特别是--socket=path。我还没有测试过它,但当我了解更多时,我会更新答案。 - RandomSeed
昨晚在我不得不恢复我的根密码后,我使用了相同的修复方法。我一定是有一个标准的安装,因为它在周六第一次运行时就正常工作了。只有在随后的运行中,我发现它更喜欢“/tmp/mysql.sock”路径。什么改变了?当然不是my.cnf文件。而且我没有在脚本本身中找到那个套接字路径。怎么回事? - will

13

确保您启动了MySQL或MariaDB,例如:

sudo systemctl start mariadb.service
sudo systemctl enable mariadb.service

11
MySQL Socket声明应该位于my.cnf中的[mysqld]下面(在Debian版本中位于/etc/mysql/my.cnf)。使用以下命令也可以找到MySQL Socket信息:
mysql> show variables like 'socket';
+-----------------------------------------+-------------------------------+
| Variable_name                           | Value                         |
+-----------------------------------------+-------------------------------+
| socket                                  | /yourpath/mysql.sock          |
+-----------------------------------------+-------------------------------+
1 rows in set (0.00 sec)

更新当前会话的环境变量并执行命令,例如:

export MYSQL_UNIX_PORT=/home/mysql123/tmp/mysql.sock
./mysql_secure_installation

1
你从哪里获取mysql.sock路径? - trainoasis
由于在运行mariadb-secure-installation之前移动了mysql数据目录,我解决了与mariadb-secure-installation相关的问题。下次,请遵循安装流程,在mariadb安装后立即运行mariadb-secure-installation...然后再移动数据目录。 - CA3LE

5
您可以创建一个符号链接到套接字文件,然后将其删除:
ln -s /home/mysqk123/tmp/mysql.sock /var/lib/mysql/mysql.sock
mysql_secure_installation # Do your stuff
rm -rf /var/lib/mysql/mysql.sock

3

如果您使用的是MariaDB,请执行以下操作:

在运行之前:mysql_secure_installation

Step 1: sudo systemctl stop mariadb
Step 2: sudo systemctl start mariadb
Step 3: mysql_secure_installation

这将会要求你输入 root 密码,你可以直接按 Enter 并设置新的 root 密码。


1
我在第一步遇到了这个问题: 系统未使用systemd作为init系统(PID 1)进行启动。无法操作。 - Manthan_Admane

3
我曾经遇到过这个错误,原来是我停止了MySQL服务但忘记重启它。因此,您可能需要使用类似以下命令的命令检查mysql服务的状态: mysqladmin -u root -p status 如果您收到错误消息,则表示MySQL未运行,您可以启动MySQL服务。或者,如果您愿意冒险,可以尝试在不先检查其状态的情况下启动服务(如果已经运行则无法成功),使用以下其中一条命令:
/etc/init.d/mysql start
service mysql start

如果您的系统正在使用 MySQL 的那个版本,请用 mysqld 替换 mysqld

0
mysql_secure_installation --defaults-file=/etc/my.cnf

0

mysql_secure_instllation 会在当前工作目录中创建自己的(隐藏和临时的)my.cnf 文件。对于普通安装,这不应该会引起问题,但如果您已经配置了 SQL 服务器以将套接字放置在非标准位置,则会引起问题。

为了解决这个问题,请确保您已经正确地配置了适当的 /etc/my.cnf 文件,并使用适当的 socket=/dir/to/mysql/socket.sock 选项。配置完成后,使用以下命令告诉 mysql_secure_installation 使用此文件:--defaults-file 参数如下:

mysql_secure_installation --defaults-file=/etc/my.cnf


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接