折腾了几天搞这个鬼东西,总结下经验
mysql 编译安装问题:
问题一. ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/usr/local/mysql/mysql.sock‘ (2)
1、先查看 /etc/rc.d/init.d/mysqld status 看看mysql服务是否已经启动.
service mysqld start
或
service mysql start
2.chown -R mysql:mysql /usr/local/mysql 赋予访问权限
3. 本人遇到的情况(mysql正常启动):
编
译的时候,sock文件自定义在/usr/local/mysql/下,phpinfo出来的mysql信息也一致,可是在mysql启动的时
候,mysql.sock竟然会在 /tmp 下生成!
而我的mysql.sock路径设置在 /usr/local/mysql下,当编译安装完,它也会产生一个mysql.sock在定义目录下,但是
lamp运行时,php会出现链接不了mysql. 我在my.cnf 里 把sock路径修改到 tmp下,重新启动就可以了.
而后我尝试把路径改回去,发现又报错。于是我把/usr/local/mysql下的mysql.sock删除,启动mysql,从tmp里面 link
一个过去 /usr/local/mysql里面,发现 竟然 OK 了!然后我重新启动下mysql,尼玛 又失败;
我重复上一次做法删掉link过去,又OK!再往复几次结果一样...
总结如下:
对mysql.sock来说,其作用是程序与
mysqlserver处于同一台机器,发起本地连接时可用。 mysql.sock是随每一次 mysql
server启动生成的,根据你在更改完my.cnf后重启mysql时重新生成了一次,信息已跟着变更。也就是说,每一次启动mysql,它的sock
生成路径是由my.cnf指定的(本人也测试过) .
解决方案:
(1) 在 my.cnf 里修改mysql.sock路径到tmp目录下, 重新启动mysql,phpinfo查看mysql的socket信息路径 是否一致!
(2)修改完my.cnf的sock路径后,phpinfo出来的信息依然是没修改前时:
把/usr/local/mysql/mysql.sock文件删掉, 重启mysql, 使用命令 link /tmp/mysql.sock /usr/local/mysql/mysql.sock
(注意: 这是在mysql启动的时候设置,设置完不能重启mysql否则又失效.如果下次重启mysql时,重复上述ok)
问题二. mysql启动失败: Starting MySQL.The server quit without updating PID file (/[FAILED]l/mysql/data/iZ28a3f2r46Z.pid).
1、可能是/usr/local/mysql/data/mysql.pid文件没有写的权限
解决方法 :给予权限,执行 “chown -R mysql:mysql /usr/local.mysql/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
2、可能进程里已经存在mysql进程
解决方法:用命令“ps -ef|grep mysqld”查看是否有mysqld进程,如果有使用“kill -9 进程号”杀死,然后重新启动mysqld!
3、可能是第二次在机器上安装mysql,有残余数据影响了服务的启动。
解决方法:去mysql的数据目录/data看看,如果存在mysql-bin.index,就赶快把它删除掉吧,它就是罪魁祸首了。
4、mysql在启动时没有指定配置文件时会使用/etc/my.cnf配置文件,请打开这个文件查看在[mysqld]节下有没有指定数据目录(datadir)。
解决方法:请在[mysqld]下设置这一行:datadir = /usr/local/mysql/data
5、skip-federated字段问题
解决方法:检查一下/etc/my.cnf文件中有没有没被注释掉的skip-federated字段,如果有就立即注释掉吧。
6、错误日志目录不存在
解决方法:使用“chown” “chmod”命令赋予mysql所有者及权限
7、selinux惹的祸,如果是centos系统,默认会开启selinux
解决方法:关闭它,打开/etc/selinux/config,把SELINUX=enforcing改为SELINUX=disabled后存盘退出重启机器试试。
尝试检查上面多种可能性,竟然都不是我的问题所在, 尼玛 哥遇到的问题特么奇葩!
不过经过一番波折,终于解决!其实就是内存不足! mysql5.6 就是一个内存杀手,
服务器启动mysql,free -m查看内存,妈蛋占了我400M(这次只是租个服务器来玩玩,所以内存总共也就512M).
解决办法:
到 my.cnf 输入如下
innodb_buffer_pool_size = 50M
performance_schema_max_table_instances = 400
table_definition_cache = 400
table_open_cache = 228
重启 OK!