本文将详细记述在CentOS7.6上安装MySql8.0的详细过程。本文是本人总结各种教程自己摸索出的安装过程,正所谓站在巨人的肩膀上。Linux系统有多重安装软件的方法,我这里只介绍YUM安装。我认为软件就是拿来用的,安装上就好,至于如何安装,就没必要搞那么复杂了,怎么方便怎么来吧–包管理器走起。

检查Linux系统是否已经安装MariaDB

CentOS系统中默认安装的数据库是MariaDB,所以先检查MariaDB:

1
[root@VM-16-16-centos ~]#rpm -qa|grep mariadb

如果不存在(上面检查结果返回空)则跳过步骤,如果存在则删除:

1
[root@VM-16-16-centos ~]#rpm -e --nodeps 所有在上一步得到的结果

检查Linux系统是否已经安装MySql

1
[root@VM-16-16-centos ~]#rpm -qa|grep mysql

如果已经安装,则卸载,未安装跳过。删除:

1
[root@VM-16-16-centos ~]#rpm -e --nodeps 所有在上一步得到的结果

安装MySql

下载mysql的repo源并安装

Yum源中默认的数据库安装包是MariaDB,也就是说在CentOS 7及以上的系统中使用yum安装MySQL默认安装的会是MariaDB。如果要安装官方MySql,则需要到官网下载下载mysql的repo源。

1
2
[root@VM-16-16-centos ~]#wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
[root@VM-16-16-centos ~]#rpm -Uvh mysql-community-release-el7-5.noarch.rpm
检查是否安装成功

执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repomysql-community-source.repo并且通过yum repolist可以看到mysql相关资源

1
2
3
4
repo id                                                         repo name                         
!mysql-connectors-community/x86_64                              MySQL Connectors Community        
!mysql-tools-community/x86_64                                   MySQL Tools Community             
!mysql80-community/x86_64                                       MySQL 8.0 Community Server        
选择想要安装的MySql版本进行安装(会有多个版本的情况)
1
[root@VM-16-16-centos ~]#yum install mysql-community-server

如果同时启用了多个仓库,安装时会选择最新版本,我这里安装的是8.0社区版

安装过程耐心等待…

这里要特别说明下:安装MySql数据库时,编码模式一定选择utf8mb4,为什么?

MySql中的UTF8并不是我们传统意义上的UTF8(最大4字节,数字,字母,符号1字节,中文3字节这样),而是最大3字节,这就导致在存储特定数据是会出现insert失败的情况,比如emoji表情,它需要4个字节去存储,但是如果MySql的字符集设置的utf8,就会出现insert失败的情况。为了解决类似这种问题,官方才在之后引入了utf8mb4的编码。所以utf8mb4才是真正意义上的utf8编码。

启动MySQL

安装完毕我,启动MySql,并查看运行状态:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
[root@VM-16-16-centos ~]#systemctl start mysqld
[root@VM-16-16-centos ~]#systemctl status mysqld
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-09-15 02:37:32 CST; 1 weeks 0 days ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 2605 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 2629 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─2629 /usr/sbin/mysqld

####重置密码

安装完成后,没有密码,需要重置密码。

MySql安装完成后,会在/var/log/mysqld.log中生成临时密码,在第一次登陆MySql时可以使用该密码登陆,打开文件搜索temporary password即可:

1
2
3
4
5
[root@VM-16-16-centos ~]# vim /var/log/mysqld.log
...
2020-09-14T17:05:56.862720Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: XXXXXXX

...
登陆MySql
1
mysql -uroot -p

输入临时密码,回车,成功进入mysql环境。

修改默认密码
1
[root@VM-16-16-centos ~]#ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
创建用于MySql的用户

在创建用户并赋予权限是会遇到如下问题:

1
mysql>grant all privileges on *.* to 'user1'@'%' identified by '123456' with grant option;

ERROR 1410 (42000): You are not allowed to create a user with GRANT

遇到以上问题是,因为MySql8中已经不允许分配权限的同时带密码隐式创建账号了,需要先创建用户,在设置权限。

1
2
mysql> CREATE USER 'user1'@'%' IDENTIFIED BY '123456';
mysql> GRANT ALL PRIVILEGES ON *.* TO'user1'@'%';

完成后到user表中确认结果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mysql> use mysql;
mysql> select Host, User from user;
+-----------+------------------+
| Host      | User             |
+-----------+------------------+
| %         | user1            |
| localhost | mysql.infoschema |
| localhost | mysql.session    |
| localhost | mysql.sys        |
| localhost | root             |
+-----------+------------------+

此时就创建了一个可以用于远程访问的用户user1,Host中的%是指任何主机

测试远程连接

我用的客户端叫heidisql(官网),该有的功能都用,用起来很轻便,感兴趣的同学可以下来试试。

在测试连接时遇到两个错误:

  • 第一错误是连接不上,总是提示无法连接、访问被拒绝。出现该问题的原因大概率是防火墙没有添加mysql默认端口的规则导致的

    1
    2
    3
    4
    5
    6
    7
    
    #查看firewalld状态:systemctl status firewalld
    [root@VM-16-16-centos ~]#systemctl status firewalld
    #如果是dead的状态,则开启防火墙
    [root@VM-16-16-centos ~]#systemctl start firewalld
    #再次确认firewalld状态,active(running)就表示开启了
    #开放默认端口号 3306,出现success表示成功
    [root@VM-16-16-centos ~]#firewall-cmd --permanent --zone=public --add-port=3306/tcp
    
  • 配置完成后,再次连接数据库,试试不支持认证协议,此时就要修改加密方式:

    1
    
    mysql>alter user user1 identified with mysql_native_password by '123456'

    确认:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    
    mysql> select Host, User, plugin from user;
    +-----------+------------------+-----------------------+
    | Host      | User             | plugin                |
    +-----------+------------------+-----------------------+
    | %         | user1            | mysql_native_password |
    | localhost | mysql.infoschema | caching_sha2_password |
    | localhost | mysql.session    | caching_sha2_password |
    | localhost | mysql.sys        | caching_sha2_password |
    | localhost | root             | caching_sha2_password |
    +-----------+------------------+-----------------------+
    

    user1pluginmysql_native_password,设置成功,此时再次使用客户端连接数据,连接成功。

设置开机启动
1
2
[root@VM-16-16-centos ~]#systemctl enable mysqld
[root@VM-16-16-centos ~]#systemctl daemon-reload

以上就是本次安装MySql的全部内容