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

问题描述 投票:0回答:7

当我调用文件时

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): 

但是 my.cnf 文件中给定的 sock 文件是 /home/mysqk123/tmp/mysql.sock 而我使用的是 redhat linux 5.3 和 mysql 5.1.47

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

mysql database-administration mysql-error-2002
7个回答
16
投票

由于此实用程序旨在用于标准安装,并且因为它似乎不接受任何参数,所以我看到的选项很少:

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

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

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 配置为使用非标准套接字位置,你也可以手动运行简单的命令,例如删除帐户和设置密码。


11
投票

确保启动mysql或mariadb,例如:

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

10
投票

MySQL 套接字声明应位于您的

[mysqld]
中的
my.cnf
下(在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)

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

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

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
投票

我也遇到过同样的错误,原来我已经停止了 MySQL 服务而忘记了重新启动它。所以你可能想使用如下命令检查 mysql 服务的状态:

mysqladmin -u root -p status

如果报错,说明MySQL没有运行,可以启动MySQL服务。或者,如果您愿意,您可以鲁莽地尝试使用以下命令之一启动服务,而无需先检查其状态(如果它已经在运行,则无法运行):

/etc/init.d/mysql start
service mysql start

如果您的系统正在使用该版本的 MySQL,请将

mysqld
替换为
mysqld


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 密码即可。


0
投票

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

要解决此问题,请确保您已使用适当的

/etc/my.cnf
选项正确配置您的
socket=/dir/to/mysql/socket.sock
文件。有了这个配置,告诉
mysql_secure_installation
使用这个文件和
--defaults-file
参数这样:

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

© www.soinside.com 2019 - 2024. All rights reserved.