Linux安装MySQL5.7

427 阅读4分钟

环境

CentOS 7.6 64bitmysql-5.7.37-linux-glibc2.12-x86_64.tar.gz

下载

dev.mysql.com/downloads/m… image-20220213231411522.png

安装

解压

本例的安装目录位置:/opt/mysql-5.7
解压在opt目录下:tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /opt
更改文件夹名称:mv mysql-5.7.37-linux-glibc2.12-x86_64/ mysql-5.7

创建mysql独立的用户组和用户

# 先检查当前系统是否存在待创建的用户和用户组,没有则报错:groups: mysql: no such user
groups mysql
# 新增用户组
groupadd mysql
# 新增用户并指定所属用户组
useradd -r mysql -g mysql

# 说明:
#或:groupadd mysql && useradd -r -g mysql mysql
# -r		建立系统帐号。
# -g<群组>  指定用户所属的群组。

创建数据目录并赋予权限

# 创建目录,数据目录指定在其他地方
mkdir -p /data/mysql
# 赋予权限
chown mysql:mysql -R /data/mysql

# 说明:
# -p	递归创建
# -R	对指定与子目录进行相同的拥有者变更(即以递回的方式逐个变更)

配置my.cnf

vim /etc/my.cnf,一定要此处创建,此坑亲踩,之前指定在安装目录下,启动时报错:Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe),原因可能是因为etc目录下已经存在了此配置文件,且配置文件的参数指定了其他路径,没去试删除之类的其他方法,有兴趣可以自己试试其他方式解决,此处为了防止又会出现该配置文件,直接覆盖处理

/etc/my.cnf 中的默认配置

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

覆盖上述的配置

[mysqld]
# 访问地址,此处为允许所有ip访问
bind-address=0.0.0.0
port=3306
user=mysql
basedir=/opt/mysql-5.7
datadir=/data/mysql
socket=/tmp/mysql.sock
log-error=/data/mysql/mysql.err
pid-file=/data/mysql/mysql.pid
# character config
character_set_server=utf8mb4
symbolic-links=0
explicit_defaults_for_timestamp=true

初始化数据库

进入安装目录的bin目录:cd /opt/mysql-5.7/bin

初始化

# --defaults-file 也指定为 etc 目录下的配置文件
./mysqld --defaults-file=/etc/my.cnf --basedir=/opt/mysql-5.7/ --datadir=/data/mysql/ --user=mysql --initialize

查看密码

cat /data/mysql/mysql.err image-20220214223909079.png

启动MySQL

配置系统启动后服务自启:将 mysql.server 脚本放置到 /etc/init.d/mysql 中,执行命令 cp /opt/mysql-5.7/support-files/mysql.server /etc/init.d/mysql

启动服务

# 启动MySQL服务
service mysql start
# 根据服务名称查看进程服务
ps -ef|grep mysql
# 根据端口查询进程服务
netstat -tunlp|grep 3306

image-20220214230310813.png

修改root默认的随机密码

# 若不想跳转bin目录,可将命令链接至系统命令默认查找执行目录
ln -s /opt/mysql-5.7/bin/mysql /usr/bin
# 跳转MySQL安装目录的bin目录下,指定如下命令,然后输入之前的随机密码,此处为:j-+5-%aDo;nh
./mysql -u root -p
# 执行如下SQL:
# 1、设置root密码
SET PASSWORD = PASSWORD('123456');
# 2、设置可访问的host地址,此处为本地访问,设置为%失败??
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
# 3、刷新权限
FLUSH PRIVILEGES;
# 4、更新root的外部可访问地址,若已不在控制台则使用./mysql -u root -p重新进入,密码为123456
# 访问mysql库
use mysql
# 设置root能让任何host访问
update user set host = '%' where user = 'root';
# 刷新权限
FLUSH PRIVILEGES;

# 后续还需修改密码,则此处提供一种方法步骤如下:
# 进入控制台
./mysql -u root -p
# 设置密码
SET PASSWORD = PASSWORD('新密码');
# 刷新权限
FLUSH PRIVILEGES;

创建非root用户

# 进入控制台
./mysql -u root -p
# 访问mysql库
use mysql

# 创建新用户all,设置为所有host可访问,密码为all
CREATE USER 'all'@'%' IDENTIFIED WITH mysql_native_password BY 'all';
# 修改all用户的密码
ALTER USER 'all'@'%' IDENTIFIED WITH mysql_native_password BY 'all123';

# 授权远程数据库:
# 1、授权所有权限
GRANT ALL PRIVILEGES ON *.* TO 'all'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
# 2、授权基本的查询修改权限,按需求设置,语法[GRANT privileges ON databasename.tablename TO 'username'@'host'],赋所有权限使用ALL
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER ON *.* TO 'all' @'%';

# 所有用户、权限相关操作结束后,都须刷新权限,否则无效
FLUSH PRIVILEGES;

本机测试连接

image-20220214232736080.png

云服务器开放防火墙

image-20220214231836971.png

服务内防火墙控制

使用的是firewall防火墙,可参考本人博客: juejin.cn/post/704195…

  • 查看状态 systemctl status firewalldactive 表示启动、inactive 表示关闭
  • 开放3306端口 firewall-cmd --permanent --add-port=3306/tcp--permanent 表示设置为持久,--add-port 表示添加的端口(格式为:端口/通讯协议)
  • 移除3306端口 firewall-cmd --permanent --remove-port=3306/tcp
  • 更新防火墙规则 firewall-cmd --reload,开放端口后需要更新规则,否则不生效

参考链接

MySQL多版本安装
MySQL 5.7 安装
安装MySQL时创建用户和用户组的作用
MySQL配置远程访问说明
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)