CentOS 7 上安装 MySQL 8.0.40 (二进制安装)

要在 CentOS 7 上安装 MySQL 8.0.40,按照以下步骤操作:

下载安装包。

https://dev.mysql.com/downloads/mysql/

下载之前查看系统c++版本

解压安装包

首先,解压下载的 .tar.xz 安装包。

bash 复制代码
cd /path/to/your/downloads
tar -xvf mysql-8.0.40-linux-glibc2.28-x86_64.tar.xz

解压后,会得到一个 mysql-8.0.40-linux-glibc2.28-x86_64 目录。

移动到合适的位置

接下来,你可以将解压后的目录移动到你希望安装 MySQL 的位置,通常是 /usr/local

bash 复制代码
sudo mv mysql-8.0.40-linux-glibc2.28-x86_64 /usr/local/mysql

创建 MySQL 用户和组

为了安全性,MySQL 应该运行在专用的用户和组下。

bash 复制代码
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql

创建 MySQL 数据目录

接下来,创建数据存储目录,并给 MySQL 用户设置适当的权限。

bash 复制代码
sudo mkdir /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql

配置环境变量

为了方便使用 MySQL 命令,你需要将 MySQL 的 bin 目录添加到 PATH 环境变量中。编辑 /etc/profile 文件。

bash 复制代码
sudo vi /etc/profile

在文件末尾添加以下内容:

bash 复制代码
export PATH=$PATH:/usr/local/mysql/bin

保存并退出编辑器。然后执行以下命令使改动生效:

bash 复制代码
source /etc/profile

创建配置文件

bash 复制代码
touch /etc/my.cnf
bash 复制代码
[mysqld]                              
port=3306               
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/usr/local/mysql/data/mysql.sock                   
max_connect_errors=10                         
character-set-server=utf8mb4                          
default-storage-engine=INNODB                               
user=root
#skip-grant-tables  

[client]                                                     
port=3306                              
socket=/usr/local/mysql/data/mysql.sock                                                                
default-character-set=utf8mb4

备注:不要有空格,否则会找不到socket连接

初始化 MySQL 数据目录

使用 MySQL 自带的 mysqld 工具初始化数据目录:

bash 复制代码
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root

初始化成功后,会有一个临时密码

bash 复制代码
[root@localhost mysql]# ./bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root
2024-12-03T10:56:54.844764Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.40) initializing of server in progress as process 11446
2024-12-03T10:56:54.852440Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2024-12-03T10:56:55.144832Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2024-12-03T10:56:56.594319Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: FhN9Yk=/Cdus

删除 mysql/data目录即可重新初始化

创建 mysql.sock文件(重要,非常重要的一步)

bash 复制代码
cd  data/
touch mysql.sock

启动mysql 服务

bash 复制代码
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

查看mysql是否启动

bash 复制代码
执行命令  ps -ef | grep mysql

登录 mysql 数据库

bash 复制代码
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p

完成!

到此为止,你已经成功安装 MySQL 8.0.40。

常用命令(扩展)

bash 复制代码
# 初始化
sudo /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --console --user=root

#启动服务
sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &

#停止服务
sudo /usr/local/mysql/bin/mysqladmin -u root -p shutdown
#停止服务(二)
ps aux|grep mysql
kill <mysql有关的pid>

# 登录mysql
sudo /usr/local/mysql/bin/mysql --socket=/usr/local/mysql/data/mysql.sock -u root -p

创建账号并授权

bash 复制代码
# 进入mysql
use mysql

# 用如下语句查看MySQL当前加密方式
select host,user,plugin from user;

# 创建账号test01、密码test01, 设置密码插件模式mysql_native_password,并允许该用户从任何主机(即 %)进行连接
CREATE USER 'test01'@'%' IDENTIFIED WITH mysql_native_password BY 'test01';
# 如果你只希望该用户能从本地(localhost)连接,可以将 '%' 改为 'localhost':
CREATE USER 'test01'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test01';

# 授予权限。为  用户授予合适的权限。如果你希望该用户具有所有权限,可以使用以下命令:
GRANT ALL PRIVILEGES ON *.* TO 'test01'@'%' WITH GRANT OPTION;

忘记密码,找回

  1. kill mysql服务
  2. 进入/etc/my.cnf
  3. 添加 在 [mysqld] 下面,添加一行 skip-grant-tables
  4. 重启mysql:sudo /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf &
  5. 无密码,进入mysql。将登陆密码设置为空。将密码设置为空(此时还不能直接修改密码,必须先设置为空,否则会报错。 skip-grant-tables 模式下无法修改其他密码,只能修改为空 )
bash 复制代码
use mysql; (使用mysql数据表)
update user set authentication_string='' where user='root';(将密码置为空)
quit; (然后退出Mysql)
  1. kill mysql服务。 将/etc/my.cnf 添加的一行skip-grant-tables去掉, 再次启动。
  2. 再次无密码登录
  3. 更新密码,要使用mysql_native_password 插件模式,否则navicat可能链接不上
bash 复制代码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '1234';
FLUSH PRIVILEGES;

修改加密模式

bash 复制代码
update user set plugin='mysql_native_password' where user='root';

进入mysql,use mysql,直接update加密模式,退出来,原密码就无法登录了

在Mysql 8版本中,必须分两步来实现设置用户权限

在Mysql 8版本中,不能使用

bash 复制代码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'WITH GRANT OPTION;

这一行命令来设置用户权限,必须分两步来实现设置用户权限【先创建用户、在对该用户分配用户权限】,最后刷新权限

bash 复制代码
CREATE USER 'test2'@'%' IDENTIFIED WITH mysql_native_password BY 'test2';
GRANT ALL PRIVILEGES ON *.* TO 'test2'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

或者

bash 复制代码
CREATE USER 'test3'@'%' IDENTIFIED BY 'test3';
GRANT ALL PRIVILEGES ON *.* TO 'test3'@'%' WITH GRANT OPTION;
update user set plugin='mysql_native_password' where user='test3';
FLUSH PRIVILEGES;

然后外部就可以通过账户密码访问了。

相关推荐
Hansel_Zhang3 小时前
CentOS 7 docker部署jar包
linux·docker·centos
都要好好的O4 小时前
2.mysql 中一条更新语句的执行流程是怎样的呢?
数据库·mysql
zxguan5 小时前
MySQL 学习 之 数值计算精度问题
数据库·mysql·精度
付聪12105 小时前
MySQL覆盖索引
mysql
椛椛~5 小时前
六、文本搜索工具(grep)和正则表达式
数据库·mysql
ajsbxi7 小时前
【MySQL 进阶之路】SQL 性能分析
笔记·sql·mysql·性能优化
小龙.nice8 小时前
MySQL基础(语句)知识复习 (除索引和视图)
数据库·mysql
qq_10799104058 小时前
A120 PHP+MYSQL+LW+手机展示购物网站官方商城的设计与实现 源码+文档+配置 全套资料
mysql·智能手机·php
大数据魔法师8 小时前
Hadoop生态圈框架部署 伪集群版(六)- MySQL安装配置
hadoop·mysql
黄同学real8 小时前
MySQL 8.0 的主主复制(双向复制)
数据库·mysql