由于我是deepin系统,使用apt-get 成功安装mysql并且启动
一:查找配置文件
众所周知,mysql的配置文件名为my.cnf,首先我通过locate命令得到了所有my.cnf文件路径:
root@tioncico-PC:/home/tioncico# locate my.cnf /etc/alternatives/my.cnf /etc/mysql/my.cnf /etc/mysql/my.cnf.fallback /home/tioncico/PhpstormProjects/test/my.cnf /root/.local/share/Trash/files/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/include/default_my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/federated/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/group_replication/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_big/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_binlog/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_ddl/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_memcache/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_rpl/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndb_team/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/ndbcluster/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/rpl/extension/bhs/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/rpl/my.cnf /root/.local/share/Trash/files/mysql/mysql-test/suite/rpl_ndb/my.cnf /root/.local/share/Trash/info/my.cnf.trashinfo /var/lib/dpkg/alternatives/my.cnf
其实在这个时候,我已经知道了mysql默认加载的应该是/etc/mysql/my.cnf
但是不够严谨啊?mysql默认这个,为什么是默认这个,有文档吗?
在后来,我知道了新的命令,用于查看mysql的默认加载路径:
root@tioncico-PC:/home/tioncico# mysql --help |grep my.cnf order of preference, my.cnf, $MYSQL\_TCP\_PORT, /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf root@tioncico-PC:/home/tioncico# mysqld --verbose --help |grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf root@tioncico-PC:/home/tioncico#
上面这2个命令都可以获得加载的路径
按照网上所说,默认配置文件根据这3个不同的路径优先级进行选择,现在我的磁盘中没有/etc/my.cnf,在用户下也没有,所以自然是加载/etc/mysql/my.cnf啦~
二:自定义路径
那我继续,新增一个/etc/my.cnf 的文件
\[mysql\] port = 3307 socket = /media/tioncico/f/tmp/mysql.sock \[client\] socket = /media/tioncico/f/tmp/mysql.sock
然后重启mysql,去查看3307端口是否占用
root@tioncico-PC:/home/tioncico# service mysql restart root@tioncico-PC:/home/tioncico# service mysql restart root@tioncico-PC:/home/tioncico# lsof -i :3307 root@tioncico-PC:/home/tioncico#
哎?没调用成功?没有加载/etc/my.cnf???
这个咋整啊,咋回事啊,懵逼了啊
后来我理了理思路,service的命令,本质就是调用/etc/init.d/目录的命令而已
我找到了/etc/init.d/mysql,打开看了看
emmmmm,看不懂。但是我感觉不简单,所以重新找了其他系统的/etc/init.d/mysqld来进行查看
发现了deepin安装的mysql脚本和centos使用宝塔安装的脚本代码不一致
deepin的完全缺少这一行
所以,自定义配置项的引入,需要根据init.d的脚本来进行逻辑查看,才清楚到底是加载的什么配置文件
三:sock文件找不到的报错
root@tioncico-PC:/home/tioncico# mysql -uroot -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
该报错的意思是没找到/tmp/mysql.sock,进,目录查看确实是没有的
但是后来我发现,是因为之前我新增了一个/etc/my.cnf 里面配置就是这个
然后问题来了:
由于我的mysql服务器加载的配置是
/etc/mysql/my.cnf
而 mysql -uroot -p 默认加载的配置文件成为了/etc/my.cnf
导致了这个命令以为/etc/my.cnf是真正的配置,去读取里面的sock配置,导致读取不出
只需要删除该配置文件即可