ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
2017-12-02 23:15
886 查看
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 是一个比较常见的数据库报错,而昨天我们的服务器也报了这个错误,所有服务全挂,而且恰逢阿里云升级,以为是升级的缘故,重启了下服务器,发现各种报错,之后稳定下来了ERROR 2002 (HY000): Can't connect
to local MySQL server through socket '/tmp/mysql.sock’(2) 这个错误。而本文也主要是讲解本次故障排查的经历。
首先有必要了解一下 “mysql.sock” 。 在linux与unix系统中的socket文件是为了建立两个程序之间的连接使用的 , 而在mysql中,当mysql启动成功时,会根据配置文件中设定的路径(如:tmp/mysql.sock),在tmp中生成mysql.sock,用于连接数据库使用。而如果没有此文件,造成的结果可想而知。
说说本人这次的经历,记得午餐回来,突然同事跑过来问我,为什么网站登陆不上了,总是显示错误,而恰逢阿里云当时给我发了一条短信,即服务器升级维护有可能造成云服务不能正常使用,于是作为小白的我重启了服务器,发现静态资源可以访问了,但是数据库好像有点问题,比如登陆的时候输入错误密码,会提示密码或用户名错误,输入正确密码的时候又会重定向到登陆页面,查看了错误日志,显示session存储错误,貌似存不下session信息,之后赶紧查看配置文件,又没有查看到明显的错误,于是又重启了一下,查看了一下进程,发现mysql又没有启动起来。这错误还不停的换,也挺有意思的,这次重新进入登陆页面,输入任意用户名密码,直接抛出数据库连接失败的异常,即
‘ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2)’ ,于是针对这一错误的排场开始。
通过两次重启,以及原来系统正常使用可以推断,有可能是数据库损坏。于是输入命令 rpm -qa | grep mysql ,发现出现很多错误,如下图:
这是不是意味着rpm数据库损坏呢,于是进行rpm数据库修复 ,继续输入命令 rpm --rebuilddb ,重启服务器,发现还是报那个错误,猜测会不会是猜测是虚拟磁盘出现了
问题。
首先cd / ,然后输入df,
果然 100%占用。
换一个比较友好的显示。du
-sh * :
总共20g的系统盘,文件超过10G的无疑算是大文件了,不用想,也知道是日志文件了,
cd /home/wwwlogs
,du -sh * ,果然
发现日志文件比较大,而且暂时无用,于是清空>access.log。启动mysql
service mysql start , 果然启动成功,问题成功解决。
另外,在排查此错误是在网上看了几篇文档,虽然跟我遇到的情况不一致,不过还是贴出来一下,供大家参考。
http://blog.csdn.net/ixidof/article/details/5958904/
-----------------------------------------------
今天连接mysql数据库的时候遇到一个问题:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
参考网上相关的方法,包括:(http://blog.csdn.net/lmss82/archive/2009/08/05/4414178.aspx)
方案1.
1.#ps -A|grep mysql
显示类似:
1829 ? 00:00:00 mysqld_safe
1876 ? 00:00:31 mysqld
2.#kill -9 1829
3.#kill -9 1876
4.#/etc/init.d/mysql restart
5.#mysql -u root -p
他的麻烦解决了,我的还没解决!
继续找
方案2
先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
------------------------------------------------------------------------------------
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL: [ 确定 ]
[root@localhost lib]# mysqladmin -uroot password '123456'
[root@localhost lib]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 3 to server version: 4.1.11
Type 'help;' or '/h' for help. Type '/c' to clear the buffe
他的也解决了,我的麻烦还在继续,依然继续寻找
方案3
问题解决了,竟然是max_connections=1000 他说太多了,然后改成500也说多,无奈删之问题解决了。
还是不行
方案4
/var/lib/mysql 所有文件权限 改成mysql.mysql
不行不行
方案5
摘要:解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql .sock'连到服务器,而php标准配置正是用过'/tmp/mysql .sock',但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东:
[mysql d]
socket=/var/lib/mysql .sock
改一下就好了,但也会引起其他的问题,如mysql 程序连不上了,再加一点:
[mysql ]
socket=/tmp/mysql .sock
或者还可以通过修改php.ini中的配置来使php用其他的mysql .sock来连,这个大家自己去找找
或者用这样的方法:
ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock
成功了,就是这样ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock
OK!
但我的系统中没有找到mysql.sock文件,只有mysqld.sock文件,/var/run/mysqld/mysqld.sock
于是仿照上面的做法: ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
这样,可以正常连接数据库了
再附一篇相关文章:(http://blog.chinaunix.net/u1/43706/showart_351145.html)
mysql_real_connect()试图建立到运行
我要编一段程序用来远程连接一个mysql数据库。我在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设为"localhost"时可以正常连接,当改写为该机器的IP地址"192.168.100.2"时就连接失败。我在程序中写的原句为:
mysql_real_connect(mysql,"192.168.100.2","root","","mydns",0,NULL,0)。
最初,我以为将"localhost"改为"192.168.100.2"之后要将第六个参数端口号写上,但还是不行。由于我是在Linux上做的,所以想也许需要将第七个参数unix_socket写上,结果还是不行。于是到google找解决方法,发现要远程连接mysql需要为mysql的指定帐号设置远程连接的权限。在我的程序中,就要为root设置这一权限。事实证明,我之前连接失败正是由于这个原因导致的。但问题是,网上被广泛转贴的方法是错误的,我照做后还不行,最后问了同学才解决的。下面我具体说一下,望大家不会再被误导。
在mysql数据库中有一个mysql库,它里面包含一个user表,里面存有所有帐号及它们的权限及特征。对应我的user表中找到User项为root的,发现有两项,其Host项分别为localhost和localhost.localdomain。我们只需要把'localhost'改为'%'就可以让所有远程机器以root帐号登陆mysql服务器。也可以将'localhost'改为某一个ip地址,这样就可以在该地址的机器上登陆mysql服务器。这些都没有问题,只是网上被广为传颂的一个更改Host项的方法是错误的。他的方法是用update语句将指定User项的Host项改过来,如果想添加一个新的用于远程访问的帐号,就用insert语句添加。事实是这根本不行,我按照作了,表是变了,但还是连不上。后来经过询问才知道,要想改,结合我的情况,必须用下面的这条语句:
grant all privileges on mydns.* to 'root'@'%';
来改变root帐号的权限。如果添加新帐号也是如此。想必这个表比较特殊,用普通的SQL语句不能操作。如果帐号有密码,后面再加上identified by '***'(*为你帐号的密码)就可以了。
为了解决这个问题用了一下午的时间,费了不少周折,写出来也能让大家少走些弯路。
-------------------------------------------------------------------------------------------------------------------------------
系统版本:
昨天为了修改我的Mysql密码,找了一堆教程在不明所以的情况下各种乱试,终于把我的mysql玩脱了,走上了曲折的mysql重装之路。
如使用brew安装:
但是又有点怕某些东西没有卸载完全影响到下一次的安装(我第一次重装就是这样的��)以下是完整一点的手动卸载:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
参考:How do you uninstall MySQL from Mac OS
X?
其实不同的安装方式有些东西的存储位置不一样,删除完检查一下一些问文件是否删除了,没有的话则删除掉:
/usr/local/Cellar 里的mysql文件
/usr/local/var 里的mysql文件
/tmp 里的mysql.sock, mysql.sock.lock, my.cnf文件
pid文件和err文件都在/usr/local/var/mysql里确保删除了
brew安装的安装包存储在/usr/local/Library/Cache/Homebrew也可以一并删除
执行
此次卸载安装的过程中,感悟最深的还是对很多文件的作用都不甚了解,导致到出了什么问题就只会沿着那个问题找答案,有时候找到的答案有作用时候找到的答案就会很坑,所以就想了解一些那些文件究竟是什么作用
安装过程中最常见的问题:
记录==当前Mysql进程的Process ID==。未指定 pid 文件时,pid 文件默认名为
pid 已占用则报错
mysqld 启动后会通过
pid 并将 pid 写入 pid 文件
因此,通过
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
参考:mysql pid文件是什么用途? 温国兵 来源知乎
关于出现上述问题解决方法可参考:MySql
server startup error ‘The server quit without updating PID file ‘ 或者 MySQL提示:The
server quit without updating PID file问题的解决办法 又或者
查看一些文件的ownership:
打开同目录下的与pid同名的.err文件查看错误日志查看错误,按照错误提示去找原因
MySQL有四种类型的日志:Error Log、General Query Log、Binary Log 和 Slow Query Log。
错误日志,记录MySQL运行过程ERROR,WARNING,NOTE等信息,系统出错或者某条记录出问题可以查看ERROR日志。存放在与pid文件同目录下,默认为
日常运行日志,记录MySQL运行中的每条请求数据。在
二进制日志,包含了一些事件,这些事件描述了数据库的改动,如建表、数据改动等,也包括一些潜在改动,主要用于备份恢复、回滚等操作。
慢查询日志,用于MySQL性能调优。
其余的查看设置方法请参考MySQL日志分析
my.cnf文件是Mysql的配置文件。当Mysqld启动服务时默认会按照一定顺序读配置文件,遵循指定优于配置,后读取的配置覆盖前面读取的配置的原则,则mysql会以读取到的最后一个配置文件为准。
查看mysql读取顺序:
2
3
4
5
6
7
8
9
10
11
12
假如不存在该文件:
在试过的几种安装方法,最后都没有在这几个文件夹里找到该文件,在安装目录下的support-files找到了安装mysql时的默认配置文件,复制过去,然后修改其中的一些配置,再重启。
然后就可以很方便的启动停止mysql了(这个脚本其实是调用了mysqld_safe脚本,然后
有可能在设置/etc/my.cnf文件运行之后没有作用,查看一下读取顺序后的那几个文件是否存在,如果存在的话,删除掉再重启。{转自:mysql 重启不读取 /etc/my.cnf
全局配置问题
配置文件中一些参数:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
其他一些参数可查看:Mysql配置文件my.cnf配置及配置参数详解 或者 Mysql
之配置文件my.cnf
mysql有两种连接方式:
TCP/IP
socket
server和client在同一台服务器(host),并且使用localhost进行链接的时候,就会使用socket作为通讯协议的载体来进行连接,它比tcp快。也就是:为主机名为localhost建立的MySQL连接,该连接过程通过一个套接字文件mysql.sock实现的。所以该文件被删后,用localhost用户是连接不到MySQL服务器的。
如果出现:
查看下该文件是否存在,或者运行
假如/tmp/mysql.sock不存在,必须建立一条tcp/ip连接,即使用
假如/tmp/mysql.sock存在,查看一下mysqld的运行状态
看[mysqld]下的socket路径
mysql.sock.lock这个文件是用来检测是否已经安装的
lsof -i:3306查看端口
MySQL在整个网络环境中使用客户端/服务器(Client/Server)架构运行。其核心程序扮演着服务器角色,而各个客户端程序连接到服务器并提出请求。
server(服务器)和host(主机)的用词区别。
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
这种是没出现什么问题的安装,接下来执行
使用Brew安装mysql时出现的问题:
在brew执行install mysql之后会出现一系列的安装信息,出现一个Error,查看到了ERROR的内容:
2
3
4
5
6
7
8
执行
2
3
4
修改权限:
2
3
4
问题解决,接下来只需要执行
查找到的一些homebrew安装mysql的方法参考:OSX下使用Homebrew安装MySQL数据库 或者 MySQL安装 但是需要注意的是,这两个安装教程里面在初始化数据库的时候可能是因为mysql版本的更新,应该更改为:
(二)使用.tar.gz
安装包下载地址
2
3
4
5
6
7
8
9
10
11
12
13
14
15
转载自:mac 安装 mysql.tar.gz
(三)dmg安装mysql试过了很多遍但是一直失败��所以最后就放弃挣扎了
==以上内容很多解决办法和各文件介绍整理自网络,能找到出处的一般都是摘自后面的链接==
-------------------------------------------------------------------------------------------------------------------------------
Mac HomeBrew
安装 mysql
在网上看到各种教程,都会出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
1. 确保环境没有mysql
brew remove mysql
brew cleanup
2. 安装
brew install mysql
3. 启动
brew services start mysql
设置开机启动: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist (设置启动的命令可以通过 brew info mysql获得)
4.登录
mysql -uroot
to local MySQL server through socket '/tmp/mysql.sock’(2) 这个错误。而本文也主要是讲解本次故障排查的经历。
首先有必要了解一下 “mysql.sock” 。 在linux与unix系统中的socket文件是为了建立两个程序之间的连接使用的 , 而在mysql中,当mysql启动成功时,会根据配置文件中设定的路径(如:tmp/mysql.sock),在tmp中生成mysql.sock,用于连接数据库使用。而如果没有此文件,造成的结果可想而知。
说说本人这次的经历,记得午餐回来,突然同事跑过来问我,为什么网站登陆不上了,总是显示错误,而恰逢阿里云当时给我发了一条短信,即服务器升级维护有可能造成云服务不能正常使用,于是作为小白的我重启了服务器,发现静态资源可以访问了,但是数据库好像有点问题,比如登陆的时候输入错误密码,会提示密码或用户名错误,输入正确密码的时候又会重定向到登陆页面,查看了错误日志,显示session存储错误,貌似存不下session信息,之后赶紧查看配置文件,又没有查看到明显的错误,于是又重启了一下,查看了一下进程,发现mysql又没有启动起来。这错误还不停的换,也挺有意思的,这次重新进入登陆页面,输入任意用户名密码,直接抛出数据库连接失败的异常,即
‘ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2)’ ,于是针对这一错误的排场开始。
通过两次重启,以及原来系统正常使用可以推断,有可能是数据库损坏。于是输入命令 rpm -qa | grep mysql ,发现出现很多错误,如下图:
这是不是意味着rpm数据库损坏呢,于是进行rpm数据库修复 ,继续输入命令 rpm --rebuilddb ,重启服务器,发现还是报那个错误,猜测会不会是猜测是虚拟磁盘出现了
问题。
首先cd / ,然后输入df,
果然 100%占用。
换一个比较友好的显示。du
-sh * :
总共20g的系统盘,文件超过10G的无疑算是大文件了,不用想,也知道是日志文件了,
cd /home/wwwlogs
,du -sh * ,果然
发现日志文件比较大,而且暂时无用,于是清空>access.log。启动mysql
service mysql start , 果然启动成功,问题成功解决。
另外,在排查此错误是在网上看了几篇文档,虽然跟我遇到的情况不一致,不过还是贴出来一下,供大家参考。
http://blog.csdn.net/ixidof/article/details/5958904/
-----------------------------------------------
今天连接mysql数据库的时候遇到一个问题:Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
参考网上相关的方法,包括:(http://blog.csdn.net/lmss82/archive/2009/08/05/4414178.aspx)
方案1.
1.#ps -A|grep mysql
显示类似:
1829 ? 00:00:00 mysqld_safe
1876 ? 00:00:31 mysqld
2.#kill -9 1829
3.#kill -9 1876
4.#/etc/init.d/mysql restart
5.#mysql -u root -p
他的麻烦解决了,我的还没解决!
继续找
方案2
先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.
另外看看是不是权限问题.
------------------------------------------------------------------------------------
[root@localhost beinan]#chown -R mysql:mysql /var/lib/mysql
[root@localhost beinan]# /etc/init.d/mysqld start
启动 MySQL: [ 确定 ]
[root@localhost lib]# mysqladmin -uroot password '123456'
[root@localhost lib]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 3 to server version: 4.1.11
Type 'help;' or '/h' for help. Type '/c' to clear the buffe
他的也解决了,我的麻烦还在继续,依然继续寻找
方案3
问题解决了,竟然是max_connections=1000 他说太多了,然后改成500也说多,无奈删之问题解决了。
还是不行
方案4
/var/lib/mysql 所有文件权限 改成mysql.mysql
不行不行
方案5
摘要:解决不能通过mysql .sock连接MySQL问题 这个问题主要提示是,不能通过 '/tmp/mysql .sock'连到服务器,而php标准配置正是用过'/tmp/mysql .sock',但是一些mysql 安装方法 将 mysql .sock放在/var/lib/mysql .sock或者其他的什么地方,你可以通过修改/etc/my.cnf文件来修正它,打开文件,可以看到如下的东东:
[mysql d]
socket=/var/lib/mysql .sock
改一下就好了,但也会引起其他的问题,如mysql 程序连不上了,再加一点:
[mysql ]
socket=/tmp/mysql .sock
或者还可以通过修改php.ini中的配置来使php用其他的mysql .sock来连,这个大家自己去找找
或者用这样的方法:
ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock
成功了,就是这样ln -s /var/lib/mysql /mysql .sock /tmp/mysql .sock
OK!
但我的系统中没有找到mysql.sock文件,只有mysqld.sock文件,/var/run/mysqld/mysqld.sock
于是仿照上面的做法: ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock
这样,可以正常连接数据库了
再附一篇相关文章:(http://blog.chinaunix.net/u1/43706/showart_351145.html)
mysql_real_connect()试图建立到运行
host的一个MySQL数据库引擎的一个连接。其函数原形为:
MYSQL *mysql_real_connect(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned int client_flag)
我要编一段程序用来远程连接一个mysql数据库。我在数据库的本机上做试验,发现mysql_real_connect()的第二个参数设为"localhost"时可以正常连接,当改写为该机器的IP地址"192.168.100.2"时就连接失败。我在程序中写的原句为:
mysql_real_connect(mysql,"192.168.100.2","root","","mydns",0,NULL,0)。
最初,我以为将"localhost"改为"192.168.100.2"之后要将第六个参数端口号写上,但还是不行。由于我是在Linux上做的,所以想也许需要将第七个参数unix_socket写上,结果还是不行。于是到google找解决方法,发现要远程连接mysql需要为mysql的指定帐号设置远程连接的权限。在我的程序中,就要为root设置这一权限。事实证明,我之前连接失败正是由于这个原因导致的。但问题是,网上被广泛转贴的方法是错误的,我照做后还不行,最后问了同学才解决的。下面我具体说一下,望大家不会再被误导。
在mysql数据库中有一个mysql库,它里面包含一个user表,里面存有所有帐号及它们的权限及特征。对应我的user表中找到User项为root的,发现有两项,其Host项分别为localhost和localhost.localdomain。我们只需要把'localhost'改为'%'就可以让所有远程机器以root帐号登陆mysql服务器。也可以将'localhost'改为某一个ip地址,这样就可以在该地址的机器上登陆mysql服务器。这些都没有问题,只是网上被广为传颂的一个更改Host项的方法是错误的。他的方法是用update语句将指定User项的Host项改过来,如果想添加一个新的用于远程访问的帐号,就用insert语句添加。事实是这根本不行,我按照作了,表是变了,但还是连不上。后来经过询问才知道,要想改,结合我的情况,必须用下面的这条语句:
grant all privileges on mydns.* to 'root'@'%';
来改变root帐号的权限。如果添加新帐号也是如此。想必这个表比较特殊,用普通的SQL语句不能操作。如果帐号有密码,后面再加上identified by '***'(*为你帐号的密码)就可以了。
为了解决这个问题用了一下午的时间,费了不少周折,写出来也能让大家少走些弯路。
-------------------------------------------------------------------------------------------------------------------------------
Mac Pro下卸载安装Mysql
系统版本:OS X 10.11.5
昨天为了修改我的Mysql密码,找了一堆教程在不明所以的情况下各种乱试,终于把我的mysql玩脱了,走上了曲折的mysql重装之路。
一、Mac 关于Mysql的卸载:
如使用brew安装:brew uninstall mysql或者
brew remove mysql
但是又有点怕某些东西没有卸载完全影响到下一次的安装(我第一次重装就是这样的��)以下是完整一点的手动卸载:
sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
rm -rf ~/Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
sudo rm -rf /var/db/receipts/com.mysql.*
参考:How do you uninstall MySQL from Mac OS
X?
其实不同的安装方式有些东西的存储位置不一样,删除完检查一下一些问文件是否删除了,没有的话则删除掉:
/usr/local/Cellar 里的mysql文件
/usr/local/var 里的mysql文件
/tmp 里的mysql.sock, mysql.sock.lock, my.cnf文件
pid文件和err文件都在/usr/local/var/mysql里确保删除了
brew安装的安装包存储在/usr/local/Library/Cache/Homebrew也可以一并删除
执行
brew cleanup
二、各种文件的作用
此次卸载安装的过程中,感悟最深的还是对很多文件的作用都不甚了解,导致到出了什么问题就只会沿着那个问题找答案,有时候找到的答案有作用时候找到的答案就会很坑,所以就想了解一些那些文件究竟是什么作用安装过程中最常见的问题:
ERROR!The server quit without updating PID file (/usr/local/var/mysql/***MacBook-Pro.local.pid)
(一)Pid文件:
记录==当前Mysql进程的Process ID==。未指定 pid 文件时,pid 文件默认名为 主机名.local.pid,存放的路径在默认MySQL的数据目录。通过
mysqld_safe启动MySQL时,
mysqld_safe会检查pid文件,如果pid文件不存在,不做处理;如果文件存在,且
pid 已占用则报错
A mysqld process already exists,如果文件存在,但 pid 未占用,则删除 pid 文件。
mysqld 启动后会通过
create_pid_file函数新建 pid 文件,通过
getpid()获取当前进程
pid 并将 pid 写入 pid 文件
因此,通过
mysqld_safe启动时, MySQL pid文件的作用是:在数据文件是同一份,但端口不同的情况下,防止同一个数据库被启动多次。
➜ / ll /usr/local/var/mysql/SarahMacBook-Pro.local.pid -rw-r----- 1 sarah admin 6B 5 19 17:55 /usr/local/var/mysql/SarahMacBook-Pro.local.pid ➜ / ps -ef | grep mysql | grep -v grep 501 65673 1 0 四05下午 ?? 0:00.02 /bin/sh /usr/local/opt/mysql/bin/mysqld_safe --bind-address=127.0.0.1 --datadir=/usr/local/var/mysql 501 65767 65673 0 四05下午 ?? 0:52.44 /usr/local/Cellar/mysql/5.7.12/bin/mysqld --basedir=/usr/local/Cellar/mysql/5.7.12 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/5.7.12/lib/plugin --bind-address=127.0.0.1 --log-error=/usr/local/var/mysql/SarahMacBook-Pro.local.err --pid-file=/usr/local/var/mysql/SarahMacBook-Pro.local.pid ➜ / cat /usr/local/var/mysql/SarahMacBook-Pro.local.pid 657671
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
参考:mysql pid文件是什么用途? 温国兵 来源知乎
关于出现上述问题解决方法可参考:MySql
server startup error ‘The server quit without updating PID file ‘ 或者 MySQL提示:The
server quit without updating PID file问题的解决办法 又或者
查看一些文件的ownership:
ls -laF /usr/local/var/mysql/非mysql或者本人的hostname则修改
sudo chown -R mysql[或者hostname] /usr/local/var/mysql/
打开同目录下的与pid同名的.err文件查看错误日志查看错误,按照错误提示去找原因
(二)、错误日志:
MySQL有四种类型的日志:Error Log、General Query Log、Binary Log 和 Slow Query Log。错误日志,记录MySQL运行过程ERROR,WARNING,NOTE等信息,系统出错或者某条记录出问题可以查看ERROR日志。存放在与pid文件同目录下,默认为
主机名.local.err或在Mysql中查询
mysql> show variables like ‘log_error’;可以在
/etc/my.cnf中添加
--log-error[=file_name]选项来开启mysql错误日志
日常运行日志,记录MySQL运行中的每条请求数据。在
/etc/my.cnf中添加
general-log-file[=file_name]
二进制日志,包含了一些事件,这些事件描述了数据库的改动,如建表、数据改动等,也包括一些潜在改动,主要用于备份恢复、回滚等操作。
慢查询日志,用于MySQL性能调优。
其余的查看设置方法请参考MySQL日志分析
(三)、/etc/my.cnf文件:
my.cnf文件是Mysql的配置文件。当Mysqld启动服务时默认会按照一定顺序读配置文件,遵循指定优于配置,后读取的配置覆盖前面读取的配置的原则,则mysql会以读取到的最后一个配置文件为准。查看mysql读取顺序:
➜ ~ mysqld --help --verbose | grep -A 10 'Usage:' Usage: mysqld [OPTIONS] Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf The following groups are read: mysqld server mysqld-5.7 The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file, except for login file. --defaults-file=# Only read default options from the given file #. --defaults-extra-file=# Read this file after the global files are read.1
2
3
4
5
6
7
8
9
10
11
12
假如不存在该文件:
在试过的几种安装方法,最后都没有在这几个文件夹里找到该文件,在安装目录下的support-files找到了安装mysql时的默认配置文件,复制过去,然后修改其中的一些配置,再重启。
sudo cp /usr/local/Cellar/mysql/5.7.12/support-files/my-default.cnf /etc/my.cnf
然后就可以很方便的启动停止mysql了(这个脚本其实是调用了mysqld_safe脚本,然后
mysqld_safe再调用二进制文件 mysqld):
/etc/init.d/mysql start
有可能在设置/etc/my.cnf文件运行之后没有作用,查看一下读取顺序后的那几个文件是否存在,如果存在的话,删除掉再重启。{转自:mysql 重启不读取 /etc/my.cnf
全局配置问题
配置文件中一些参数:
[mysql] #prompt="(\\u:hostname:\D)[\\d]> " 这样使用mysql -uroot -p连接到mysql服务器时,就会显示 (root:hostname:Thu Feb 9 16:32:26 2012)[(none)]> [client]用户告诉客户端工具mysql连接数据库服务器使用的port和socket文件的路径 [mysql]用于设置客户端工具的显示信息,如在my.cnf中设置 port = 3306 //mysql服务运行时的端口号,默认为3306 password = your_password //mysql的密码 socket = /tmp/mysql.sock //socket文件存放地址 basedir = /usr/local/Cellar/mysql //根目录(安装目录) datadir = /usr/local/var/mysql //数据文件目录 pid-file = /usr/local/var/mysql/your_pid_file_name //pid文件存放的地址 log-error = /usr/local/var r/mysql/your_err_file_name.log //err文件存放地址1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
其他一些参数可查看:Mysql配置文件my.cnf配置及配置参数详解 或者 Mysql
之配置文件my.cnf
(四)、mysql.sock文件:
mysql有两种连接方式:TCP/IP
socket
server和client在同一台服务器(host),并且使用localhost进行链接的时候,就会使用socket作为通讯协议的载体来进行连接,它比tcp快。也就是:为主机名为localhost建立的MySQL连接,该连接过程通过一个套接字文件mysql.sock实现的。所以该文件被删后,用localhost用户是连接不到MySQL服务器的。
如果出现:
Can't connect to local MySQL server through socket '/tmp/mysql.sock'
查看下该文件是否存在,或者运行
mysql.server start或者
/usr/local/Cellar/mysql/5.7.12/support-file/mysql.start[你的安装目录里的support-file]再查看一下该文件是否存在
假如/tmp/mysql.sock不存在,必须建立一条tcp/ip连接,即使用
127.0.0.1而不是
localhost作为-h的参数去连接MySQL服务器,如:
mysqladmin -h 127.0.0.1 -u root -p shutdown,强制地建立一条tcp/ip连接,关闭MySQL服务器,再重新以
localhost为主机名启动MySQL服务器,它就会重新创建一个套接字文件。转自:mysql.sock的作用
假如/tmp/mysql.sock存在,查看一下mysqld的运行状态
mysqld status启动它,查看是否是权限问题
ls -laF /usr/local/var/mysql/[安装的datadir]如果非host则修改权限
sudo chown -R mysql[或者hostname] /usr/local/var/mysql/然后再重启一下mysql, 如果还不起作用可以修改/etc/my.cnf
看[mysqld]下的socket路径
socket=/usr/local/var/mysql/mysql.sock,重启mysql
mysql.sock.lock这个文件是用来检测是否已经安装的
lsof -i:3306查看端口
kill -9 PID杀掉进程
(五)、mysqld,mysql_safe,mysql_client,mysql_server
:
MySQL在整个网络环境中使用客户端/服务器(Client/Server)架构运行。其核心程序扮演着服务器角色,而各个客户端程序连接到服务器并提出请求。MySQL Server或者说
mysqld,实际上是一个数据库服务器程序。它管理着对磁盘数据库和内存的访问,是mysql核心程序,生成管理数据库实例、数据库实例任务调度线程,并提供相关接口供不同客户端调用.
MySQL Server进行多线程操作,它支持多个客户端连接的同时访问。为了更好地管理数据库内容,
MySQL Server的特色架构模型支持多种存储引擎以处理不同类型的表(例如,它同时支持事务和非事务表)。
server(服务器)和host(主机)的用词区别。
Server是指软件(MySQL Server程序mysqld)。Server的特征中有它的版本号,指的是哪些特性包括,哪些不包括等。而host是指==server程序运行所在的物理机==。Host的特征中包括了硬件配置,所运行的操作系统,其网络地址等等。一个host可以有多个mysqld实例在上面同时运行。
mysql-client:操作数据库实例的工具,操作mysql实例的客户端有很多,mysql-client只是其中一种,包括mysql,mysqldump,mysqlslap,这些访问,备份,压力测试的工具。客户端程序被用于和server进行通信以修改服务器端server管理的数据库信息。
mysql-server与
mysql-client是DBMS的两个面向不同操作对象的工具。server是DBMS面向物理层次,包含存储数据的一系列机制、处理方法的集成;client是DBMS面向用户,提供一系列工具为用户所用,这些工具包括通常写的sql在内都要通过server的编译才能操作物理数据。参考:Mysql客户端/服务器
mysqld_safe在Unix和NetWare中推荐使用
mysqld_safe来启动mysqld服务器。
mysqld_safe增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息
三、mysql安装
(一)使用brew安装
brew update//更新
brew install mysql//安装mysql,注意查看此安装过程中出现的信息
➜ ~ brew install mysql /* * 下载安装,一开始安装的都没有密码,需要运行mysql_secure_installation做些设置,里面就会设置密码 */ ==> Downloading https://homebrew.bintray.com/bottles/mysql-5.7.12.el_capitan.bot ######################################################################## 100.0% ==> Pouring mysql-5.7.12.el_capitan.bottle.tar.gz ==> /usr/local/Cellar/mysql/5.7.12/bin/mysqld --initialize-insecure --user=sarah --b ==> Caveats We've installed your MySQL database without a root password. To secure it run: mysql_secure_installation To connect run: mysql -uroot To have launchd start mysql now and restart at login: brew services start mysql Or, if you don't want/need a background service you can just run: mysql.server start1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
这种是没出现什么问题的安装,接下来执行
mysql_secure_installation按照它里面的提示去设置,设置完就可以直接运行了。接下来说说我遇到的坑
使用Brew安装mysql时出现的问题:
在brew执行install mysql之后会出现一系列的安装信息,出现一个Error,查看到了ERROR的内容:
==> Pouring mysql-5.7.12.el_capitan.bottle.tar.gz Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink lib/libmysqlclient.20.dylib /usr/local/lib is not writable. You can try again using: brew link mysql1
2
3
4
5
6
7
8
执行
brew link mysql:
➜ ~ brew link mysql Linking /usr/local/Cellar/mysql/5.7.12... Error: Could not symlink lib/libmysqlclient.20.dylib /usr/local/lib is not writable. //这个文件夹不可写1
2
3
4
修改权限:
➜ ~ sudo chown -R $(whoami) /usr/local/lib/ Password: ➜ ~ brew link mysql Linking /usr/local/Cellar/mysql/5.7.12... 93 symlinks created1
2
3
4
问题解决,接下来只需要执行
mysql_secure_installation去设置密码就行
查找到的一些homebrew安装mysql的方法参考:OSX下使用Homebrew安装MySQL数据库 或者 MySQL安装 但是需要注意的是,这两个安装教程里面在初始化数据库的时候可能是因为mysql版本的更新,应该更改为:
unset TMPDIR–>
mysqld -initialize --verbose --user=whoami --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp假如在安装过程中遇到其他例如pid或者mysql.sock的问题可以参考前面介绍的那些问题解决方法。
(二)使用.tar.gz
安装包下载地址
//解压到安装目录 /usr/local/mysql //将解压后的包移动到安装目录下 sudo mv mysql-5.7.12-osx10.11-x86_64 /usr/local/mysql //更改mysql安装目录所属用户与用户组(权限) cd /usr/local sudochown -R root:wheel mysql //完成一些默认的初始化,执行完下面这一步会出现一个临时的密码,请保存好这密码以便修改密码 sudo bin/mysqld --initialize --user=mysql cd /usr/local/mysql sudo support-files/mysql.server start //启动 sudo support-files/mysql.server restart //重启 sudo support-files/mysql.server stop //停止 sudo support-files/mysql.server status //检查 MySQL 运行状态 //修改密码,输入上面给的密码 mysqladmin -u root -p旧密码 password 新密码1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
转载自:mac 安装 mysql.tar.gz
(三)dmg安装mysql试过了很多遍但是一直失败��所以最后就放弃挣扎了
==以上内容很多解决办法和各文件介绍整理自网络,能找到出处的一般都是摘自后面的链接==
-------------------------------------------------------------------------------------------------------------------------------
Mac HomeBrew
安装 mysql
在网上看到各种教程,都会出现ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
1. 确保环境没有mysql
brew remove mysql
brew cleanup
2. 安装
brew install mysql
3. 启动
brew services start mysql
设置开机启动: launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist (设置启动的命令可以通过 brew info mysql获得)
4.登录
mysql -uroot
相关文章推荐
- 解决ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 解决“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (60)”
- mysql连接之ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2
- CentOS下面ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 记一次 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’(2) 排错流程
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 解决“ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)”
- Mysql连接错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (
- mac ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- 阿里云报错:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock’
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) 报错解决方案
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- CentOS下面ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
- ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (