安装mysql过程中的问题

问题关键字:

/usr/local/webserver/mysql/libexec/mysqld: File '/data/mysqldata/binlog/binlog.index' not found (Errcode: 13)


问题背景:

以下是我验证过的多次的mysql安装过程,大家可直接进行使用。mysql的安装路径在:/usr/local/webserver/mysql下。但是我再一次使用以下脚本安装的过程的中,执行到初始化数据库表的时候,就出现了问题。

#----------Add user-------#

/usr/sbin/groupaddmysql

/usr/sbin/useradd -g mysqlmysql


#--------Confiugre & make install -------#

cd /root/tools

tar zxvf mysql-5.5.3-m3.tar.gz

cd mysql-5.5.3-m3/

./configure --prefix=/usr/local/webserver/mysql/ --enable-assembler --with-extra-charsets=complex --enable-thread-safe-client --with-big-tables --with-readline --with-ssl --with-embedded-server --enable-local-infile --with-plugins=partition,innobase,myisammrg

make && make install


chmod +w /usr/local/webserver/mysql

chown -R mysql:mysql /usr/local/webserver/mysql

cd ..


#--------Make dir----------#

mkdir -p /data/mysql/data/

mkdir -p /data/mysql/binlog/

mkdir -p /data/mysql/relaylog/

chown -R mysql:mysql /data/mysql/


#--------Initialize MySQL-----#

/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data/mysql/data --user=mysql


#-------Start MySQL----------#

[ -f /root/tools/my.cnf ] && cp /usr/local/webserver/mysql/my.cnf

echo "/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/usr/local/webserver/mysql/my.cnf&" >> /etc/rc.local

/bin/sh /usr/local/webserver/mysql/bin/mysqld_safe --defaults-file=/usr/local/webserver/mysql/my.cnf &


具体问题现象:

出现的问题如下:使用/usr/local/webserver/mysql/bin/mysql_install_db --basedir=/usr/local/webserver/mysql --datadir=/data/mysql/data --user=mysql初始化的时候。系统的提示mysqld不能够打开此/data/mysqldata/binlog/binlog.index文件。此文件为打开binlog日志会生成的文件。提示信息如下:(另:有些人在进行数据库迁移的时候也同样出现过此情况。)

[root@web_mobile mysql]#  bin/mysql_install_db  --basedir=/usr/local/webserver/mysql --datadir=/data/mysql/data --user=mysql

Installing MySQL system tables...

/usr/local/webserver/mysql/libexec/mysqld: File '/data/mysqldata/binlog/binlog.index' not found (Errcode: 13)

140317 17:10:28 [ERROR] Aborting


140317 17:10:28 [Note] /usr/local/webserver/mysql/libexec/mysqld: Shutdown complete



Installation of system tables failed!  Examine the logs in

/data/mysql/data for more information.


You can try to start the mysqld daemon with:


   shell> /usr/local/webserver/mysql/libexec/mysqld --skip-grant &


and use the command line tool /usr/local/webserver/mysql/bin/mysql

to connect to the mysql database and look at the grant tables:


我的思路,问题解决:

大家可以看到使用的安装mysql的步骤,数据文件是存放在/data/mysql中的,就算真的是mysqld打不开binlog日志也应该是提示:

/usr/local/webserver/mysql/libexec/mysqld: File '/data/mysqldata/binlog/binlog.index' not found (Errcode: 13)(/data/mysql/binlog/binlog.index才是我想要保存的地方呀!)怎么突然冒出来这么一个东西。

思路一:先排查一下/data/mysql路径下的权限和属主。发现是mysql并没有错。而且确实/data底下是没有mysqldata目录的。{一般情况下这种错误提示,应该是目标目录,没有相应的权限而已。}

思路二:既然提示没有此文件,我手动创建一个/data/mysqldata/binlog然后包权限设置好。再重新初始化,居然可以了。嗯,然后我就瞬间有点明白了。是不是加载到哪个my.cnf配置文件了。然后就locate一下,发现在/etc/下有一个被修改的my.cnf文件。查看下里面的内容,确实是配置了#log-bin =/data/mysqldata/binlog/binlog#。然后果断的把这配置文件mv一下。然后重新按照原来的安装步骤重新初始化,顺顺利利。


小结:

此问题应该还是细心就能够排查得出来的。此服务器多人动过所以有一些残留的东西。错误提示很重要。个人觉得排错,就是应该按照理论的正常顺序走一边,表现应该是什么样的。然后再跟实际情况去做对比,是否实际符合理论。如果不符合了,那是理论上进行到哪个环节上出错了。就重点排查这个环节和过程。