CentOS7 安装 MySQL8.* 详细教程

  由于工作需要最近使用VMware® Workstation 15 Pro 创建了一个centos7虚拟机,可是这是一个空白的系统,需要安装一些所需软件等等;
  我首先安装的就是mysql。我在网上查阅了一些资料,发现好多文章讲的都是千篇一律。有可能能按照他们的教程能安装成功,可是我按照那些教程安装失败了,期间还重新创建了一次虚拟机,结果还是不行。经过自己的摸索,最终安装成功了,特此记录一下自己的安装过程,希望对一些人有所帮助。

一、准备工作

  工欲善其事必先利其器。首先把自己所需要的软件先准备好。以下是我所准备的软件和版本号。提前说明,我不提供任何破解软件,需要你们自己找,
或者在官网下载软件。

虚拟机 VMware® Workstation 15 Pro

1.jpg

CentOS系统 CentOS Linux release 7.8.2003

2.jpg
3.jpg

MySQL8 mysql80-community-release-el7-3.noarch.rpm

(这一步不需要下载,我只是让你确定要选择的版本文件名,下面使用wget命令时需要)

4.jpg

到此所有软件准备完成。

二、安装软件

  虚拟机 VM 的安装,以及CentOS系统的安装我在这就不介绍了,网上教程很多,一般都能创建成功。如果以后有时间,看看再写一篇CentOS7的虚拟机创建步骤吧。

以下是安装MySQL8的步骤:

安装前准备

  1. 在安装MySQL之前我们先要把CentOS自带的mariadb,如果不卸载的话,在下面的安装中会报错。

    • 查看mariadb版本
       rpm -qa | grep mariadb
    
    • 卸载mariadb
       rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
    
  2. 检测系统是否自带安装 MySQL:

       rpm -qa | grep mysql
    

    如果你系统有安装,那可以选择进行卸载:

       rpm -e mysql  // 普通删除模式
       rpm -e --nodeps mysql  // 强力删除模式,如果使用上面命令删除时,提示有依赖的其它文件,则用该命令可以对其进行强力删除
    

安装MySQL

wget http://repo.mysql.com/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpm --force --nodeps 
yum update
yum install mysql-server (过程很漫长)

权限设置:

   chown mysql:mysql -R /var/lib/mysql

初始化 MySQL:

   mysqld --initialize

启动 MySQL:(如果启动失败请往下直接查看 三、问题解决)

   systemctl start mysqld

查看 MySQL 运行状态:

   systemctl status mysqld

如果以上没有任何问题,到此MySQL就安装完成了,之后就是MySQL的各种配置设置了。

三、问题解决

  当我启动MySQL服务时出现一下问题.

[root@localhost ~]# systemctl start mysqld
Job for mysqld.service failed because the control process exited with error code. See "systemctl status mysqld.service" and "journalctl -xe" for details.

查看MySQL服务状态显示

[root@localhost ~]# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Mon 2020-06-01 08:34:27 CST; 26s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 57404 ExecStart=/usr/sbin/mysqld $MYSQLD_OPTS (code=exited, status=1/FAILURE)
  Process: 57380 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 57404 (code=exited, status=1/FAILURE)
   Status: "Server startup in progress"
    Error: 2 (No such file or directory)

Jun 01 08:34:26 localhost.localdomain systemd[1]: Starting MySQL Server...
Jun 01 08:34:27 localhost.localdomain systemd[1]: mysqld.service: main process exited, code=exited, status=1/FAILURE
Jun 01 08:34:27 localhost.localdomain systemd[1]: Failed to start MySQL Server.
Jun 01 08:34:27 localhost.localdomain systemd[1]: Unit mysqld.service entered failed state.
Jun 01 08:34:27 localhost.localdomain systemd[1]: mysqld.service failed.

查看mysql.log文件显示

vim /var/log/mysqld.log 

2020-06-01T00:33:44.898189Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.20) initializing of server in progress as process 57329
2020-06-01T00:33:45.027806Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-06-01T00:33:48.582275Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-06-01T00:33:53.256312Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: asdguasgdu621&&
2020-06-01T00:34:27.214904Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.20) starting as process 57404
2020-06-01T00:34:27.250117Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-06-01T00:34:27.250535Z 1 [ERROR] [MY-012271] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2020-06-01T00:34:27.250624Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable
2020-06-01T00:34:27.250714Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2020-06-01T00:34:27.251133Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.

