Administrator
发布于 2025-10-15 / 18 阅读
0
0

二进制部署单节点mysql

#为了项目统一管理,这里部署到/data下

1,环境准备

# 检查系统是否已安装MySQL相关包,如有则卸载
rpm -qa | grep mysql
rpm -qa | grep mariadb
yum remove -y mysql* mariadb*

#安装依赖
yum install -y libaio perl   
perl 运行Perl脚本时需要
libaio 异步管理

2,创建mysql用户

# 创建MySQL用户和组
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql  #不让账号进行登录

3,解压二进制包

tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz -C /data/
mv mysql-5.7.36-linux-glibc2.12-x86_64 mysql

4,创建目录并授权

mkdir -p /data/mysql/{data,log,run}
chown -R mysql:mysql /data/mysql   #注意这一步,至关重要

5,编辑mysql配置文件:/etc/my.cnf

#这里提供基础配置,后续根据需求自定义即可
cat > /etc/my.cnf <<'EOF'
[mysqld]
# 基础路径
basedir=/data/mysql
datadir=/data/mysql/data
socket=/tmp/mysql.sock
pid-file=/data/mysql/data/mysqld.pid

# 网络
port=3306
bind-address=0.0.0.0

# 日志
log-error=/data/mysql/log/mysqld.log
log-bin=mysql-bin
binlog-format=ROW
server_id=1
expire_logs_days=5

# 字符集
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci

[client]
socket=/tmp/mysql.sock
default-character-set=utf8mb4
EOF

6,初始化mysql

sudo -u mysql bin/mysqld \
  --initialize \
  --user=mysql \
  --basedir=/data/mysql \
  --datadir=/data/mysql/data

#在安装目录下操作

初始化完成后,如果没有报错,使用一下命令,查看初始化密码:
grep 'temporary password' /data/mysql/log/mysqld.log

7,创建mysql.service,使用systemctl管理mysql

[root@localhost mysql]# cd support-files/
[root@localhost support-files]# cp mysql.server /etc/init.d/mysqld
[root@localhost support-files]# vi /etc/init.d/mysqld
[root@localhost support-files]# pwd
/data/mysql/support-files

#注解:
support-files是 MySQL 二进制安装包自带的 “辅助工具目录”,里面存放了管理 MySQL 的实用脚本,核心就是mysql.server
/etc/init.d/是 Linux 系统存放传统服务管理脚本的标准目录(比如nginx、redis的服务脚本也会放在这),系统的service命令(如service mysqld start)会默认从这个目录查找服务脚本

vi /etc/init.d/mysqld这一步操作时修改文件的一下内容,指向mysql的安装目录和数据目录,默认内容为空,补齐即可

修改完成后,创建mysql.service,加入系统管理

cat > /etc/systemd/system/mysql.service <<'EOF'
[Unit]
Description=MySQL Server
After=network.target

[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecStop=/etc/init.d/mysqld stop
ExecReload=/etc/init.d/mysqld restart
User=mysql
Group=mysql
Restart=on-failure
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

#这里有多种方法,这里仅展示一种
启动命令
systemctl daemon-reload 是 重新加载 systemd 服务配置的核心命令,作用是让 systemd 识别并应用新修改或新增的服务配置文件
systemctl start mysql  #这里的mysql取决于你/etc/systemd/system/mysql.service的名字,如果是mysqld.service,那么就是systemctl start mysqld
systemctl enable mysql #把mysql加入开机自启,避免主机重启后mysql不启动

8,登录并修改初始化密码

#mysql5.7默认使用初始化密码登陆后,必须修改密码才能进行其他操作


至此,mysql5.7.36部署完成。

问题及解决办法:

1,在其他目录下执行mysql提示:-bash MySQL command not found

二进制部署,不会自动将 bin 目录加入系统 PATH 环境变量,所以系统找不到 mysql、mysqld、mysqld_safe 等命令

##方便起见,直接新增全局环境变量
vi /etc/profile
#在文件末尾新增:
export PATH=/data/mysql/bin:$PATH
#保存并退出,
source /etc/profile
#重新加载配置

2,报错/etc/init.d/mysqld没权限

1,确保mysqld是755权限
2,编辑可能是system使用mysql身份执行时,脚本因权限问题被拒绝,修改/etc/init.d/mysql/service,注释user、group两行然后重新执行即可

3,密码过期,提示Your password has expired. To log in you must change it using a client that supports expired passwords.

# 1. 停止服务
systemctl stop mysqld

# 2. 安全模式启动
mysqld_safe --skip-grant-tables --skip-networking &
3,mysql -uroot 登录mysql,这里不需要密码

UPDATE user 
SET authentication_string = PASSWORD('newpasswd123'),
    password_expired = 'N'
WHERE User = 'root' AND Host = 'localhost';

FLUSH PRIVILEGES;

##解释:
mysql5.7中,password_expired如果显示为Y而不是N,则代表密码过期


评论