MySql安装过程遇到的问题
服务器在安装mysql时遇到了莫名其妙的问题,及记录其解决办法。
一.基础安装
- 首先从mysql官网中把mysql的rpm包下载下来(没有安装wget的同学先百度一下安装wget):
wget https://dev.mysql.com/get/mysql80-community-release-el7-4.noarch.rpm
具体什么版本需要到mysql的官网去查看,有可能我目前下载的这个版本已经下架了,导致输入wget命令时会报连接不上的错误,注意,我的服务器是CentOs7,所以安装的是Linux7
https://dev.mysql.com/downloads/repo/yum/
- 使用yum安装rpm包:
yum -y install mysql80-community-release-el7-4.noarch.rpm
- 安装MYSQL服务
yum -y install mysql-community-server
- 启动MySQL
systemctl start mysqld.service
我的服务器在执行这个命令的时候了下面这个错:
Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.
下面看造成原因与解决方案
二.解决方案
- 首先我们看看报错原因
-
输入命令: systemctl status mysqld.service
日志信息:
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: mysqld.service: control process exited, code=exited status=217
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: Failed to start MySQL Server.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: Unit mysqld.service entered failed state.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: mysqld.service failed.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: mysqld.service holdoff time over, scheduling restart.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: Stopped MySQL Server.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: start request repeated too quickly for mysqld.service
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: Failed to start MySQL Server.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: Unit mysqld.service entered failed state.
Dec 12 14:36:23 iZ2zeicmjky4arc7iaohurZ systemd[1]: mysqld.service failed.
这日志提示可以说一点用都木有了 -
输入另外一个命令: journalctl -xe
日志信息:
–
– Unit mysqld.service has begun starting up.
Dec 12 14:56:21 iZ2zeicmjky4arc7iaohurZ systemd[14127]: Failed at step USER spawning /usr/bin/mysqld_pre_systemd: No such process
– Subject: Process /usr/bin/mysqld_pre_systemd could not be executed
– Defined-By: systemd
– Support: http://lists.freedesktop.org/mailman/listinfo/systemd-devel
–
– The process /usr/bin/mysqld_pre_systemd could not be executed and failed.
–
– The error number returned by this process is 3.
这里有一个很关键的信息:
Process /usr/bin/mysqld_pre_systemd could not be executed
没有权限去执行mysqld_pre_systemd这个东西 -
查资料,没有找到mysqld_pre_systemd这个东西是干嘛的,但从名字带了个pre,猜测是mysqld做什么初始化的时候,没有权限。
接着我去查看mysql的日志(一般没动过mysql配置文件的话,日志文件位置是/var/log/mysqld.log,如果修改过的话,则去/etc/my.cnf查看。),发现一个很奇怪的事情,我的目录下竟然没有mysql的日志文件。再结合上面那个报错去看,我推测是操作mysql的默认用户出现问题(在linux下,每个工具或中间件都会有一个默认操作的用户,一般安装时,都会给你新增一个用户,然后就会用这个默认用户操作对应工具或中间件) -
查资料发现mysql默认的操作用户和用户组的名称都叫mysql,然后在linux中看看是否有该用户和用户组
cat group|grep mysql
cat passwd|grep mysql
发现用户组和用户都没有,既然如此。我们就手动给他新建一个 -
输入命令,增加mysql用户组和用户:
groupadd mysql
useradd mysql -g mysql -M -s /sbin/nologin
输入命令可能会报下面的错误,意思就是无法对group和useradd文件进行编辑:
groupadd: cannot open /etc/group
useradd: cannot open /etc/passwd -
输入命令,查看group的隐藏权限
lsattr /etc/group
显示:-----a-------e-- /etc/group
按道理这里是没啥问题的,a是不可删除,可添加内容的意思
这里只能试下把a删掉:chattr -a /etc/group
然后这样子竟然就能新建了,passwd和shadow同样执行者样的操作 -
重新再试下启动mysql: **systemctl start mysqld.service **
虽然同样报错,但是,这次启动速度慢了很多,而且报错也不一样。去到mysql的日志目录(/var/log/mysqld.log),发现这次mysql的日志文件生成了.进入日志文件查看报错原因:
A message intended for a client cannot be sent there as no client-session is attached. Therefore, we’re sending the information to the error-log instead: MY-000001 - Can’t create/write to file ‘/var/run/mysqld/mysqld.pid’ (OS errno 13 - Permission denied)
MySQL服务在启动的时候,不能创建pid文件,一般这个不能创建pid很大概率就是操作的用户没有权限去执行某个文件。也就是mysql用户没有权限去执行/var/run/mysqld/mysqld.pid,那么我们把这个文件的属主分配给mysql
chown mysql.mysql /var/run/mysqld/ -
这时候,再次启动mysql: systemctl start mysqld.service,终于成功了。
三.mysql改密码等操作
这里推荐去看一位博主的博文,人家记录的很详细,我就不cv过来了
https://www.cnblogs.com/ivictor/p/5146247.html