CentOS7安装MySQL8.0

下载压缩包

  • MySQL官网下载对应Linux版本的安装包(下载Bundle全量包即可)
    MySQL在Linux下MySQL安装卸载与使用 - 图1
  • 解压压缩包,使用XFTP将压缩包传到 /opt 目录下,此时安装MySQL只需要这5个rpm包即可
    MySQL在Linux下MySQL安装卸载与使用 - 图2

CentOS7下检查MySQL依赖

  • 由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。执行 :
    ll查看tmp文件,此时有所有权限
    MySQL在Linux下MySQL安装卸载与使用 - 图3

    1. chmod -R 777 /tmp
  • 检查依赖
    MySQL在Linux下MySQL安装卸载与使用 - 图4
    MySQL在Linux下MySQL安装卸载与使用 - 图5

    1. rpm -qa|grep libaio
    1. rpm -qa|grep net-tools

执行安装

在 /opt 目录下执行,使用rpm包安装(必须按照顺序执行,下一个安装需要依赖上一个),i为安装,v为详细信息,h为显示进度

  1. rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
  2. rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
  3. rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
  4. rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
  5. rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm

注意:在安装第三个依赖时报错

MySQL在Linux下MySQL安装卸载与使用 - 图6

因为CentOS7自带的有mariadb来代替mysql,所以需要先将mariadb删除,执行

  1. yum remove mysql-libs

查看是否安装成功

  • 查看mysql版本
    MySQL在Linux下MySQL安装卸载与使用 - 图7

    1. mysql --version
    2. #或
    3. mysqladmin --version
  • y而可以通过rpm查看包是否安装
    MySQL在Linux下MySQL安装卸载与使用 - 图8

    1. rpm -qa|grep -i mysql

服务器初始化

  • 为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化:
    —initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将 该密码标记为过期 ,登录后你需要设置一个新的密码。生成的 临时密码 会往日志中记录一份。

    1. mysqld --initialize --user=mysql
  • 查看密码
    MySQL在Linux下MySQL安装卸载与使用 - 图9

    1. cat /var/log/mysqld.log

启动MySQL

  1. #加不加.service后缀都可以
  2. 启动:systemctl start mysqld.service
  3. 关闭:systemctl stop mysqld.service
  4. 重启:systemctl restart mysqld.service
  5. 查看状态:systemctl status mysqld.service

启动后,可以通过查看进程和状态查看服务是否启动

  1. ps -ef | grep -i mysql

MySQL在Linux下MySQL安装卸载与使用 - 图10

设置开机自动启动服务

查看MySQL是否自动启动

  1. systemctl list-unit-files|grep mysqld.service

设置自动启动

  1. systemctl enable mysqld.service

enable则自动启动

MySQL在Linux下MySQL安装卸载与使用 - 图11

也可以设置为不自动启动

  1. systemctl disable mysqld.service

修改密码

首次登录需要输入初始化提供的密码

MySQL在Linux下MySQL安装卸载与使用 - 图12

修改密码

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

CentOS7卸载MySQL8.0

关闭mysql 服务

  1. systemctl stop mysqld.service

查看安装状况

  1. rpm -qa | grep -i mysql
  2. # 或
  3. yum list installed | grep mysql

卸载上述命令查询出的已安装程序

  1. yum remove mysql-xxx mysql-xxx mysql-xxx mysqk-xxxx

删除 mysql 相关文件

  • 查找相关文件

    1. find / -name mysql
  • 删除查找出来的相关文件

    1. rm -rf xxx

删除 my.cnf

  1. rm -rf /etc/my.cnf

Navicat连接Linux下的MySQL

关闭Linux下的防火墙或开放端口

  • 方式一:关闭防火墙
    CentOS7防火墙命令

    1. systemctl start firewalld.service
    2. systemctl status firewalld.service
    3. systemctl stop firewalld.service
    4. #设置开机启用防火墙
    5. systemctl enable firewalld.service
    6. #设置开机禁用防火墙
    7. systemctl disable firewalld.service
  • 方式二:开放端口

    • 查看开放端口号

      1. firewall-cmd --list-all
    • 设置开放端口号

      1. firewall-cmd --add-service=http --permanent
      2. firewall-cmd --add-port=3306/tcp --permanent
    • 重启防火墙

      1. firewall-cmd --reload

修改root用户配置

  • 进入mysql数据库,查看user表

    1. use mysql;
    2. select Host,User from user;
  • 默认root只允许localhost连接
    MySQL在Linux下MySQL安装卸载与使用 - 图13

  • 修改Host为%通配符
    Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而 %是个 通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限。
    注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置。
    MySQL在Linux下MySQL安装卸载与使用 - 图14

    1. update user set host = '%' where user ='root';
  • 刷新权限,使其生效

    1. flush privileges;

Navicat连接

MySQL在Linux下MySQL安装卸载与使用 - 图15

输入IP地址,测试连接,在MySQL8.0中报错

MySQL在Linux下MySQL安装卸载与使用 - 图16

原因是是 mysql 密码加密方法变了。此时登录mysql,执行

  1. ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

修改字符集

