关于我对mysql的启动认识
1、初始状态
a. /usr/local下有
mysql-standard-4.0.12-pc-linux-i686.tar.gz 安装包
b. /tmp 下没有mysql.sock
c. 机器名为xing (当然每个人不一样)
2、预期目的
a. 安装mysql到 /usr/local/mysql-standard-4.0.12-pc-linux-i686
b. 加上链接/usr/local/mysql
d. 实现mysql开机自动开启服务(进程多了个mysqld)
e. 删除mysql的root和空用户,建立自己的安全帐号
3、步骤(命令是没有一步一步的,请注意每步当前目录)
a.[root@xing local]# cd /usr/local/
b.[root@xing local]# gunzip < mysql-standard-4.0.12-pc-linux-i686.tar.gz | tar -xvf-
(多了/usr/local/mysql-standard-4.0.12-pc-linux-i686 一目录)
c.[root@xing local]# rm -f mysql-standard-4.0.12-pc-linux-i686.tar.gz
删除解压包(我的硬盘空间有限,呵呵!)
d.[root@xing local]# ln -s mysql-standard-4.0.12-pc-linux-i686 mysql
做个链接
e.[root@xing local]# cd mysql
进入到/usr/local/mysql
f.[root@xing local]# groupadd mysql
创建mysql组
h.[root@xing local]# useradd -g mysql mysql
创建mysql用户,并放到mysql组里
本人觉得bin/safe_mysqld -u mysql& 要启动正常要保证两点
(1)、保证safe_mysqld -u mysql& 所用到的mysql这个用户在linux存在.
(2)、因为我们以mysql(linux用户)身份启动mysqld,
所以要保证/usr/local/mysql有权限(把这个目录所有者改为mysql)
若成功启动就会生成/tmp/mysql.sock
i.[root@xing local]# chown -R mysql .
j.[root@xing local]# chgrp -R mysql .
可以通过ls -l 查看/usr/local/mysql 下的文件所有者和组均为mysql
在这之前/usr/local/mysql/data/mysql 下为空
也是系统表并未建立。
k.[root@xing local]# scripts/mysql_install_db
注意一定要在/usr/local/mysql 下运行scripts/mysql_install_db
不能在/usr/local/mysql/scripts 下运行 ./mysql_install_db
可以查看得,此时/usr/local/mysql/data/mysql已经有了系统表了,
但/tmp/mysql.sock还没有建立,因为mysqld还没有启动
l.[root@xing local]# bin/safe_mysqld -u mysql&
结果是Starting mysqld daemon with databases from /usr/local/mysql/data
mysqld ended
用bin/safe_mysqld -u root& 也失败,何解呢?
查看日志得Warning: Ignoring user change to 'mysql' because
the user was set to 'mysql' earlier on the command line
Fatal error: Can't open privilege tables:
Can't find file: './mysql/host.frm' (errno: 13)
因为建立通过scripts/mysql_install_db新建立的系统表,并没有
修改它是所有者,所以根本没法读,但有时不通过用户运行bin/safe_mysqld &
就能运行,是因为不用安全用户启动,当然不存在目录权限问题。
m.[root@xing local]# chown -R mysql data
重新这样弄下/usr/local/mysql/data 所有者,-R 表示连同子目录
n.[root@xing local]# bin/safe_mysqld -u mysql&
现在启动正常
另一个方法是把k.[root@xing local]# scripts/mysql_install_db提前到
i.[root@xing local]# chown -R mysql .
也就是先建立系统表(不存在目录权限),
才再修改目录的所有者,让mysqld启动时能读到/usr/local/mysql/data/mysql这个目录
-------------------------------------------------------------------------------------
完整命令
cd /usr/local/
gunzip < mysql-standard-4.0.12-pc-linux-i686.tar.gz | tar -xvf-
ln -s mysql-standard-4.0.12-pc-linux-i686 mysql
cd mysql
groupadd mysql
useradd -g mysql mysql
scripts/mysql_install_db
chown -R mysql .
chown -R mysql data //这句可以不要了
chgrp -R mysql .
bin/safe_mysqld -u mysql&
cd bin
./mysql
成功进入
-----------------------------------------
以后重启后
cd /usr/local/mysql/
bin/safe_mysqld -u mysql& 启动mysqld(但是必须为root、mysql、或mysql同组的人能启动)
cd bin
./mysql 启动mysql
或者把
cd /usr/local/mysql
bin/safe_mysqld -u mysql&
启动语句放到/etc/rc.d/rc.local最后
这样以后就能直接运行mysql了
------------------------
问题分析:
1、网友问到连接mysql时,提示Can't connect to local Mysql server through socket '/var/lib/mysql/mysql.sock' 原
因是mysqld进程并没有启动成功,可以ls /tmp 找不到mysql.sock 证明mysqld没有启动。
2、bin/safe_mysqld --user=mysql& 启动时,马上停掉,往往是上面所说的权限问题,系统没法读到由
scripts/mysql_install_db建立的系统表,或根本没有执行 来建立系统表,对于前者运行chown -R mysql data,后来就
scripts/mysql_install_db,chown -R mysql data。记住若运行了scripts/mysql_install_db,目录的所有者需要重新改过
来。所以建议在安装mysql时是先运行scripts/mysql_install_db,再运行chown -R mysql data
以上是本人愚见,大家多多指出我的错误!