linux装mysql时,启动mysql服务时报错

时间:2022-07-03 09:28:31
系统是: CentOS 6.5 64位
用的阿里云的ECS

输入:
service mysql start

报错:
/etc/init.d/mysql: line 256: my_print_defaults: command not found
Starting MySQLCouldn't find MySQL server (/usr/local/mysql/[FAILED]ld_safe)

我确定/usr/local/mysql/这个文件夹有文件:

linux装mysql时,启动mysql服务时报错

另外是
/etc/my.cnf
这个文件,内容为:

[mysqld]
basedir                 = /usr/local/mysql
datadir =/usr/local/mysql/data
port=3306
socket          = /tmp/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#[mysqld_safe]
#log-error=/usr/local/mysql/log/mysqld.log
#pid-file=/usr/local/mysql/run/mysqld/mysqld.pid

[mysql.server]
user=mysql
basedir=/usr/local/mysql

[client]
socket          = /tmp/mysql.sock


另,输入:
cd /etc/mysql
提示
No such file or directory


我的安装顺序大概如下:
我下载的是mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz
因此首先要解压缩:
①进入到该文件在linux的目录;

②输入以下命令解压缩:
tar -xvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz

③解压缩完成后,复制mysql目录,输入:
cp mysql-5.7.13-linux-glibc2.5-x86_64 /usr/local/mysql -r
这行命令是将mysql目录复制到系统的本地软件目录,

④添加系统mysql组和mysql用户:
linux装mysql时,启动mysql服务时报错

⑤安装数据库:
首先进入local下的mysql目录
cd /usr/local/mysql

修改当前目录拥有者为mysql用户:
chown -R mysql:mysql ./

创建data目录:
mkdir data

修改文件:
vi /etc/my.cnf
按i进入修改模式,修改为以下(应该是这样吧?求指正,主要是红色部分)

[mysqld]
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data

socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid


进入mysql安装目录:
cd /usr/local/mysql 

————————这个时候遇见问题了————————

=====================分割线开始============================
注:以下代码可能出现问题,建议先看到分割线结束,使用分割线结束后的流程。

执行(这是一整行,建议复制粘贴)初始化数据:
bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --secure-file-priv=/root/ --initialize

注意: 在初始化时如果加上 --initial-insecure,则会创建空密码的 root@localhost 账号 --secure-file-priv 指定密码文件夹位置 对应文件夹下就会有 .mysql_secret 文件(5.6以前) 之后的会在log中提示 A temporary password is generated for root@localhost: (U?0T,6,qQ2: (U?0T,6,qQ2: 这个就是第一次用来登陆mysql的密码一定要记住 

添加开机启动
cp support-files/mysql.server /etc/init.d/mysql

启动mysql服务
service mysql start

发现启动失败:
查看执行那一步的报错(第一行),提示
[Warning] TIMESTAMP with implicit DEFAULT value is                                                  deprecated. Please use --explicit_defaults_for_timestamp server option (see doc                                                 umentation for more details).

输入:
vi /etc/my.conf

找到“[mysqld]”设置项,添加代码:
#开启查询缓存
explicit_defaults_for_timestamp=true

然后继续输入上面【执行】那一行,发现报错:
Insecure configuration for --secure-file-priv: Current value does not restrict location of generated files. Consider setting it to a valid, non-empty path.

搜索解决方案,发现原因是
官方文档说了mysqld --initialize-insecure自动生成无密码的root用户,mysqld --initialize自动生成带随机密码的root用户。data文件夹不为空是不能执行这个命令的。可以先删除data目录下的所有文件或者移走。

(注:此时发现在上面那一长串命令时,--secure-file-priv前两个“-”和后面之间多个空格,可能是因为多一个空格的原因,不确定是哪个的问题导致这个报错,故全列出来做参考。另,源代码中多出的空格我已经修改掉了)

删除mysql下的data文件夹(记住,是文件夹,包含里面所有文件),这次改输入
bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --secure-file-priv=/root/ --initialize-insecure


这种方式是创建空密码的 root@localhost 

输入时提示:
[Warning] InnoDB: New log files created, LSN=45790
2016-07-23T16:20:43.189767Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2016-07-23T16:20:43.283044Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 675c6f7c-50f1-11e6-aaa1-00163e006ada.
2016-07-23T16:20:43.287196Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2016-07-23T16:20:43.288147Z 1 [Warning] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

=====================分割线结束============================

后来我输入
bin/mysqld --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ --secure-file-priv=/root/ --initialize-insecure
(之前的找不到了,再次输入时这么提示)
2016-07-23T20:17:55.974769Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2016-07-23T20:17:55.976932Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2016-07-23T20:17:55.976959Z 0 [ERROR] Aborting

大概就是这样,如果信息不足,我会继续提供的。

3 个解决方案

#1


求助~卡在这里好纠结

#2



会不会是 数据目录没有权限,或者是权限不够呢

#3


引用 2 楼 yupeigu 的回复:
会不会是 数据目录没有权限,或者是权限不够呢


感觉并不是,我也没搞懂是什么问题,后来找人帮忙装好了

#1


求助~卡在这里好纠结

#2



会不会是 数据目录没有权限,或者是权限不够呢

#3


引用 2 楼 yupeigu 的回复:
会不会是 数据目录没有权限,或者是权限不够呢


感觉并不是,我也没搞懂是什么问题,后来找人帮忙装好了