一、MySQL介绍

1.1 MySQL简介

MySQL 8.0 是最新版本的 MySQL 数据库管理系统,是一种关系型数据库管理系统,由 Oracle 公司开发和维护。MySQL 8.0 带来了一系列新特性,包括多个性能提升,更好的安全性和扩展性,以及新的管理功能。

1.2 MySQL特点

开源:MySQL 是一个开源的关系型数据库管理系统,遵循 GPL 许可协议。
快速:MySQL 是一个快速、可扩展的数据库管理系统,具有高性能和高吞吐量。
安全:MySQL 提供了 strong authentication 和 strong authorization,确保数据的安全性。
兼容性:MySQL 支持多种数据库语言,包括 SQL、PL/SQL、T-SQL、MySQL、Oracle、DB2 等。
社区:MySQL 社区提供了大量资源,包括文档、教程、论坛和开源代码库。

二、本次实践介绍

2.1 环境准备

hostnameIP地址系统版本内核版本mysql版本
localhost192.168.1.100CentOS 7.9.20093.10.0-1160.el7.x86_648.0.28

2.2 实践目的

  1. 在centos7.6系统下安装MySQL8.0版本。
  2. 可以远程登录mysql数据库。

    三、卸载MySQL数据库

    3.1 卸载MySQL

    如果系统已安装有其他版本的mysql,需提前卸载清空环境。
    1
    2
    rpm -e mysql  // 普通删除模式
    rpm -e --nodeps mysql  // 强力删除模式
1
2
rm -rf /etc/my.cnf      // 替换自己实际目录
rm -rf /var/lib/mysql/ // 替换自己实际目录

四、安装MySQL数据库

