Linux 安装 MySQL 8.0
Linux 安装 MySQL 8.0
- 1-MySQL 下载
- 2-MySQL 安装
- 3-MySQL 连接
- 4-MySQL 问题
- 4.1-初始化失败
- 4.2-无法远程登录
- 4.3-用户授权错误
- 4.4-Navicat 连接错误
1-MySQL 下载
官方:
https://dev.mysql.com/downloads/mysql/
CentOS 可以选择 Red Hat 版本或者 Linux-Generic 通用版本。
网盘:
- 链接:https://pan.baidu.com/s/1ZteIZwyIzJPZyEpSppuGhQ
- 提取码:1104
2-MySQL 安装
a、查看内核版本
cat /etc/redhat-release
b、新建用户、用户组
# 创建用户 用户组
useradd mysql
# 设置用户密码
passwd mysql
c、解压 MySQL 免编译包
tar -xvf /data/targz/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz -C /data/opt/
d、重命名 MySQL 文件夹
mv /data/opt/mysql-8.0.19-linux-glibc2.12-x86_64/ /data/opt/mysql-8.0.19_3306
e、新建 MySQL 文件夹软连接
ln -s /data/opt/mysql-8.0.19_3306/ /usr/local/mysql-8.0.19_3306
f、新建 MySQL 配置文件 my.cnf
my.cnf 配置文件生效优先级(由高到低):
- MySQL 启动时指定的具体参数。
- MySQL 启动时指定位置的配置文件。
- MySQL 数据目录下的 my.cnf 文件。
- MySQL 读取 /etc/my.cnf 文件。
- MySQL 默认的参数。
/data/opt/mysql-8.0.19_3306/my.cnf
# 客户端连接设置
[client]
# 连接 MySQL 使用的端口
port = 3306
# 连接 MySQL 使用的套接字文件
socket = /data/data/mysql/8.0.19_3306/mysql.sock
# 设置字符集
default-character-set = utf8mb4
# 服务端设置
[mysqld]
# 服务id(可高可用时区分)
server_id = 01
# 监听端口
port = 3306
# 启动用户
user = mysql
# 数据库默认编码(5.1以下 default-character-set)
character_set_server = utf8mb4
# 数据库默认比对规则、排序规则
collation_server = utf8mb4_bin
# 该目录为根目录(安装目录)
basedir = /data/opt/mysql-8.0.19_3306
# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/8.0.19_3306/data
# 数据库存放临时文件的目录(创建文件夹)
tmpdir = /data/data/mysql/8.0.19_3306/tmp
# 指定客户端程序与数据库间通讯的套接字文件
socket = /data/data/mysql/8.0.19_3306/mysql.sock
explicit_defaults_for_timestamp = true
[mysqld_safe]
# 数据库错误日志(创建文件夹)
log-error = /data/data/mysql/8.0.19_3306/log/mysqld.log
# 数据库启动后进程文件位置
pid-file = /data/data/mysql/8.0.19_3306/3306.pid
g、设置 MySQL 安装文件权限
# 设置所属用户、用户组
chown -R mysql:mysql /data/opt/mysql-8.0.19_3306/
# 设置文件权限
chmod -R 755 /data/opt/mysql-8.0.19_3306/
h、新建 MySQL 运行数据文件夹
mkdir -p /data/data/mysql/8.0.19_3306/data
mkdir -p /data/data/mysql/8.0.19_3306/log
mkdir -p /data/data/mysql/8.0.19_3306/tmp
i、设置 MySQL 运行数据文件夹权限
chown -R mysql:mysql /data/data/mysql/8.0.19_3306/
chmod -R 755 /data/data/mysql/8.0.19_3306/
j、初始化 MySQL
MySQL 5.7.2 及以上版本与以前版本不同,很多资料上使用命令./scripts/mysql_install_db,而在 MySQL 5.7.2 中 mysql_install_db 的指令在 bin 目录下,官网说明使用 mysqld —initialize 进行初始化。
# 切换 mysql 用户
su mysql
# 使用 /etc/my.cnf 配置文件(默认)初始化
/data/opt/mysql-8.0.19_3306/bin/mysqld --initialize
# 指定配置文件初始化(可启动多个数据库)
/data/opt/mysql-8.0.19_3306/bin/mysqld --defaults-file=/data/opt/mysql-8.0.19_3306/my.cnf --initialize
记住临时密码,登录 MySQL 使用:
A temporary password is generated for root@localhost: BFKs/e1shO6x
k、启动 MySQL
MySQL mysqld mysqld_safe mysql.server mysqld_multi 启动区别
使用 /etc/my.cnf 配置文件(默认)
/data/opt/mysql-8.0.19_3306/bin/mysqld
指定配置文件初始化,启动时仍需指定
/data/opt/mysql-8.0.19_3306/bin/mysqld —defaults-file=/data/opt/mysql-8.0.19_3306/my.cnf
l、查看 MySQL 进程
ps -ef|grep mysql-8.0.19
3-MySQL 连接
a、登录 MySQL
临时密码登录:A temporary password is generated for root@localhost: BFKs/e1shO6x
# 使用 /etc/my.cnf 配置文件(默认)初始化
# /data/opt/mysql-8.0.19_3306/bin/mysql -u root -p
# 指定配置文件初始化(可启动多个数据库)
/data/opt/mysql-8.0.19_3306/bin/mysql --defaults-file=/data/opt/mysql-8.0.19_3306/my.cnf -u root -p
b、修改 MySQL 密码
# 格式:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
4-MySQL 问题
4.1-初始化失败
–initialize specified but the data directory has files in it. Aborting:
删除 /data/data/mysql/8.0.19_3306/data 文件夹下所有文件
# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/8.0.19_3306/data
4.2-无法远程登录
客户端无法连接到 MySQL 服务器(网络不通)。
a、MySQL 是否启动成功
查看 MySQL 进程
ps -ef|grep mysql-8.0.19
登录 MySQL
/data/opt/mysql-8.0.19_3306/bin/mysql --defaults-file=/data/opt/mysql-8.0.19_3306/my.cnf -u root -p
b、MySQL 是否占用 3306 端口yum install -y net-tools
netstat -lnp|grep 3306
c、客户端是否 ping 通服务器
d、客户端是否可连接 ip:port
Windows 开启 telnet 服务
telnet 192.168.31.117:3306
e、Linux 关闭防火墙或开放端口
关闭防火墙
# 防火墙状态
firewall-cmd --state
# 停止 firewall
systemctl stop firewalld.service
# 禁止 firewall 开机启动
systemctl disable firewalld.service
开放端口
# 查看已开放端口
firewall-cmd --list-ports
# 开启端口:--zone #作用域 --add-port=80/tcp #添加端口(端口/通讯协议) --permanent #永久生效(无此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent
# 关闭 selinux:将 etc/selinux/config 文件中 SELINUX=enforcing 改为 SELINUX=disabled
vi /etc/selinux/config
f、MySQL 再次远程登录
客户端连接 MySQL 服务器被拒绝(网络通,被拒绝)。
g、授权用户远程登录
MySQL 命令 创建数据库 添加用户 用户授权
MySQL 命令行模式登录
/data/opt/mysql-8.0.19_3306/bin/mysql —defaults-file=/data/opt/mysql-8.0.19_3306/my.cnf -u root -p
mysql db 中 user 表存储了用户信息
use mysql
root 用户的 host 显示 localhost,只支持服务器访问,不支持远程访问
select host, user, authentication_string, plugin from user;
# 创建远程登录用户 密码
CREATE USER 'root'@'%' IDENTIFIED BY '123456';
# 用户登录加密规则修改为 mysql_native_password*
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 授予 root 用户远程访问权限 GRANT ALL(所有权限) %(通配所有 host,可访问远程)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# MySQL 权限放在 cache(grant 表)中,必须重新重新加载
flush privileges;
# root 用户的 host 显示 %,支持远程访问
select host, user, authentication_string, plugin from user;
h、MySQL 远程登录成功
4.3-用户授权错误
- MySQL 8.0 用户授权错误
4.4-Navicat 连接错误
MySQL 8.0 版本与 MySQL 5.0 版本加密规则不一致,当前可视化工具只支持旧的加密方式,解决方法:
- 升级 Navicat 驱动。
MySQL 修改加密规则为 mysql_native_password。
# 修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
# 修改 root 用户密码
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
flush privileges;
还没有评论,来说两句吧...