关于我对mysql的启动认识

关于我对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


以上是本人愚见,大家多多指出我的错误!      
mysql -u root
mysql>grant all privileges on *.* to xing@localhost identified by '123456' with grant option;
mysql>grant all privileges on *.* to xing@"%" identified by '123456' with grant option;
mysql>use mysql
mysql>delete from user where user='root' or user='';
mysql>flush privileges;
mysql>exit

以后启动mysql
只能是
mysql -u xing -p123456  (注意p后面没有空格)      
谢谢。以前我装mysql老是不成功,干脆就转向了PostgreSQL。      
把mysql目录下的my-medium.cnf拷到/etc下,并改名为my.cnf
即/etc/my.cnf
然后vi /etc/my.cnf
在[mysqld]下添加一行
default-character-set=gb2312

重启一下mysql ,问题就解决了