当前位置: 首页 > news >正文

Centos7离线安装Mysql8.0版本

文章目录

  • 安装前准备离线安装包
    • 前置依赖包
    • mysql安装包下载
      • MySQL 官网下载
      • 阿里云下载
  • 安装前置依赖
    • 卸载系统自带的 MariaDB(避免冲突)
    • 安装依赖
  • 安装Mysql
    • 创建Mysql用户和目录
    • 解压二进制包到部署目录
    • 配置 MySQL
    • 创建配置文件/etc/my.cnf
    • 设置环境变量:
    • 配置系统服务
    • 执行mysql命令提示"command not found"的问题
    • 登录 MySQL 并修改初始密码
    • 登录时输入密码报【1045】异常
      • 修改 root 密码(MySQL 8.0 需使用新密码插件):
      • (可选)允许远程登录:
    • 配置防火墙(可选)
    • 检查进程
    • 查看监听端口
  • 总结
    • 常见问题


本文是通过Centos7操作演示的

安装前准备离线安装包

前置依赖包

libaio和numactl

查看版本名:

cat /etc/centos-release

输出结果:CentOS Linux release 7.9.2009 (Core)

通过https://vault.centos.org/地址去下载:其中Centos版本和CPU架构根据需要选择

#示例如下
libaio-0.3.109-13.el7.x86_64.rpm
numactl-2.0.12-5.el7.x86_64.rpm
numactl-libs-2.0.12-5.el7.x86_64.rpm

在这里插入图片描述
在这里插入图片描述

mysql安装包下载

MySQL 官网下载

访问MySQL 官网,选择Linux - Generic,下载对应版本(如mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz)。

阿里云下载

下载Linux通用版本:linux-glibc
https://mirrors.aliyun.com/mysql
在这里插入图片描述

安装前置依赖

卸载系统自带的 MariaDB(避免冲突)

rpm -qa | grep mariadb
sudo rpm -e --nodeps 上述命令输出的包名

安装依赖

数据库安装必备‌:MySQL/Oracle 等依赖 libaio 异步 I/O 和 numactl 内存管理
‌高性能计算‌:NUMA 架构优化需 numactl 控制 CPU-内存绑定’
判断是否需要安装依赖:

# 校验安装,应显示 libaio 版本
rpm -qa | grep libaio    
# 应显示 numactl 版本(如 numactl-2.0.9)
rpm -qa | grep numactl

查询有值则说明依赖已安装,如果没有值则需要把对应的依赖安装下面步骤完成

cd 到上传依赖的目录上执行

# 安装 libaio
rpm -ivh libaio-*.rpm --nodeps --force   # 忽略依赖校验# 安装 numactl
rpm -ivh numactl-*.rpm --nodeps --force   # 忽略依赖校验# 校验安装,应显示 libaio 版本
rpm -qa | grep libaio    
# 应显示 numactl 版本(如 numactl-2.0.9)
rpm -qa | grep numactl   # 检查 NUMA
numactl --hardware 

安装Mysql

创建Mysql用户和目录

# 创建mysql用户组和用户
sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql# 创建安装目录和数据目录(可自定义路径)
sudo mkdir -p /usr/local/mysql
sudo mkdir -p /data/mysql
#将上述目录赋权R权限给mysql用户
sudo chown -R mysql:mysql /usr/local/mysql /data/mysql

解压二进制包到部署目录

#如果目录不存在则创建
mkdir -p  /usr/local/mysql/
# 解压安装包到安装目录
tar -xvf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz -C /usr/local/mysql/
# 进入安装目录
cd /usr/local/mysql# 初始化数据库(生成初始密码,记录在日志中)
# user=mysql(mysql操作linux时使用的用户), basedir=/usr/local/mysql(安装目录) datadir=/data/mysql(数据目录)
sudo bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
# 注意:初始化成功后,日志中会显示临时密码(如A temporary password is generated for root@localhost: xxxxx),需记录下来。# 启用SSL(可选,增强安全性)
sudo bin/mysql_ssl_rsa_setup --datadir=/data/mysql

配置 MySQL

创建配置文件/etc/my.cnf

sudo /etc/my.cnf

写入内容

