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;

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

相关推荐
Linux运维老纪2 分钟前
MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)
服务器·数据库·计算机网络·mysql·云计算·运维开发
厦00441 分钟前
【MySQL】MVCC详解, 图文并茂简单易懂
数据库·sql·mysql·mvcc·并发控制·undo日志
zhangphil2 小时前
Android adb shell GPU信息
android·adb
花生的酱2 小时前
MySQL主从复制
数据库·mysql
代码中の快捷键3 小时前
MySQL 中的Buffer Pool
数据库·mysql
豆是浪个3 小时前
Linux(Centos 7.6)命令详解:mkdir
linux·运维·centos
花生的酱4 小时前
mycat介绍与操作步骤
android·数据库·sql·mysql
acegi1357912 小时前
MySQL - 子查询和相关子查询详解
数据库·mysql
namelijink12 小时前
docker-compose部署下Fastapi中使用sqlalchemy和Alembic
adb·docker·fastapi
weixin_4383354013 小时前
【更新中】Mysql问题分析
数据库·mysql