linux下安装MySQL5.7及遇到的问题总结
linux下安装MySql5.7.24
一. 准备工作
1.1 检查是否安装过mysql
rpm -qa | grep mysql
我这台机器没有安装过mysql,所以上述命令输出为空,
否则要执行如下命令删除mysql:
rpm -e --nodeps * #(*为上一个命令输出结果)
1.2 查询并删除所有mysql对应的文件夹
查找所有mysql对应的文件夹
whereis mysql
find / -name mysql # 这里要切换到root账户,否则可能会出现目录没有权限的问题
删除上述的全部文件夹:
rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql /usr/share/mysql /usr/lib64/mysql /usr/share/mysql # 注意 : 对rm -rf命令的使用一定要谨慎!! 建议先在文本编辑器上编辑好,执行时一定要再三确认! 尤其是在生产环境!
确认下mysql相关目录是否清除干净:
find / -name mysql whereis mysql
1.3.检查mysql用户组和用户是否存在,没有要创建
cat /etc/group | grep mysql cat /etc/passwd |grep mysql groupadd mysql useradd -r -g mysql mysql
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz # 首先尝试使用wget命令直接下载...
执行如下图 : (速度高达每秒10K, 12小时就可以下载完…)
1.4.下载linux对应的mysql安装包
到这里,我只能说,对不起,打扰了!
接着尝试着去官网下载
mysql官网下载链接, 选择社区版
点击looking for previous GA versions ,下载较早版本
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
此处省略。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
。。。。。。。。。。。。。。。。。。。。
1.5.文件上传
我这里将tar.gz文件上传到了
/opt/module
文件夹下,这里可根据自己的需要和规划自定义设置
在这里插入图片描述
注意 : 如果是使用wget命令,默认文件会下载到执行wget命令的目录下 这个时候,需要在合适的目录执行wget命令 或者使用mv操作,将tar.gz文件移动到合适的位置
二. 正式安装MySQL
2.1. 解压mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz文件
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
解压之后结果如下:
# 将mysql-5.7.24-linux-glibc2.12-x86_64文件夹重明名为mysql mv /opt/module/mysql-5.7.24-linux-glibc2.12-x86_64 /opt/module/mysql
2.2 在mysql解压目录下新建data目录
mkdir /opt/module/mysql/data
2.3. 更改mysql目录下所有的目录文件及文件夹所属的用户和组,更改文件夹权限
chown -R mysql:mysql /opt/module/mysql chmod -R 755 /opt/module/mysql
2.4. 编译安装mysql
cd /opt/module/mysql/bin ./mysqld --initialize --user=mysql --datadir=/opt/module/mysql/data --basedir=/opt/module/mysql
运行结果如下图:
请务必记住初始化输出日志末尾的内容(数据库管理员临时密码)!!!我把自己输出日志的文字内容全部截取出来!
2020-04-16T11:25:57.726087Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp serveroption (see documentation for more details). 2020-04-16T11:25:57.726242Z 0 [Warning] 'NO_ZERO_DATE', 'NO_ZERO_IN_DATE' and 'ERROR_FOR_DIVISION_BY_ZERO' sql modes should be used with strict mode. They will be merged with strict mode in a future release. 2020-04-16T11:25:57.726257Z 0 [Warning] 'NO_AUTO_CREATE_USER' sql mode was not set. 2020-04-16T11:25:57.735098Z 0 [Warning] ./mysqld: ignoring option '--innodb-file-per-table' due to invalid value '64' 2020-04-16T11:25:58.482391Z 0 [Warning] InnoDB: New log files created, LSN=45790 2020-04-16T11:25:58.639002Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2020-04-16T11:25:58.740607Z 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: 0b96a796-7fd5-11ea-b583-000c29df67f8. 2020-04-16T11:25:58.744135Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2020-04-16T11:25:58.745668Z 1 [Note] A temporary password is generated for root@localhost: fsi%Sg&U<5VY
这里**root@localhost:**后的字符串,我这里是:
fsi%Sg&U<5VY
为mysql管理员临时登录密码
2.5. 编辑配置文件my.cnf
[root@linux01 bin]# vi /etc/my.cnf
修改配置项:
datadir log-error pid-file
添加配置项:
sql_mode max_connections innodb_file_per_table lower_case_table_names basedir [client] port socket
修改后配置如下:
[mysqld] datadir=/opt/module/mysql/data #socket=3306 socket=/var/lib/mysql/mysql.sock basedir=/opt/module/mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES max_connections=400 innodb_file_per_table=64 lower_case_table_names=1 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/opt/module/mysql/log/mariadb/mariadb.log pid-file=/opt/module/mysql/run/mariadb/mariadb.pid [client] port=3306 socket=/var/lib/mysql/mysql.sock
2.6. 创建log-error,pid-file,socket对应目录并赋予权限
mkdir -vp /opt/module/mysql/log/mariadb #递归创建目录 chown -R mysql:mysql /opt/module/mysql/log chown -R mysql:mysql /opt/module/mysql/log/mariadb chmod -R 755 /opt/module/mysql/log/mariadb touch /opt/module/mysql/log/mariadb/mariadb.log
mkdir -vp /opt/module/mysql/run/mariadb #递归创建目录 chown -R mysql:mysql /opt/module/mysql/run chown -R mysql:mysql /opt/module/mysql/run/mariadb chmod -R 755 /opt/module/mysql/run
mkdir -vp /var/lib/mysql chown -R mysql:mysql /var/lib/mysql
2.7. 启动mysql服务器:
/opt/module/mysql/support-files/mysql.server start
出现以下输出证明服务启动成功!
2.8. 添加软连接,并重启mysql服务:
ln -s /opt/module/mysql/support-files/mysql.server /etc/init.d/mysql ln -s /opt/module/mysql/bin/mysql /usr/bin/mysql ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock service mysql restart
2.9 登录mysql,修改密码(密码为步骤2.4生成的临时密码)
mysql -u root -p
set password for root@localhost = password('yourpassword');
2.10 开放远程连接
mysql> use mysql; mysql> update user set user.Host='%' where user.User='root'; mysql> flush privileges;
2.11 设置开机自动启动
cp /opt/module/mysql/support-files/mysql.server /etc/init.d/mysqld #将服务文件拷贝到init.d下,并重命名为mysqld chmod +x /etc/init.d/mysqld #赋予可执行权限 chkconfig --add mysqld #添加服务 chkconfig --list # 显示服务器列表
至此,mysql彻底安装成功
三. 安装中遇到的问题
3.1. 启动mysql时报错:
报错1:
[root@linux01 mysql-5.7.24-linux-glibc2.12-x86_64]# /opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server start /opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server:行239: my_print_defaults: 未找到命令 /opt/module/mysql/mysql-5.7.24-linux-glibc2.12-x86_64/support-files/mysql.server: 第 259 行:cd: /usr/local/mysql: 没有那个文件或目录
原因 :编辑配置文件my.cnf时,没有配置basedir属性
解决办法:
[root@linux01 bin]# vi /etc/my.cnf basedir=/opt/module/mysql/ # 这里根据个人实际情况配置
报错2:
Starting MySQL.2020-04-16T08:30:15.375180Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Createwritable for user 'mysql'.
报错原因:log-error文件夹没有创建或者log-error文件夹mysql用户缺乏相关权限
解决办法:
mkdir /var/log/mariadb chown -R mysql:mysql /var/log/mariadb chmod -R 755 /var/log/mariadb
报错3:
[root@linux01 mysql-5.7.24-linux-glibc2.12-x86_64]# /opt/module/mysql/support-files/mysql.server start Starting MySQL.. ERROR! The server quit without updating PID file (/opt/module/mysql/data/linux01.pid).
a. 首先怀疑mysql进程是否已经启动
ps -ef|grep mysqld
这里并没有查看到mysql相关进程,证明不是该原因导致
b.怀疑是selinux惹的祸,如果是centos系统,默认会开启selinux
vi /etc/selinux/config # 将SELINUX=enforcing改为SELINUX=disabled,重启服务器
问题仍然没有解决
后面又试了N多种方案, 都没有能够解决问题,失败的方法就不一一列举…
c.根据过往的经验,一般linux出现让人束手无策的问题,都是权限的锅
于是,开始着手相关目录的权限排查, 不排查不知道,一排查吓一跳!!
录,run目录的权限居然是root!!罪魁祸首找到了!
原因: 最初执行的赋权命令为:
chown -R mysql:mysql /opt/module/mysql/run/mariadb chown -R mysql:mysql /opt/module/mysql/log/mariadb
是以root用户的身份执行的,它们的父目录仍然为root权限,也因此导致了mysql启动失败
解决方案 :
chown -R mysql:mysql /opt/module/mysql/log chown -R mysql:mysql /opt/module/mysql/run
之后重启mysql,启动成功!!
linux使用一定要注意权限问题!!!
linux使用一定要注意权限问题!!!
linux使用一定要注意权限问题!!!
3.2 mysql通过账户名密码登陆报错:
[root@linux01 lib]# mysql -u root -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
这次学聪明,首先考虑是否是权限问题:
chown -R mysql:mysql /var/lib/mysql
赋权后,该问题依然存在.
解决方案,添加client配置项
vi /etc/my.cnf #添加如下内容 [client] port=3306 socket=/var/lib/mysql/mysql.sock
和最初的my.cof文件对比下感受下区别
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld_safe] log-error=/var/log/mariadb/mariadb.log pid-file=/var/run/mariadb/mariadb.pid # # include all files from the config directory # !includedir /etc/my.cnf.d
添加完之后,再次执行,问题得到解决!