下载的是MySQL 5.0.45的Linux通用二进制包,文件名是mysql-5.0.45-linux-i686.tar.gz。安装过程本该按官方文档走一遍就完事,结果还是踩了几个坑。把过程记下来,供遇到同样问题的朋友参考。
首先,切换到root权限,解压包并移动到目标目录:
# tar -zvxf mysql-5.0.45-linux-i686.tar.gz
# mv mysql-5.0.45/ /usr/local/mysql
# cd /usr/local/mysql
然后创建mysql用户和组,设置目录权限,初始化数据目录:
# groupadd mysql
# useradd -g mysql mysql
# chown -R mysql .
# chgrp -R mysql .
# scripts/mysql_install_db --user=mysql
# chown -R root .
# chown -R mysql data
按官方文档的说法,到这里就可以启动服务了:bin/mysqld_safe --user=mysql &。然而,现实很骨感——一启动就报错:
nohup: ignoring input and redirecting stderr to stdout
Starting mysqld daemon with databases from /var/lib/mysql
STOPPING server from pid file /var/run/mysqld/mysqld.pid
071112 00:22:06 mysqld ended
查看日志:less /var/log/mysqld.log,发现了关键信息:
071112 0:22:06 [ERROR] /usr/local/mysql/bin/mysqld: Can't create/write to file '/var/run/mysqld/mysqld.pid' (Errcode: 2)
071112 0:22:06 [ERROR] Can't start server: can't create PID file: No such file or directory
错误码2表示文件或目录不存在。检查一下/var/run/下是否有mysqld目录:
# cd /var/run/
# ls
果然,mysqld目录不存在。手动创建它,并创建一个空的PID文件,再把所有权交给mysql用户:
# mkdir /var/run/mysqld
# cd /var/run/mysqld
# touch mysqld.pid
# cd ..
# chown -R mysql mysqld .
再次尝试启动:
# cd /usr/local/mysql/
# bin/mysqld_safe --user=mysql &
这次没有报错,服务正常启动了。
接下来想给root用户设置密码,运行:bin/mysqladmin -u-root password root,结果又出幺蛾子:
bin/mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/tmp/mysql.sock' exists!
连不上?检查一下socket文件在哪里。默认情况下,MySQL的socket生成在/var/lib/mysql/mysql.sock,但客户端默认去/tmp/mysql.sock找。查看/var/lib/mysql/目录:
# cd /var/lib/mysql/
# ls
ibdata1 ib_logfile0 ib_logfile1 mysql/ mysql.sock test/
果然socket在/var/lib/mysql/mysql.sock。创建一个符号链接,让/tmp/mysql.sock指向它:
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
然后再次尝试登录:
# bin/mysql -u-root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.0.45 MySQL Community Server (GPL)
...
mysql>
成功了。最后修改root密码:
# cd /usr/local/mysql/
# bin/mysqladmin -u-root -p password yourpassword
一切OK。
总结一下这次安装中遇到的两个坑:一是/var/run/mysqld目录缺失导致PID文件无法创建;二是socket路径不一致导致客户端连不上。前者手动建目录+文件即可,后者做个符号链接就解决了。希望对你有帮助。
