安装MySQL

环境准备

官网下载所需版本的二进制包

卸载旧的mysql和mariadb

# 停止 MySQL 服务(如果存在)
sudo systemctl stop mysqld

# 停止 MariaDB 服务(如果存在)
sudo systemctl stop mariadb

# 如果上述命令无效,可以尝试停止通用的 mysql 服务
sudo systemctl stop mysql
# 执行查询看是否存在已安装的包
rpm -qa | grep -i mysql 
rpm -qa | grep -i mariadb
# 查询有结果则卸载
# 1. 列出并卸载所有 MySQL 相关包
rpm -qa | grep -i mysql
# 将列出的包名依次执行卸载,--nodeps 参数可以忽略依赖关系强制卸载
sudo rpm -ev --nodeps <上一步列出的包名>

# 2. 列出并卸载所有 MariaDB 相关包
rpm -qa | grep -i mariadb
# 同样,将列出的包名依次执行卸载
sudo rpm -ev --nodeps <上一步列出的包名>

# 3. 为了防止遗漏,也可以使用 yum remove 进行兜底清理
sudo yum remove -y mysql-server mysql mariadb-server mariadb
# 1. 删除 MySQL/MariaDB 的数据目录
sudo rm -rf /var/lib/mysql

# 2. 删除配置文件
sudo rm -rf /etc/my.cnf
sudo rm -rf /etc/my.cnf.d

# 3. 删除日志文件
sudo rm -rf /var/log/mysqld.log
sudo rm -rf /var/log/mariadb

# 4. 删除其他可能的残留目录
sudo rm -rf /usr/lib64/mysql
sudo rm -rf /usr/share/mysql
sudo rm -rf /tmp/mysql*

添加MySQL用户

# 检查是否存在用户
cat /etc/passwd | grep mysql
# 删除 mysql 用户和组(如果存在可以选择删除重建或保留)
sudo userdel mysql
sudo groupdel mysql
useradd -M -s /sbin/nologin mysql

-m 表示不创建家目录
-s 表示不能用于登陆系统

部署

安装依赖包

各个系统所安装的依赖可能有所不同,这里以centos7为例,mysql的引起需要libaio运行库支持,不同版本所需的运行库也不同,这里直接安装开发包,一次解决所有运行库依赖,numactl依赖库则用于提高CPU性能,ncurses是兼容包应对一些版本不适配问题

# 安装依赖
yum install -y libaio-devel numactl ncurses
# 解压下载的二进制包
tar -xvf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
# 将解压后的文件夹更名
mv mysql-8.0.26-linux-glibc2.12-x86_64/ mysql
# 配置环境变量
sudo vim /etc/profile
# 末尾加上【MYSQL_HOME】
export MYSQL_HOME='/opt/module/mysql'
export PATH=${MYSQL_HOME}/bin:${PATH}
# 刷新配置文件让变量生效
source /etc/profile
# 检查是否生效(出现版本信息说明正确)
mysql -V
# 创建数据目录(这里创建在mysql目录下)
mkdir -p data/mysql/3306
# 给目录赋权限
chown -R mysql:mysql data
# 初始化Mysql数据库(进入mysql目录执行)
bin/mysqld --initialize-insecure --user=mysql --basedir=/opt/module/mysql --datadir=/opt/module
/mysql/data/mysql/3306
参数 含义 说明
bin/mysqld MySQL 服务器程序 MySQL 的核心守护进程
--initialize-insecure 不安全初始化 创建空数据库,不生成随机 root 密码(root 密码为空)
--user=mysql 指定运行用户 MySQL 进程将以 mysql 用户身份运行
--basedir 基础目录 MySQL 安装的根目录
--datadir 数据目录 数据库文件存储位置
# 编辑 my.cnf
[mysql]
socket=/tmp/mysql.sock

[mysqld]
user=mysql
basedir=/opt/module/mysql
datadir=/opt/module/mysql/data/mysql/3306
socket=/tmp/mysql.sock
# 创建 systemd 服务文件
cat > /etc/systemd/system/mysqld.service << 'EOF'
[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
Type=simple
ExecStart=/opt/module/mysql/bin/mysqld --defaults-file=/etc/my.cnf
ExecStop=/opt/module/mysql/bin/mysqladmin -u root shutdown
Restart=on-failure
RestartSec=10

# 超时设置
TimeoutStartSec=300
TimeoutStopSec=300

# 资源限制
LimitNOFILE=65535

# 环境变量
Environment="PATH=/opt/module/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"

[Install]
WantedBy=multi-user.target
EOF
# 加载 systemd
systemctl daemon-reload

# 启动 MySQL
systemctl start mysqld

# 查看状态(应该很快变成 active)
systemctl status mysqld

# 设置开机自启(可选)
systemctl enable mysqld

# 登录mysql
mysql

# 进入系统库
use mysql
 
# 查看用户信息(会发现root用户是没有密码的)
select user,host,plugin,authentication_string from user;

# 修改root密码
alter user 'root'@'localhost' identified by '123456';

# 创建远程登陆用户
create user 'root'@'%' identified by '123456';

# 给远程登录用户授予所有库的权限
grant all privileges on *.* to 'root'@'%';

# 给远程登陆用户授予管理员权限(可以给其他用户赋权)
grant all privileges on *.* to 'root'@'%' with grant option;

# 刷新配置
flush privileges;
posted @ 2026-05-26 16:03  allinone执着者  阅读(13)  评论(0)    收藏  举报