使用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)中出现的差异仍然是一个谜。
希望您后继有益。