[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql
socket = /tmp/mysql.sock
port = 3306
bind-address=0.0.0.0
character-set-server = utf8mb4
collation-server = utf8mb4_0900_ai_ci
log-error = /data/mysql/mysqld.log
pid-file = /data/mysql/mysqld.pid

设置环境变量:

#将环境变量写入到/etc/profile.d/mysql_env.sh
sudo echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile.d/mysql_env.sh
#环境变量生效
sudo source /etc/profile 

配置系统服务

#复制脚本到/etc/init.d/
sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
修改服务脚本中的路径(确保与实际安装路径一致):
sudo vi /etc/init.d/mysqld

#修改内容
basedir=/usr/local/mysql
datadir=/data/mysql

 # 添加服务
sudo chkconfig --add mysqld 
# 开机自启
sudo chkconfig mysqld on     
# 启动服务
sudo service mysqld start    
#验证服务状态
sudo service mysqld status  
#查看mysql版本
mysql --version

执行mysql命令提示"command not found"的问题

#系统默认查找路径/usr/bin下无mysql命令链接
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

登录 MySQL 并修改初始密码

使用临时密码登录:
mysql -u root -p

输入初始化时记录的临时密码

登录时输入密码报【1045】异常

修改/etc/my.cnf文件

#在mysqld,添加skip-grant-tables
skip-grant-tables

关闭并启动mysqld服务

service mysqld stop
service mysqld start

登录mysql

mysql -u root

修改密码

-- 切换到mysql数据库
use mysql;-- 更新密码(注意替换新密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';-- 刷新权限
FLUSH PRIVILEGES;-- 退出
exit;

修改/etc/my.cnf,注释掉跳过密码验证

#在mysqld,添加skip-grant-tables
skip-grant-tables

关闭并启动mysqld服务

service mysqld stop
service mysqld start

修改 root 密码(MySQL 8.0 需使用新密码插件):

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123';
FLUSH PRIVILEGES;

(可选)允许远程登录:

CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

配置防火墙(可选)

如果需要远程访问,开放 3306 端口:

sudo firewall-cmd --zone=public --add-port=3306/tcp --permanent
sudo firewall-cmd --reload
# 查看MySQL版本
mysql --version

检查进程

ps -ef | grep mysql

查看监听端口

netstat -tulpn | grep 3306

总结

常见问题

初始化失败:检查目录权限(确保 mysql 用户拥有/data/mysql权限),或清理数据目录(/data/mysql)后重新初始化。
登录报错 “Access denied”:确认临时密码正确,若遗忘可删除/data/mysql目录后重新初始化。
服务启动失败:查看日志/data/mysql/mysqld.log定位具体错误(如配置文件语法错误、端口被占用)。

# Mysql 离线安装
# 上传文件已完成之后的操作
# 因需要root权限,脚本需要 sudo mysql.sh
echo "开始mysql安装,前置依赖"
mariadb=`rpm -qa | grep mariadb`
#-z 是判断为空, -n判断不为空, "$"是防止变量未定义报错
if [ -z "$mariadb" ]; thenecho "mariadb已经卸载!"
elserpm -e  $mariadb --nodepsecho "卸载mariadb"
fi
# 安装 libaio
libaio=`rpm -qa | grep libaio`
if [ -n "$libaio" ]; thenrpm -e  $libaio --nodepsecho "卸载libaio"
fi
rpm -ivh libaio-*.rpm --nodeps --force   # 忽略依赖校验# 安装 numactl
numactl=`rpm -qa | grep numactl`
if [ -n "$numactl" ]; thenrpm -e  $numactl --nodepsecho "卸载libaio"
fi
rpm -ivh numactl-*.rpm --nodeps --force   # 忽略依赖校验# 校验安装,应显示 libaio 版本
rpm -qa | grep libaio    
# 应显示 numactl 版本(如 numactl-2.0.9)
rpm -qa | grep numactl   # 检查 NUMA
numactl --hardware #创建用户组和用户
mysql_group=mysql
mysql_name=msyql
if getent group $mysql_group >/dev/null; thenecho "$mysql_group,用户组已存在"
elsesudo groupadd "$mysql_group"echo "$mysql_group,用户组创建成功"
fiif id -u "$mysql_name" >/dev/null 2>&1; thenecho "$mysql_name用户存在"}
elsesudo useradd -g $mysql_group -s /bin/shell $mysql_nameecho "$mysql_name用户不存在"
fi#创建mysql安装目录
mysql_path=/opt/hadoop/mysql
mysql_data=/opt/hadoop/mysql/data#-r(可读)、-w(可写)、-x(可执行)、-s(非空文件)
#-f 文件, -d 目录, -e 文件或目录
if [ -e "$mysql_path" ]; thenrm -rf $mysql_pathecho "$mysql_path,已删除"
fi
sudo mkdir -p $mysql_path
echo "$mysql_path,创建目录成功!"if [ -e "$mysql_data" ]; thenrm -rf $mysql_dataecho "$mysql_data,目录已删除"
fi
sudo mkdir -p $mysql_data
echo "$mysql_data,创建目录成功!"#对用户添加可读权限
sudo chown -R $mysql_group:$mysql_name  $mysql_path # 解压安装包到安装目录
tar -xvf mysql-8.0.34-linux-glibc2.12-x86_64.tar.xz -C $mysql_path
# 进入安装目录
cd $mysql_path# 初始化数据库(生成初始密码,记录在日志中)
# user=mysql(mysql操作linux时使用的用户), basedir=/usr/local/mysql(安装目录) datadir=/data/mysql(数据目录)
sudo bin/mysqld --initialize --user=$mysql_name --basedir=$mysql_path --datadir=$mysql_data
# 注意:初始化成功后,日志中会显示临时密码(如A temporary password is generated for root@localhost: xxxxx),需记录下来。# 启用SSL(可选,增强安全性)
#bin/mysql_ssl_rsa_setup --datadir=$mysql_data# 创建配置文件 /etc/my.cnf
cat > /etc/my.cnf << EOF
[mysqld]
basedir=$mysql_path
datadir=$mysql_data
port = 3306
socket=/var/lib/mysql/mysql.sock
log-error=$myql_log/mysqld.log
pid-file=$myql_log/mysqld.pid
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
[client]
default-character-set=utf8mb4
EOF#将环境变量写入到/etc/profile.d/mysql_env.sh
sudo echo "export PATH=$PATH:$mysql_path/bin" >> /etc/profile.d/mysql_env.sh
#环境变量生效
sudo source /etc/profile #复制脚本到/etc/init.d/#basedir=/usr/local/mysql
#datadir=/data/mysql
sudo cp $mysql_path/support-files/mysql.server /etc/init.d/mysqld# 添加服务
sudo chkconfig --add mysqld 
# 开机自启
sudo chkconfig mysqld on     
# 启动服务
sudo service mysqld start    
#验证服务状态
sudo service mysqld status  #修改初始化密码
# 获取临时密码
TEMP_PASS=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
[ -z "$TEMP_PASS" ] && { echo "获取临时密码失败"; exit 1; } # 修改密码策略并设置新密码
NEW_PASS="123123"
echo "正在修改root密码..."
mysql --connect-expired-password -uroot -p"$TEMP_PASS" <<EOF
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '$NEW_PASS';
SET GLOBAL validate_password.policy=LOW;
SET GLOBAL validate_password.length=4;
FLUSH PRIVILEGES;
EOF # 创建测试用户
mysql -uroot -p"$NEW_PASS" <<EOF
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewPassword@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF# 创建测试用户
mysql -uroot -p"$NEW_PASS" <<EOF
CREATE USER 'test'@'%' IDENTIFIED BY 'Test1234';
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%';
FLUSH PRIVILEGES;
EOF # 防火墙配置
echo "配置防火墙..."
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
http://www.dtcms.com/a/315083.html

相关文章:

  • 政务云数智化转型:灵雀云打造核心技术支撑能力
  • HarmonyOS 多屏适配最佳实践:基于 ArkUI 的响应式 UI 方案
  • 在CentOS 7上安装配置MySQL 8.0完整指南
  • [Oracle] TO_NUMBER()函数
  • C 语言结构体与 Java 类的异同点深度解析
  • Hexo - 免费搭建个人博客07 - 添加右上角的“目录”
  • 《Python 实用项目与工具制作指南》· 2.4 pip
  • 流量见顶时代,知识付费 IP 的破局逻辑
  • 我的世界进阶模组开发教程——附魔(2)
  • 使用 IntelliJ IDEA + Spring JdbcTemplate 操作 MySQL 指南
  • 【无标题】文件IO与标准IO的区别
  • LeetCode 分类刷题:16. 最接近的三数之和
  • Vue 影院组件
  • BLIP 和 BLIP2 的对比
  • 如何实现人机协同与人工智能的深度协同发展?
  • 【龙芯99派新世界】2.buildroot使用,连接wifi
  • 英伟达Llama - Nemotron 253B:大模型训练范式的革新与展望
  • C++多线程同步:深入理解互斥量与事件机制
  • 情感AI在医疗领域的核心应用潜力与创新方向
  • 02324-离散数学-速记宝典
  • WSL安装Ubuntu与Docker环境,比VMware香
  • Sparse4D系列算法:迈向长时序稀疏化3D目标检测的新实践
  • Flutter开发 了解Scaffold
  • FinalShell 跳板机proxyjump使用
  • 105页PPT | 麦肯锡五年战略规划方法论精要
  • SRIO入门之官方例程仿真验证
  • 系统一个小时多次Full GC,导致系统线程停止运行,影响系统的性能,可靠性
  • 活动预告丨“百胜软件胜券AI全国巡讲”8月14日首站启幕,诚邀您共聚广州
  • 【清除pip缓存】Windows上AppData\Local\pip\cache内容
  • 【核心技术二】Uvicorn:高性能 ASGI 服务器