在MySQL 8.0版本之前,默认字符集为 latin1 ,utf8字符集指向的是 utf8mb3 。网站开发人员在数据库设计的时候往往会将编码修改为utf8字符集。如果遗忘修改默认的编码,就会出现乱码的问题。从MySQL 8.0开始,数据库的默认码将改为 utf8mb4 ,从而避免上述乱码的问题。

修改步骤

  • 查看字符集

    1. show variables like 'character%';
    2. # 或者
    3. show variables like '%char%';
  • 修改字符集,my.cnf为mysql在Linux下的配置文件
    加上

    1. vim /etc/my.cnf
    1. character_set_server=utf8
  • 重启服务
    但是原库、原表的设定不会发生变化,参数修改只对新建的数据库生效。

    1. systemctl restart mysqld

修改原有的字符集

  • 修改原有的数据库

    1. alter database 数据库名 character set 'utf8';
  • 修改原有的数据表

    1. alter table 表名 character set 'utf8';

各级别的字符集

MySQL有4个级别的字符集和比较规则,分别是:

  • 服务器级别
  • 数据库级别
  • 数据表级别
  • 数据列级别

MySQL在Linux下MySQL安装卸载与使用 - 图17

character_set_server:服务器级别的字符集

character_set_database:当前数据库的字符集

character_set_client:服务器解码请求时使用的字符集

character_set_connection:服务器处理请求时会把请求字符串从character_set_client转为character_set_connection

character_set_results:服务器向客户端返回数据时使用的字符集

修改各级别字符集

  • character_set_server:服务器级别字符集
    我们可以在启动服务器程序时通过启动选项或者在服务器程序运行过程中使用 SET 语句修改这两个变量的值。比如我们可以在配置文件中这样写:

    1. [server]
    2. character_set_server=gbk # 默认字符集
    3. collation_server=gbk_chinese_ci #对应的默认的比较规则
  • character_set_database :当前数据库的字符集
    我们在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:
    ```sql CREATE DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称];

ALTER DATABASE 数据库名 [[DEFAULT] CHARACTER SET 字符集名称] [[DEFAULT] COLLATE 比较规则名称];

  1. - 表级别:<br />我们也可以在创建和修改表的时候指定表的字符集和比较规则,语法如下: <br />**如果创建和修改表的语句中没有指明字符集和比较规则,将使用该表所在数据库的字符集和比较规则作为该表的字符集和比较规则。**
  2. ```sql
  3. CREATE TABLE 表名 (列的信息)
  4. [[DEFAULT] CHARACTER SET 字符集名称]
  5. [COLLATE 比较规则名称]]
  6. ALTER TABLE 表名
  7. [[DEFAULT] CHARACTER SET 字符集名称]
  8. [COLLATE 比较规则名称]
  • 列级别
    对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。我们在创建和修改列定义的时候可以指定该列的字符集和比较规则,语法如下:
    对于某个列来说,如果在创建和修改的语句中没有指明字符集和比较规则,将使用该列所在表的字符集和比较规则作为该列的字符集和比较规则。 ```sql CREATE TABLE 表名( 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称], 其他列… );

ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];

  1. <a name="b55fea25"></a>
  2. ## 四个级别的联系
  3. - 如果 创建或修改列 时没有显式的指定字符集和比较规则,则该列 默认用表的 字符集和比较规则
  4. - 如果 创建表时 没有显式的指定字符集和比较规则,则该表 默认用数据库的 字符集和比较规则
  5. - 如果 创建数据库时 没有显式的指定字符集和比较规则,则该数据库 默认用服务器的 字符集和比较规则
  6. <a name="6b4940de"></a>
  7. ## 请求到响应过程中字符集的变化
  8. ![](https://gitee.com/ljlGitee001/pictures/raw/master/img/202203130935106.png#crop=0&crop=0&crop=1&crop=1&id=AhJXm&originHeight=295&originWidth=1113&originalType=binary&ratio=1&rotation=0&showTitle=false&status=done&style=none&title=)
  9. <a name="48044b62"></a>
  10. ### 举例
  11. 先修改
  12. ```sql
  13. set character_set_connection = gbk;

下面运行语句

  1. SELECT * FROM t WHERE s = '我';

编码与解码的过程

  1. 客户端发送所使用的字符集,一般情况下客户端所使用的字符集和当前操作系统一致,不同操作系统使用的字符集可能不一
    样,如下:
    • 类 Unix 系统使用的是 utf8
    • Windows 使用的是 gbk
      此处在Linux上,使用的是utf8。
  2. 服务器接收字符集后以character_set_client的值,进行解码,并在按照character_set_connection的值进行字符集的编码,也就是将utf8转化为gbk
  3. 假如列采用的也是gbk编码,与character_set_connection一致,所以直接到列中找记录,最后找到了一条记录。如果某个列使用的字符集和character_set_connection代表的字符集不一致的话,还需要进行一次字符集转换。
  4. 服务器将结果集按照character_set_results进行编码为utf8字符串,也就是将gbk转化为utf8,发送给客户端
  5. 由于客户端是用的字符集是 utf8 ,所以可以顺利的解释成字符 我 ,从而显示到我们的显示器上,所以我们人类也读懂了返回的结果。

图示

MySQL在Linux下MySQL安装卸载与使用 - 图18