跳至主要內容

MYSQL8.0安装

牧歌...大约 7 分钟

MYSQL8.0安装

文章参考open in new window

一、卸载mariadb

如果Linux中安装了mariadb数据库,先卸载掉,因为CentOS 7 内部集成了mariadb,mariadb数据库是mysql的分支,而安装mysql的话会和mariadb的文件冲突,所以需要先卸载掉mariadb

  1. 检查Linux是否安装了mariadb数据库
yum list installed | grep mariadb

无结果,说明未安装,否则需要全部卸载

2.全部卸载

yum -y remove mariadb*
  1. 检查mariadb是否全部卸载
yum list installed | grep mariadb

无结果,说明已经全部卸载

二、 删除之前安装的mysql

1、查找以前是否装有mysql

rpm -qa|grep -i mysql

无结果,说明未安装mysql或已经卸载彻底,接下来直接安装mysql即可,否则需要删除之前安装的mysql

2、查找之前安装的mysql的目录、并且删除mysql的文件和库 查找mysql的目录

find / -name mysql

删除对应的mysql目录

rm -rf 查找到的mysql的目录

3、卸载后/etc/my.cnf不会删除,需要进行手工删除

rm -rf /etc/my.cnf

三、安装并配置MySQL

1.创建mysql文件夹并切换路劲 local目录一般是linux上安装文件的地方,所以选这个路径

cd /usr/local
mkdir mysql
cd mysql

2.下载mysql

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

3.解压mysql

tar xvJf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz

4.重命名文件夹并删除压缩包

mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql-8.0
rm -rf mysql-8.0.30-linux-glibc2.12-x86_64

5.创建用户组以及用户和密码

groupadd mysql
useradd -g mysql mysql

为什么要创建mysql分组: 我们在编译安装的时候创建一个mysql组和一个mysql用户,并把datadir和安装目录属主改为mysql,在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql,这样就保证了mysql服务的独立性,即便mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全

6.授权用户

chown -R mysql.mysql /usr/local/mysql/mysql-8.0

7.切换到bin目录下,初始化基础信息得到临时密码

cd bin
./mysqld --user=mysql --basedir=/usr/local/mysql/mysql-8.0 --datadir=/usr/local/mysql/mysql-8.0/data/ --initialize

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

image.png|650
image.png|650

原因:缺少libaio 解决方案

yum install libaio

解决完重新执行

./mysqld --user=mysql --basedir=/usr/local/mysql/mysql-8.0 --datadir=/usr/local/mysql/mysql-8.0/data/ --initialize
2024-04-30T08:22:05.438550Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2024-04-30T08:22:05.438657Z 0 [System] [MY-013169] [Server] /usr/local/mysql/mysql-8.0/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 9504
2024-04-30T08:22:05.566383Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-04-30T08:22:08.187953Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-04-30T08:22:10.238781Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Fq;4PAU-Udht

8.编辑配置文件my.cnf 如果没有 my.cnf 文件就通过命令 touch /etc/my.cnf 创建一个

vi /etc/my.cnf

内容如下:

[mysql]
#MySQL 提示符配置
 
#用户名@主机名+数据库名
#prompt="\\u@\\h [\\d]>"
 
#用户名@主机名+mysql版本号+数据库名
prompt=\\u@\\h \\v [\\d]>\\_
 
#用户名@主机名+当前时间+mysql版本号+数据库名
#prompt="(\\u@\\h) \\R:\\m:\\s \\v [\\d] \n>"
 
[mysqld]
#mysql安装根目录
basedir = /usr/local/mysql/mysql-8.0/
 
#mysql数据文件所在位置
datadir = /usr/local/mysql/mysql-8.0/data/
 
#设置socke文件所在目录
socket = /tmp/mysql.sock
 
#数据库默认字符集, 主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
 
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
 
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'

9.切换到mysql-8.0目录下,添加mysqld服务到系统

cd /usr/local/mysql/mysql-8.0
cp -a ./support-files/mysql.server /etc/init.d/mysql

10.授权以及添加服务

chmod +x /etc/init.d/mysql
chkconfig --add mysql

11.启动mysql

service mysql start

12.查看启动状态

service mysql status
image.png|650
image.png|650

13.将mysql命令添加到系统指令

ln -s /usr/local/mysql/mysql-8.0/bin/mysql /usr/bin

实现在任何目录下执行 mysql -uroot -p 就可以进行登录

14.登录mysql,密码使用之前随机生成的密码

mysql -uroot -p

