My.cnf中的MySQL Socketconfiguration问题

我的应用程序中有一个导致数据库时间很长的问题。

DB是Percona MySQL 5.5.35。

该应用程序工作完美,可以读取/写入数据库就好了。 问题是,我有非常长的数据库响应时间,这绝对不是花在执行查询上的时间,这些都是简单的,并且caching的。

例如,我会随机将响应时间分成几秒钟,其他时间则只需几毫秒。 有慢查询日志设置和查询速度慢,他们都是简单的插入的小数据和大约80%的读取,整个数据库只有20MB,这是一个互联网论坛。

新的Relic应用程序图表显示DB连接时间的巨大峰值

我确定问题归结于socket,因为我不能在my.cnf的mysqld部分指定套接字。 如果我这样做,我重新启动数据库时出现错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 

例如,下面是my.cnf的实际工作副本,删除了不相关的部分:

 [mysql] # CLIENT # port = 3306 socket = /var/lib/mysql/mysql.sock [mysqld] # General # default-storage-engine = InnoDB # Database replication # server-id=1895149 log-bin=mysql-bin log-error=mysql-bin.err binlog_do_db=reefbase1 # MyISAM # key-buffer-size = 32M myisam-recover = FORCE,BACKUP 

注意在mysqld部分没有指定端口和套接字?

如果我改变这个:

 [mysql] # CLIENT # port = 3306 socket = /var/lib/mysql/mysql.sock [mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock # General # default-storage-engine = InnoDB # Database replication # server-id=1895149 log-bin=mysql-bin log-error=mysql-bin.err binlog_do_db=reefbase1 # MyISAM # key-buffer-size = 32M myisam-recover = FORCE,BACKUP 

这是我怎么看一遍又一遍,my.cnf被设置,我的服务器无法启动“无法连接”的错误。

任何意见将非常感激。

第一点要记住的是,如果客户端被configuration为使用本地主机,许多mysql客户端(包括php)将默认为unix套接字风格的通信。 如果您的服务器没有正确设置此套接字,则客户端可能正试图连接到套接字并失败。

其余部分从我们在评论中的讨论中总结出来。

在任何情况下,因为你的服务器没有被configuration为创build一个套接字,并且客户端指向了一个Ubuntu系统不常见的位置,所以我认为你应该首先修改它以指向标准的Debian / Ubuntu位置,用于pid和套接字文件。 这是/var/run/mysqld/mysqld.sock ,或最近的/run/mysqld/mysqld.sock

其他位置应该在理论上工作,虽然我猜测什么是不是写权限或什么东西。

我的问题稍有不同,但是这个问题出现了search。 并通过TCP连接而不是套接字解决了我的问题。 它也帮助别人。

即在你的客户部分,把:

 host=127.0.0.1 

和/或

 protocol=tcp