环境:阿里云ECS服务器上,Ubuntu linux 12.04,64位版。MySQL 5.1.html
首先查看/etc/rc.local,能够看到Ubuntu经过/etc/init.d/mysqld脚本启动mysql服务:mysql
/etc/mysqld startlinux
这个脚本是安装时从/alidata/server/mysql/目录(mysql安装目录)拷贝过来的,没问题。
sql
可是在执行这个脚本时,会调用/alidata/server/mysql/bin/my_print_defaults,ubuntu
将输出内容交给脚本函数parse_serverarguments()解析,服务器
获得$basedir, $bindir, $datadir这几个启动目录。函数
问题就出在执行my_print_defaults上。阿里云
经过执行/alidata/server/mysql/bin/my_print_defaults --help,能够看到它从如下几个目录读mysql配置:spa
后面两个路径不存在,因此只会读取前两个文件的内容。
/etc/my.cnf是安装时从/alidata目录拷过来的,没有问题。
/etc/mysql/my.cnf倒是ubuntu缺省存在的,一读,就把前面的覆盖了。.net
因此删除/etc/mysql目录,执行/etc/init.d/mysqld restart,就OK了。
[后记]
晚上时候,同事报MySQL又启动不了。错误日志:
/alidata/server/mysql/libexec/mysqld: File '/var/log/mysql/mysql-bin.index' not found (Errcode: 13)
网上搜到文章说”Errorcode:13“是目录权限问题而这个文件是存在的!mysql用户也有读写权限。
尝试给/var/log/mysql目录权限从0755改为0775,给mysql用户组也加了写权限,如今的权限是:
drwxrwxr-x 2 mysql mysql 4096 Oct 16 23:00 mysql/
继续启动MySQL,失败,但错误日志已经从刚才的变成了这个(说明mysql组也须要写权限,难道启动mysql须要其余mysql组用户?):
/alidata/server/mysql/libexec/mysqld: File './mysql-bin.000032' not found (Errcode: 2)
继续搜,在这里找到了方法,编辑/var/log/mysql/mysql-bin.index,删除其中的一行内容:
mysql-bin.000032
再次启动MySQL,成功。