Linux中安装mysql8,转载及注意事项

一、先前往官网下载mysql8

下载地址:

java 复制代码
https://dev.mysql.com/downloads/

选择Linux


二、删除Linux中的mysql(如果有的话),上传安装包
1、先查看mysql是否存在,命令如下:

java 复制代码
rpm -qa|grep -i mysql

如果使用这个命令之后没有出现任何内容,表示没有安装过mysql,如果有出现,则删除。
2、如果存在,那么停止mysql,删除所有的服务

使用如下命令:

java 复制代码
find / -name mysql

删除出现的所有文件(如图)
三、解压安装MySQL
1、解压MySQL压缩包

tar xvJf "你的安装包名称",我这里是

java 复制代码
tar xvJf mysql-8.0.31-linux-glibc2.12-x86_64.tar.xz

2、重命名解压后的MySQL

觉得解压之后的MySQL文件夹名称太长了,可以 mv "原文件名称" "新文件名称",重命名一下,注意如果是在当前文件中重命名,新文件名中不能包含斜杆"/",这是我的

java 复制代码
mv mysql-8.0.31-linux-glibc2.12-x86_64 mysql-8.0.31

3、进入MySQL根目录,创建data文件夹

进入根目录

java 复制代码
cd mysql-8.0.31/

创建data文件

java 复制代码
mkdir data

四、创建mysql组和用户

这个我没发现有什么用,但很多教程都这么做,我这里也创建一下。
1、创建mysql组

java 复制代码
groupadd mysql

2、创建mysql用户

java 复制代码
useradd -g mysql mysql

出现这样的提示表示已经创建过mysql组和用户了。

3、将安装的MySQL权限给mysql用户

命令,chown -R "mysql组名"."mysql用户名" "mysql安装根目录"

java 复制代码
chown -R mysql.mysql /usr/MYSQL/mysql-8.0.31


五、MySQL初始化
1、初始化

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

进入MySQL的bin目录进行初始化

java 复制代码
./mysqld --user=mysql --basedir=/usr/MYSQL/mysql-8.0.31 --datadir=/usr/MYSQL/mysql-8.0.31/data --lower-case-table-names=1 --initialize

--lower-case-table-names=1 即设置不区分表明大小写,最后面的 dwW3</EIewj 为初始化生产的临时密码。
2、初始化失败(2023-11-9更新,初始化成功可以不看)

进入bin目录报如下错:

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

原因:

这是一个与运行MySQL数据库相关的问题。出现这个错误的原因是系统缺少了名为libaio.so.1的共享库文件。

使用命令查看是否已安装libaio软件包,命令如下:

java 复制代码
rpm -qa|grep libaio

可以看到并没有安装libaio软件包。

解决办法:

先安装numactl软件包,命令如下:

java 复制代码
yum -y install numactl.x86_64

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

java 复制代码
yum install  libaio-devel.x86_64

再次查看是否安装成功libaio软件包

java 复制代码
rpm -qa|grep libaio

可以看到安装成功了,再次初始化应该就可以成功了。

六、修改MySQL配置文件

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