如果出现报错 error while loading shared libraries: libtinfo.so.5 解决办法

ls /usr/lib64
image.png|650
image.png|650

为此命令创建一个同步链接并命名为libtinfo.so.5即可

ln -s /usr/lib64/libtinfo.so.6.2 /usr/lib64/libtinfo.so.5

注:不同Linux版本下的 libtinfo.so 版本号可能不同,根据自己的修改

15.修改root密码

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

修改root用户密码为 123456 ,也可以换成别的

16.执行 flush privileges 使密码生效

flush privileges;

17.选择mysql数据库

use mysql;

18.修改远程连接并生效,%表示开启远程权限

update user set host='%' where user='root';
flush privileges;

19.退出MySQL:

\q

20.查看mysql是否开机启动

chkconfig --list

如果 mysql服务的 第3、4、5项都是开着的,则已经开启了开机启动,反之则没有。

如果没有,可以用命令设置开机自启动:

systemctl enable mysqld.service

再次查看mysql是否开机启动:

chkconfig --list

四、Linux虚拟机防火墙开放端口号3306,实现MySQL远程连接

1.查看3306端口状态

firewall-cmd --zone=public --query-port=3306/tcp

2、如果是no,表示关闭,打开3306端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent 

3、防火墙重载

firewall-cmd --reload

4、再次查看3306端口状态

firewall-cmd --zone=public --query-port=3306/tcp

应该是yes,说明端口已经打开,去navicat测试连接,输入ip和root账户密码,即可成功!

如果是在阿里云或者别的平台还需要再平台开放端口

四、登录MySQL 执行下面命令,输入密码“123456”并确认:

mysql -uroot -p

或者执行下面命令一键登录:

mysql -uroot -hlocalhost -p123456

注:-p后跟密码

五、用户管理

创建用户

create user '#userName'@'#host' identified by '#passWord';

#userName 代表你要创建的此数据库的新用户账号

#host 代表访问权限,如下

  • %代表通配所有host地址权限(可远程访问)
  • localhost为本地权限(不可远程访问)
  • 指定特殊Ip访问权限 如10.138.106.102

#passWord 代表你要创建的此数据库的新用密码 密码强度需要大小写及数字字母,否则会报密码强度不符合
用户名如果重复,会报错ERROR 1396 (HY000): Operation CREATE USER failed for 'testUser'@'%'

查看用户

use mysql;

select host, user, authentication_string, plugin from user;

用户授权

grant #auth on #databaseName.#table to '#userName'@'#host';

#auth 代表权限,如下

  • all privileges 全部权限
  • select 查询权限
  • select,insert,update,delete 增删改查权限
  • select,[…]增…等权限

#databaseName 代表数据库名
#table 代表具体表,如下

  • *代表全部表
  • A,B 代表具体A,B表

#userName 代表用户名

#host 代表访问权限,如下

  • %代表通配所有host地址权限(可远程访问)
  • localhost为本地权限(不可远程访问)
  • 指定特殊Ip访问权限 如10.138.106.102
# 示例
grant all privileges on waline.* to 'waline_user'@'%';

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, INDEX,ALTER ON waline.* TO waline_user'%' with grant option;

使用旧的加密方式

有时候在使用node时会遇到MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL client 报错

解决一(不推荐):

Using the old mysql_native_password works:

-- 如果您使用多个 MySQL 用户,请确保更新所有从远程(即不是本地主机)连接的用户。就我而言,我还必须使用 '%' 而不是 'localhost'
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourRootPassword';
-- or
CREATE USER 'foo'@'%' IDENTIFIED WITH mysql_native_password BY 'bar';
-- then
FLUSH PRIVILEGES;

This is because caching_sha2_password is introduced in MySQL 8.0, but the Node.js version is not implemented yet. You can see this pull requestopen in new window and this issueopen in new window for more information. Probably a fix will come soon!

翻译:这是因为在MySQL 8.0中引入了caching_sha2_password,但是Node.js版本还没有实现。您可以查看此拉取请求和此问题以获取更多信息。可能很快就会有修复!

解决二升级node.js的包(参考如下)

node.js - MySQL 8.0 - 客户端不支持服务器请求的认证协议;考虑升级 MySQL 客户端 - Stack Overflow --- node.js - MySQL 8.0 - Client does not support authentication protocol requested by server; consider upgrading MySQL client - Stack Overflowopen in new window

上次编辑于:
贡献者: wenleiwang,Owen
评论
  • 按正序
  • 按倒序
  • 按热度