经过以上查看发现有两处错误:

  1. Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
  2. 2020-06-01T00:34:27.250624Z 1 [ERROR] [MY-012278] [InnoDB] The innodb_system data file 'ibdata1' must be writable

解决问题:

百度错误代码:

The innodb_system data file ‘ibdata1’ must be writable

字面意思:’ibdata1必须可写
那么解决方案自然是更改对应权限

通过yum安装的话,
5.7版本以前是

   chmod -R 777 /usr/local/mysql/data/ 

5.7版本以后是

   chmod -R 777 /var/lib/mysql

如果不是通过yum安装的话:

  find / -name ibdata1 

找到对应目录更改权限

之后重启MySQL服务


5.jpg

发现已经成功。

错误代码:

Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)

查看是否这个目标路径已经存在/var/lib/mysql /,如果存在,删除/var/lib/mysql /后重启 MySQL 服务就可以了!

说明

MySQL 日志文件路径

/var/log/mysqld.log

MySQL 配置文件路径

   my.cnf是mysql启动时加载的配置文件,一般会放在mysql的安装目录中,用户也可以放在其他目录加载。总的来说,my.cnf类似与window中my.ini。

使用locate my.cnf命令可以列出所有的my.cnf文件

[root@localhost ~]# locate my.cnf
/etc/my.cnf
/etc/my.cnf.d

查看 MySQL 默认读取my.cnf的目录
如果没有设置使用指定目录的 my.cnf,MySQL 启动时会读取安装目录根目录及默认目录下的my.cnf文件。

查看 MySQL 启动时读取配置文件的默认目录

[root@localhost ~]# mysql --help|grep 'my.cnf'
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

MySQL默认会搜寻my.cnf的目录,顺序排前的优先。

启动时没有使用配置文件
  如果没有设置使用指定目录 my.cnf 文件及默认读取目录没有 my.cnf 文件,表示 MySQL 启动时并没有加载配置文件,而是使用默认配置。

  需要修改配置,可以在mysql默认读取的目录中,创建一个my.cnf文件(例如:/etc/my.cnf),把需要修改的配置内容写入,重启 MySQL 后即可生效

所需命令

service mysqld start # 启动服务
service mysqld stop # 停止服务
service mysqld restart  # 重启服务
service mysqld status # 查看状态

四、MySQL配置设置

登陆修改密码

  • 通过 cat /var/log/mysqld.log | grep password 命令查看数据库的初始随机密码。

    6.jpg

  • 通过 mysql -u root -p 敲回车键进入数据库登陆界面,密码为初始随机密码。直接复制粘贴就可以登陆进去了。


    7.jpg
  • 通过 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; 命令来修改密码


    8.jpg
  • 通过 exit; 命令退出 MySQL,然后通过新密码再次登陆


    9.jpg
  • 通过以下命令,进行远程访问的授权

    create user 'root'@'%' identified with mysql_native_password by 'root';
    
    grant all privileges on *.* to 'root'@'%' with grant option;
    
    flush privileges;
    
10.jpg
  • 通过 ALTER USER 'root'@'localhost' IDENTIFIED BY 'root' PASSWORD EXPIRE NEVER; 命令修改加密规则,MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。
  • 通过 flush privileges; 命令刷新修该后的权限


    11.jpg

开通端口设置防火墙

  • 通过以下命令,关闭 firewall
systemctl stop firewalld.service;

systemctl disable firewalld.service;

systemctl mask firewalld.service;

systemctl stop firewalld

systemctl mask firewalld

12.jpg
  • 通过 yum -y install iptables-services 命令安装 iptables 防火墙


    13.jpg
  • 通过以下命令启动设置防火墙

systemctl enable iptables;

systemctl start iptables;
14.jpg
  • 通过 vim /etc/sysconfig/iptables 命令编辑防火墙,添加端口,并在相关位置,写入以下内容
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
     -A INPUT -m state --state NEW -m tcp -p tcp --dport 8090 -j ACCEPT
    
15.jpg
  • 通过 systemctl restart iptables.service 命令重启防火墙使配置生效
  • 通过 systemctl enable iptables.service 命令设置防火墙开机启动
16.jpg
  • 使用Navicat 进行远程链接测试
18.jpg
17.jpg

五、结束语

  以上就是我在新建的CentOS7虚拟机系统上安装 MySQL 的全部过程,希望能对你有所帮助。

你可能感兴趣的:(CentOS7 安装 MySQL8.* 详细教程)