4.1 下载安装配置

  1. 切换到 /usr/local/
    1
    cd /usr/local/
  2. 创建mysql文件夹
    1
    mkdir mysql
  3. 切换到mysql文件夹下
    1
    cd mysql
  4. 下载mysql8.0安装包
    1
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz
  5. 解压mysql安装包
    1
    tar xvJf mysql-8.0.28-linux-glibc2.12-x86_64.tar.xz 
  6. 重命名解压出来的文件夹,这里改成mysql-8.0
    1
    mv mysql-8.0.28-linux-glibc2.12-x86_64 mysql-8.0
  7. 进入MySQL根目录,创建data文件夹
    1
    2
    cd mysql-8.0
    mkdir data

    五、MySQL初始化

    5.1 初始化

    在初始化之前提一嘴,Linux中的MySQL默认是区分表明大小写的,如果你是安装的也是MySQL8,那么不区分大小需要在数据库初始化时设置,不然初始化后,在配置文件在设置重启时是会报错的。 进入MySQL的bin目录进行初始化

    1
    ./mysqld --user=mysql --basedir=/opt/mysql/mysql-8.0 --datadir=/opt/mysql/mysql-8.0/data --lower-case-table-names=1 --initialize

    img.png
    –lower-case-table-names=1 即设置不区分表明大小写,最后面的 dwW3</EIewj 为初始化生产的临时密码。

    5.2 初始化失败

    进入bin目录报如下错:

    1
    ./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

    img_1.png
    原因:
    这是一个与运行MySQL数据库相关的问题。出现这个错误的原因是系统缺少了名为libaio.so.1的共享库文件。
    先安装numactl软件包,命令如下:

    1
    yum -y install numactl.x86_64

    image.png
    然后安装libaio开发包,命令如下:

    1
    yum install  libaio-devel.x86_64

    image75e000e8b8f3a061.png
    安装成功后就可以再次初始化了。

    六、修改MySQL配置文件

    初次进入时配置是空的,进入命令

    1
    vim /etc/my.cnf

    复制下面文件保存退出。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [mysqld]
    port=3306
    basedir=/usr/MYSQL/mysql-8.0.31/ # MySQL根目录
    datadir=/usr/MYSQL/mysql-8.0.31/data/ # MySQL的data目录
    socket=/tmp/mysql.sock
    character-set-server=UTF8MB4
    symbolic-links=0


    #解决“java.sql.SQLException: Expression #1 of ORDER BY clause is not in SELECT list,references column”
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'

    七、添加服务到系统

    进入MySQL根目录,直接复制粘贴命令即可。

    1
    cp -a ./support-files/mysql.server /etc/init.d/mysql

    img.png

    八、授权以及添加服务

    这里授权和添加服务都是在MySQL的根目录中操作。

    8.1 授权

    1
    chmod +x /etc/init.d/mysql

    img_1.png

    九、启动MySQL

    9.1 启动命令

    1
    service mysql start

    9.2 查看MySQL状态

    1
    service mysql status

    9.3 踩坑

    如果启动时报如下错
    img_2.png
    一个原因是上面新建的data目录没有权限,使用如下命令加上:

    1
    chmod -R 755 /usr/local/mysql/mysql-8.0.32/data

    将data目录改为你的data目录,然后再使用
    img_3.png
    然后再启动mysql

    1
    service mysql start

    十、将MySQL命令添加到服务

    10.1 添加命令

    命令: ln -s “你的MySQL根目录/bin/mysql” /usr/bin ,这一步是为了能在任何地方通过用户名和密码登录MySQL,这是我的

    1
    ln -s /usr/MYSQL/mysql-8.0.31/bin/mysql /usr/bin

    img_4.png

    10.2 踩坑

    直到上一步都没有出错,在登录mysql时报如下错:
    img_5.png
    可能是挂载的路径错了,到挂载目录查看,命令如下:

    1
    cd /usr/bin

    可以看到mysql服务是红色的,并且一直在闪,正常的应该是绿色的。
    img_6.png
    我当前的mysql根目录是8.0.32,添加的时候写成了8.0.31,怪不得会报错。
    解决办法:删除当前mysql的服务,重新添加。
    先删除,命令如下:

    1
    rm -rf /usr/bin/mysql

    重新添加:

    1
    ln -s /usr/local/mysql/mysql-8.0.32/bin/mysql /usr/bin

    可以看到mysql服务添加成功,可以登录mysql了。
    img_7.png

    十一、修改密码

    11.1 先使用前面初始化拿到的临时密码登录

    1
    mysql -uroot -p

    img_8.png

    11.2 切换到mysql数据库

    切换mysql命令

    1
    use mysql

    如果切换mysql数据库时出现这样的错就直接修改密码:
    img_9.png
    查询用户表命令

    1
    select Host, User from user;

    img_10.png
    可以看到允许访问root的host有哪些,%表示所有,这里只有localhost,修改密码不成功可以看一下root对应的host的值。

    11.3 修改密码

    修改密码的命令为:

    1
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

    修改之后需要刷新,使密码生效

    1
    flush privileges;

    11.4 踩坑,修改成功可以不看

    11.4.1 设置简单密码报错

    初次修改密码时,如果设置过于简单的密码可能会报错,可以使用命令

    1
    show variables like 'validate_password%';

    validate_password_policy 的默认值为 1 或者 MEDIUM,表示密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。 validate_password_length 的默认值为 8,表示密码长度为8。

注意查看密码安全策略的这步,只有初始密码登录MySQL才能查到结果,修改密码再次使用此命令查询没有结果。
设置简单密码策略

1
set global validate_password_policy=0;

设置密码长度
1
set global validate_password_length=6;

这样设置之后就可以将密码修改为“123456”了。

11.4.2 修改密码报错

有些朋友修改密码时会报错,原因可能就在这里,假如你修改密码的命令为:

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

那么是没有问题的,如果你修改密码的命令为:
1
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';

那么可能就会报错。 解决办法,使用如下命令:
1
update user set Host='%' where User='root';

将root用户对应的Host改为“%”再重新修改密码就行了。 记得修改密码后用命令:
1
flush privileges;