1.下载安装包
https://downloads.mysql.com/archives/community/
mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
tar -xvf mysql-5.7.44-1.el7.x86_64.rpm-bundle.tar
2.安装依赖
yum -y install perl
yum -y install net-tools
yum install numactl libaio libaio-devel -y
也可以离线安装这些依赖
rpm -ivh *.rpm --force --nodeps
3.安装
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpmrpm -ivh mysql-community-libs-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.44-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.44-1.el7.x86_64.rpm
4.修改数据存储目录和端口号
vim /etc/my.cnf
[mysqld]
port=3307
datadir=/data/mysql
chown -R mysql:mysql /data/mysql
chmod -R 755 /data/mysql
如果是数据迁移,那么执行如下:
mv /var/lib/mysql /data/mysql
5.启动
systemctl start mysqld
查看状态
systemctl status mysqld
6.启动失败
如果启动报了权限问题,无法访问数据目录,可能是selinux的问题
6.1. 临时禁用 SELinux
为了快速测试是否 SELinux 是问题的根源,可以暂时将 SELinux 设置为宽容模式(permissive),这样可以允许访问,但会记录违规操作:
setenforce 0
此命令将 SELinux 模式切换到宽容模式。然后,尝试重新启动 MySQL 服务:
systemctl start mysqld
6.2. 检查 MySQL 是否成功启动
systemctl status mysqld
6.3. 确认 SELinux 策略
如果 MySQL 成功启动,那么问题很可能与 SELinux 的策略有关。要确保 MySQL 访问 /data/mysql 目录的权限,可以使用以下命令:
chcon -R -t mysqld_db_t /data/mysql
如果有单个文件权限不对,也可以修改单个文件权限
chcon -t mysqld_db_t /data/mysql/ibtmp1
还不行的话执行下面6.5章节的命令
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql
然后再执行以下命令将端口 3307 添加到 SELinux 上下文中,使 MySQL 可以绑定到此端口:
semanage port -a -t mysqld_port_t -p tcp 3307
如果端口 3307 已经存在并且设置了其他标签(例如 unreserved_port_t),可以先删除旧的上下文:
semanage port -d -p tcp 3307
然后重新添加 mysqld_port_t 标签,然后再重启mysql,会成功
这个命令将会为 /data/mysql 目录及其内容设置合适的 SELinux 上下文。
6.4. 重新启用 SELinux
在进行上述步骤后, 可以将 SELinux 恢复到强制模式:
setenforce 1
检查 SELinux 审核日志
ausearch -m avc -ts recent | grep mysqld
6.5. 持久化 SELinux 修改
如果 MySQL 启动正常并且您需要保留 SELinux 设置,可以考虑创建一个持久化的策略,以确保即使在重启后也能应用该上下文。这可以通过 semanage 工具来实现,您可能需要先安装 policycoreutils-python(CentOS 7 中):
yum install policycoreutils-python
然后,运行以下命令来为 /data/mysql 目录设置上下文:
semanage fcontext -a -t mysqld_db_t "/data/mysql(/.*)?"
restorecon -Rv /data/mysql
7.登录成功,查看修改
cat /var/log/mysqld.log | grep password
2024-11-03T09:06:59.466166Z 1 [Note] A temporary password is generated for root@localhost: =q.v3#>wx1)U
密码是冒号后面的那一窜
=q.v3#>wx1)U
登录
mysql -u root -p --port=3307
设置密码最小长度策略
set global validate_password_length=6;
设置密码强度检查等级策略,0/LoW、1/MEDIUM、2/STRONG
set global validate_password_policy=0;
修改密码
set password for 'root'@'localhost' = password('zzybzb');
开启MySQL远程连接(%号即远程连接,IDENTIFIED BY后面跟的密码)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'zzybzb';
刷新,重新加载
flush privileges;