安装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;

浙公网安备 33010602011771号