Windows及CentOS 8安装MySQL8记录

概述

本文记录一下在Windows、Linux等系统安装MySQL 8遇到的问题,以及解决过程。算是一个备忘录。

Windows 10

切记:
在安装之前,需卸载之前安装的MySQL 5.x版本;否则安装失败(因为不管是MySQL 5.x还是MySQL 8.x版本,默认都使用3306端口,使用同一个后台进程名mysqld):
在这里插入图片描述
官网下载地址,忽略账号注册或登陆,直接下载得到zip包,解压缩。本文安装到D:\mysql-8.0.23-winx64目录下。在此目录下新建my.ini,内容为:

[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\\mysql-8.0.23-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\\mysql-8.0.23-winx64\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

配置系统环境:新增MYSQL_HOME=D:\mysql-8.0.23-winx64环境变量,并在path中添加%MYSQL_HOME%\bin环境变量。
以管理员的身份打开cmd窗口跳转路径到D:\mysql-8.0.23-winx64\bin
初始化命令:mysqld --initialize --user=mysql --console
添加服务:mysqld -install
启动服务:net start mysql
在这里插入图片描述
打开任务管理器,可发现已经有一个mysqld进程,如何使用DataGrip客户端连接到本地数据库呢?

注意上述操作的输出信息,即如下截图,在mysqld --initialize --user=mysql --console命令输出的最后一行有类似这样的文本: A temporary password is generated for root@localhost: oYYgq-DS<3o5
即用户名root,密码是随机字符串。本地环境不考虑安全性,一般会修改密码。

输入mysql -u root -p进行登录数据库,输入截图中的密码。
修改密码:ALTER USER root@localhost IDENTIFIED BY 'root';
修改密码为:root
在这里插入图片描述

CentOS 8

首先,查看是否已经安装MySQL:
yum list installed mysql
或者
rpm -qa | grep mysql

若已经安装,可考虑卸载,卸载前关闭mysql服务,然后使用命令:
rpm -ev --nodeps mysql-errmsg-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 mysql-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 mysql-server-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64 mysql80-community-release-el8-1.noarch mysql-common-8.0.21-1.module_el8.2.0+493+63b41e36.x86_64

验证卸载:rpm -qa | grep mysql

安装Yum Repository:
wget https://repo.mysql.com//mysql80-community-release-el8-1.noarch.rpm

使用rpm来安装MySQL:
rpm -ivh mysql80-community-release-el8-1.noarch.rpm

使用yum安装mysql服务:
yum install mysql-server

设置开机启动:

systemctl enable mysqld.service
# Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
systemctl enable mysqld@.service
# Created symlink /etc/systemd/system/multi-user.target.wants/mysqld@.service → /usr/lib/systemd/system/mysqld@.service.

启动服务:
systemctl start mysqld.service

查看是否启动MySQL服务
ps -ef | grep mysql

检查是否已经设置为开机启动MySQL服务:
systemctl list-unit-files | grep mysqld

题外话:上面提到设置服务开机启动,需要执行两条几乎一样的命令。那问题来了:mysqld.service和mysqld@.service有何区别?

如果没有执行:systemctl enable mysqld@.service,输出将是:

[root@centos170 ~]# systemctl list-unit-files | grep mysqld
mysqld.service                              enabled
mysqld@.service                             disabled

除此之外,两者有何区别,有待调研。

输入mysql,即可进入命令行,查询版本:
select version();
得到:8.0.21

查看所有默认的数据库:
show databases;
输出:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

注:大多数语句要输入结束符分号;

直接使用mysql可以进入命令行客户端。输入mysql -uroot -p直接回车都能进入mysql客户端,即root用户是没有密码的!!!
在这里插入图片描述
但是,本地使用可视化客户端工具DataGrip连接,方便后续的数据查询与展示,却连接失败,报错信息:SQLException: null, message from server: "Host 'XXX' is not allowed to connect

解决方案:参考

这个报错异常是数据库默认情况下只允许localhost或127.0.0.1访问,不允许远程访问。一般而言,在Linux服务器安装MySQL服务后,我们会通过Windows或Mac开发机来连接Linux服务上面的MySQL服务。

切换DB:use mysql,查看用户和对应的host信息:

select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+

可知root用户只允许host为localhost访问,故而需要更新:update user set host='%' where user='root';

使更改生效:FLUSH PRIVILEGES;

此时再次使用DataGrip客户端连接MySQL,输入User,即用户名root,密码为空,点击测试连接:
在这里插入图片描述
连接成功!

如果是生产数据库,一定要设置密码:

use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
FLUSH PRIVILEGES;

这里可以考虑使用一款随机密码生成器小工具。

posted @ 2023-02-12 18:12  johnny233  阅读(32)  评论(0编辑  收藏  举报  来源