#为了项目统一管理,这里部署到/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
EOF6,初始化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,则代表密码过期