使用CentOS 7和MariaDB 10.2.11,遇到了Socket错误记述(不在那儿!)

前言

环境

    • asianux7(※CentOS7.2相当)

 

    • mariaDB10.2.11

 

    • VirtualBox5.1.30

 

    Vagrant1.9.8

遇到错误 (Yù cuò wù)

当我试图使用MariaDB时,遇到了以下错误。

[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

生存直到生命的旅程

在中国谷歌一下

我看了很多解决方法,其中一种是创建/var/lib/mysql/mysql.sock,或者授权的解决方法。

mysql.sock 是一个MySQL数据库的Unix套接字文件。

我检查了一下非常奇怪的mysql.sock文件。
它并没有消失也没有丢失权限。
为了确保,我尝试将其删除并使用touch重新创建,但现象没有改变。

[vagrant@asianux7 ~]$ ls -l /var/lib/mysql
合計 116796
-rw-rw---- 1 mysql mysql    16384 12月 14 11:54 aria_log.00000001
-rw-rw---- 1 mysql mysql       52 12月 14 11:54 aria_log_control
-rw-rw---- 1 mysql mysql     2682 12月 14 11:54 ib_buffer_pool
-rw-rw---- 1 mysql mysql 50331648 12月 14 11:54 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 11月 29 14:28 ib_logfile1
-rw-rw---- 1 mysql mysql 18874368 12月 14 11:54 ibdata1
-rw-rw---- 1 mysql mysql        0 11月 29 14:28 multi-master.info
drwx------ 2 mysql mysql     4096 10月 18 17:43 mysql
-rwxrwxrwx 1 mysql mysql        0 12月 14 11:34 mysql.sock
drwx------ 2 mysql mysql     4096 10月 18 17:43 performance_schema
drwx------ 2 mysql mysql     4096 12月 13 11:45 school
-rw-rw---- 1 mysql mysql    24576 11月 29 14:28 tc.log

查询MariaDB的状态

看起来服务启动失败了。

[vagrant@asianux7 ~]$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead)
(以下略)

调查服务启动失败的原因

我会查看日志。我找到了错误的地方。

[vagrant@asianux7 log]$ sudo view /var/log/mariadb/mariadb.log
(抜粋)
2017-12-14 11:06:26 140712117258368 [ERROR] /usr/sbin/mysqld: unknown variable 'default_password_lifetime=0'
2017-12-14 11:06:26 140712117258368 [ERROR] Aborting

修改我的.cnf配置文件

我记起来了,我在某个网站上查找后设置了不需要永久更改密码的选项,所以我打算以后再次去查找。

[vagrant@asianux7 ~]$ sudo vi /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
symbolic-links=0
character-set-server=utf8
default_password_lifetime = 0 ←**ここを削除**

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

!includedir /etc/my.cnf.d

(追記)default_password_lifetime看起来是MySQL独有的变量。在MariaDB中无法使用…
MariaDB 10.1与MySQL 5.7之间的系统变量差异

启动mariaDB

我要尝试启动MariaDB。

[vagrant@asianux7 etc]$ sudo systemctl start mariadb

轻而易举地成功了。

登录MySQL

看起来也能登录。

[vagrant@asianux7 etc]$ mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 8
Server version: 10.2.11-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

总结

由于

    • mariaDB起動中に設定ファイルを変更したが、不正な内容だった。

 

    • サーバーを再起動後、自動起動設定のmariaDBサービスがエラーで起動されていなかった。

 

    mysqlログインでsocketエラーが表示されて、ぱっと見原因分からず。

反思,或者说是教训。

    • 設定を変えたらすぐにサービスを再起動して設定に問題がないか確認しよう。

 

    • ググる前にログを確認しよう。(たぶん瞬殺)

 

    MySQLとmariaDBは別人(似てるけど)。

贴士

    • ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (111) はmariaDB(またはMySQL)サービスが起動していないときに発生する。(*1)

 

    $sodo systemctl start mariadb で起動してみる。起動できない場合はログ等でエラーの原因を探す。

*1 经过第二天的验证,当我启动mysql客户端时,发现只是mariaDB未启动,没有出现相同的错误(111)。
我计划在空闲时段查阅mariaDB的源码以进行确认。

[vagrant@asianux7 ~]$ sudo systemctl stop mariadb
[vagrant@asianux7 ~]$ sudo systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
  Drop-In: /etc/systemd/system/mariadb.service.d
           └─migrated-from-my.cnf-settings.conf
   Active: inactive (dead)
(略)
※mariaDBを終了させた状態でクライアントログイン
[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can`t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
※ダメな設定に戻す
[vagrant@asianux7 ~]$ sudo vi /etc/my.cnf
※mariaDBの起動を失敗させる
[vagrant@asianux7 ~]$ sudo systemctl start mariadb
Job for mariadb.service failed because the control process exited with error code. See "systemctl status mariadb.service" and "journalctl -xe" for details.
※起動失敗の状態でクライアントログイン
[vagrant@asianux7 ~]$ mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can`t connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

再坚持下去

在网上搜索了一些英语网站后,我发现(111)被定义为“connection refused”,即“访问被拒绝错误”。
MySQL官方网站上提到了可能的原因之一是“服务器未在运行”(这种表述有点含糊不清……)。
6.2.7是“访问被拒绝错误”的原因。

因此,我放心地得知在上面提到的提示文章并没有错误。然而,关于在场景(2)和(111)中出现的差异仍然是一个谜。

希望您后继有益。

广告
将在 10 秒后关闭
bannerAds