java 复制代码
vim /etc/my.cnf
java 复制代码
[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根目录,直接复制粘贴命令即可。

java 复制代码
cp -a ./support-files/mysql.server /etc/init.d/mysql


八、授权以及添加服务

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

1、授权

java 复制代码
chmod +x /etc/init.d/mysql


2、添加服务

java 复制代码
chkconfig --add mysql


九、启动MySQL
1、启动MySQL命令

java 复制代码
service mysql start

2、查看MySQL状态

java 复制代码
service mysql status

3、踩坑(2023-4-12更新,成功启动的可以不看)

如果启动时报如下错

一个原因是上面新建的data目录没有权限,使用如下命令加上:

java 复制代码
chmod -R 755 /usr/local/mysql/mysql-8.0.32/data

此处一定注意 :将data目录改为你的data目录,然后再使用

然后再启动mysql
可以看到报错比上面少了,接下来看看上面报错的日志,使用命令

java 复制代码
cat /usr/local/mysql/mysql-8.0.32/data/iZ7xvbz75ed3prrdah1kceZ.err

前面在初始化时设置了表明大小写不敏感,这里要在mysql的配置文件中显示设置一下

保存退出,然后重启mysql

成功启动。

十、将MySQL命令添加到服务
1、添加服务

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

java 复制代码
ln -s /usr/MYSQL/mysql-8.0.31/bin/mysql /usr/bin


2、踩坑(2023-4-12更新,成功登录mysql可以不看)

直到上一步都没有出错,在登录mysql时报如下错:

可能是挂载的路径错了,到挂载目录查看,命令如下:

java 复制代码
cd /usr/bin

可以看到mysql服务是红色的,并且一直在闪,正常的应该是绿色的。

我当前的mysql根目录是8.0.32,添加的时候写成了8.0.31,怪不得会报错。
解决办法:删除当前mysql的服务,重新添加。

先删除,命令如下:

java 复制代码
rm -rf /usr/bin/mysql

重新添加:

java 复制代码
ln -s /usr/local/mysql/mysql-8.0.32/bin/mysql /usr/bin

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

十一、修改密码
1、先使用前面初始化拿到的临时密码登录

java 复制代码
mysql -uroot -p

输入的密码是不显示的

2、切换到mysql数据库

切换mysql命令

java 复制代码
use mysql

如果切换mysql数据库时出现这样的错就直接修改密码:

查询用户表命令

java 复制代码
select Host, User from user;

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

注意:本人在此处出现了一个错误。

java 复制代码
mysql报错:You must reset your password using ALTER USER statement before executing this statement.

这是因为新安装mysql后,登录后,执行任何命令都会报错:

You must reset your password using ALTER USER statement before executing this statement.
【解决办法】

MySQL版本5.7.6版本以前用户可以使用如下命令:

java 复制代码
mysql> SET PASSWORD = PASSWORD('Admin2022!');  --此处后面跟随的是用户名一般是root

MySQL版本5.7.6版本开始的用户可以使用如下命令:

java 复制代码
mysql> ALTER USER USER() IDENTIFIED BY 'root';

【出现原因】

出现这种情况的原因:

MySQL版本5.6.6版本起,添加了password_expired功能,它允许设置用户的过期时间。这个特性已经添加到mysql.user数据表,但是它的默认值是"N",可以使用ALTER USER语句来修改这个值。

3、修改密码

修改密码的命令为:

java 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'

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

java 复制代码
flush privileges;

下面讲一下远程授权和防火墙开放端口

在服务器上登录MYSQL后,use mysql,依次执行如下两句SQL

第一步:更新域属性,'%'表示允许任意IP地址访问:

输入指令:

java 复制代码
update user set host='%' where user ='root';

第二步:执行以上语句之后再执行:

输入指令:

java 复制代码
FLUSH PRIVILEGES;

第三步:再执行授权语句:

输入指令:

java 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;

可以重启MYSQL

java 复制代码
service mysql restart

防火墙需要开放对应端口

首先,查询端口是否开启

java 复制代码
firewall-cmd --list-ports

如发现此处输出列表中没有3306端口,可以使用以下命名开放3306端口:

java 复制代码
sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload

此处接口使用Navacate连接数据库

相关推荐
luckywuxn24 分钟前
ant design pro 项目发布遇到登录页访问404
运维·服务器·网络
小小不董28 分钟前
Oracle RAC ‘Metrics Global Cache Blocks Lost‘告警解决处理
linux·服务器·数据库·oracle·dba
洒脱的六边形战士加辣1 小时前
玩转Docker(一):基本概念
运维·docker·容器
Tesseract_95271 小时前
【Linux】Linux基础概念
linux
李匠20241 小时前
C++负载均衡远程调用学习之 Dns-Route关系构建
运维·c++·学习·负载均衡
whoarethenext1 小时前
linux的信号量初识
linux·运维·前端·c/c++·信号量
sz66cm1 小时前
Linux基础 -- Generic Netlink 框架详解与开发实践
linux
带鱼吃猫2 小时前
Linux系统:进程程序替换以及相关exec接口
linux·运维·服务器
贰元12 小时前
微信聊天机器人搭建 教程/开发
运维·服务器·前端
自由鬼2 小时前
基于Windows系统分析IT生态建设
linux·windows·生态建设