最近mac上折腾mysql,apache。mysql装完之后,可以正常使用。随后又折腾了一下其他软件,再回过头来的时候,发现mysql挂掉了,原因不明。
账号密码都记得,但都是登录不进去。最后决定重新配置一下mysql文件结构。(默认安装的,不太清楚mysql怎么存放各文件的)
首先,找my.cnf文件,发现find了整个系统,并没有。
于是在/etc/下新建了这个文件,配置好参数。mysqld进程启动时默认会读这个位置的my.cnf文件的。
my.cnf文件需要配置最重要的一个参数,也就是数据结构。之前玩mysql的系统表结构数据都在里面呢。怎么找到这个目录呢
<pre>
sudo find / -name "*.frm"
</pre>
得到位置:
<pre>
/usr/local/var/mysql
</pre>
编写/etc/my.cnf文件如下:
<pre>
[mysqld]
datadir=/usr/local/var/mysql
socket=/usr/local/var/mysql/mysql.sock
user=mysql
Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
</pre>
然后启动mysqld
<pre>
mysqld
</pre>
发现报错
<pre>
[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
</pre>
进程已经启动了。干掉他
<pre>
ps aux | egrep 'mysql'
</pre>
<pre>
_mysql 2091 0.0 0.1 2830692 7516 ?? Ss 5:23下午 0:10.45 /usr/local/mysql/bin/mysqld --user=_mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/usr/local/mysql/data/mysqld.local.err --pid-file=/usr/local/mysql/data/mysqld.local.pid
xxxx 9213 0.0 0.0 2423384 232 s002 R+ 9:33上午 0:00.00 egrep mysql
</pre>
<pre>
kill -9 2091
</pre>
其实在看进程的时候就可以看到一些启动参数了。
再次mysqld命令启动,发现还是端口被占用,进程id变了。
感觉是mysql的守护进程自启动了。
打开/Library/LaunchDaemons
<pre>
cd /Library/LaunchDaemons/
</pre>
果然找到这个文件
<pre>
com.oracle.oss.mysql.mysqld.plist
</pre>
这个文件启动的话,参数是在这个plist文件里面配置的,就不会使用/etc/my.ini文件。所以,这里把这个文件干掉(备份一下)
干掉后必须重启一下。因为守护进程是系统启动的时候读取/Library/LaunchDaemons/下的配置文件,然后启动的。
如果该进程被意外杀死,系统会重新启动。只要删除plist,重启系统,才可以把他干掉。
重启后,使用命令重启mysqld进程。
<pre>
mysqld
</pre>
再试试登录,成功了。
<pre>
mysql -u root -p
123456
mysql
</pre>
mysql不能使用的原因我还是不太清楚,文件权限?或者意外关闭导致的?反正重新自己配置my.cnf,mysql可以正常使用了。
另外自己在my.cnf配置的目录,要记得给权限。我偷懒全部给了777。
sudo chomod -R 777 /usr/local/var/mysql
mysql可以跑起来了
后记,再次发生了该情况,启动mysqld时报错
<pre>
[ERROR] Another process with pid 578 is using unix socket file.
</pre>
也就是有个进程578正在使用socket文件,导致启动失败。
查一下是否mysql进程启动中,发现并没有。
解决办法:杀掉
<pre>
sudo kill -9 578
</pre>
再次启动,成功
直接杀掉这么做,有点不安全,不清楚为何会有进程占用socket文件,