今天把mysql从5.1升级到5.5启动的时候报如下错误:Starting MySQL... ERROR! The server quit without updating PID file (/usr/local/mysql/var/xiaohuai_S2.pid).
安以往的经验,可能是mysql卡住了,有个僵尸进程,我们查看一下[root@xiaohuai ~]# ps -ef|grep mysql
root 21841 21275 0 13:19 pts/0 00:00:00 grep mysql
发现并没有僵尸进程卡在那,然后各种谷歌和百度,发现,原来mysql5.1升级到5.5以后,skip-locking这个参数的写法改为了skip-external-locking,在5.5中已经不识别skip-locking了,果断的去my.cnf里把skip-locking修改成skip-external-locking,重新启动mysql,果然好了。
顺道说下这个skip-external-locking这个参数:
MySQL的配置文件my.cnf中默认存在一行skip-external-locking的参数,即“跳过外部锁定”。根据MySQL开发网站的官方解释,External-locking用于多进程条件下为MyISAM数据表进行锁定。
如果你有多台服务器使用同一个数据库目录(不建议),那么每台服务器都必须开启external locking;
参数解释
当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。由于服务器访问数据表时经常需要等待解锁,因此在单服务器环境下external locking会让MySQL性能下降。所以在很多Linux发行版的源中,MySQL配置文件中默认使用了skip-external-locking来避免external locking。
参数使用说明
如果是多服务器环境,希望打开external locking特征,则前面加“#”注释掉这一行即可# skip-external-locking
如果是单服务器环境,则将其禁用即可,使用如下语句skip-external-locking
另外skip-innodb已经改成loose-skip-innodb了。