MySQL 安装包分免安装版和安装版,这里使用安装版。
5.7 版本注意点:
Linux 软件安装目录通常为这几个
- /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
- /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
- /opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏)
本次安装在 /opt/mysql 目录
#进入 /opt 目录
cd /opt
#新建 mysql 目录
mkdir mysql
2. 下载
2.1 wget 下载
cd mysql #进入 mysql 目录
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
wget 用法:
wget 下载链接
说明:wget 默认下载位置为当前目录
2.2 离线下载
访问 MySQL 社区版下载页,选择系统和版本后下载到本地,然后 ftp 传输到 linux
ftp 操作不在此详述。
3. 安装
3.1 解 .tar 包
tar -xvf mysql-5.7.37-1.el7.x86_64.rpm-bundle.tar
.tar
文件只是一个包,.tar.gz
文件才是压缩包,所以参数不用-zxvf
tar 压缩或者解压包,也可只打包不压缩
-z
调用 gzip 或 gunzip 进行压缩,解压缩。-x
解包 .tar 文件-v
显示详情信息-f
指定处理的包-c
产生 .tar 文件
3.2 卸载自带数据库
centos7 自带的类 mysql 数据库是 mariadb,会跟 mysql 冲突,要先删除。
rpm -qa|grep mariadb #查询 mariadb 相关安装包
rpm -e --nodeps mariadb-libs... #删除 mariadb 相关安装包
rpm 包管理工具,类似 npm
-q 包名
;查询已经安装的 rpm 包-qa
查询所有已安装的 rpm 包| 管道符
命令 | 命令
:将左边命令的结果传递给右边命令处理grep 过滤查询
grep 关键字
3.3 安装 rpm 包
rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.37-1.el7.x86_64.rpm
rpm
-i
install 安装-v
verbose 提示-h
hash 进度条
3.4 启动 MySQL 服务
#实际执行的命令是 /bin/systemctl start mysqld.service
service mysqld start
初次安装 Mysql 会自动给 root 用户设置随机密码,可查看日志查询当前密码。
grep "password" /var/log/mysqld.log #从日志文件中查询 password 关键字
3.5 修改密码
利用随机密码登录 MySQL。
mysql -u root -p
MySQL 密码等级:
- 0 or low
- 只要求长度(8位)
- 1 or medium (默认等级)
- 要求:长度、数字、大小写、特殊字符
- 2 or strong
- 要求:长度、数字、大小写、特殊字符、字典文件
个人使用为了方便记忆可修改密码等级为低,生产环境得使用高强度密码。
#设置密码等级为0
set global validate_password_policy=0;
#修改密码
set password for 'root'@'localhost'=password('root123456');
#刷新配置
flush privileges;
修改完毕,退出后就可用新密码登录了。
若查询日志未找到随机密码,无法登录 MySQL,可修改 my.cnf 配置文件登录。
修改 MySQL 5.7 登录密码
4. 开启远程访问
4.1 原理
MySQL自带的数据库 mysql 库,里面的 user 表存放了用户的所有信息,其中 host 字段表示允许该用户登录 MySQL 的主机地址。
host 默认为 localhost,所以只能本地登录。现在只需将 host 更改为允许远程登录的主机地址即可,或者修改为%
,即允许所有 IP 访问 MySQL,生产环境严禁此操作。
注意:Linux 防火墙可能没有开启 3306 端口,需要手动开启。若是云服务器,除了防火墙,还需查看服务器安全组策略中 MySQL 端口是否放行。
4.2 修改 host
#打开数据库
use mysql;
#查看root用户的host,默认为localhost
select user,host from user where user = 'root';
#修改host
update user set host = '%' where user = 'root';
#刷新配置
flush privileges;
4.3 重启 MySQL
service mysqld restart
4.4 防火墙端口放行
# 查看防火墙开放端口
firewall-cmd --list-ports
# 为防火墙添加 3306 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重新加载防火墙配置
firewall-cmd --reload
4.5 MySQL 8.0 修改密码加密方式
5.7 版本防火墙端口放行后,应该就能远程访问了。而 8.0 版本因为加密方式由 MySQL 原生加密改为SHA2
,客户端可能提示:does not support authentication protocol,不支持此身份认证协议。
- 5.0 版本:plugin = mysql-native-password
- 8.0 版本:plugin = cacheing_sha2_password
```bash
查看 root 用户的密码加密方式
select user,plugin from user where user = ‘root’; # cacheing_sha2_password
修改 root 用户密码加密方式
alter user ‘root’@’%’ identified with mysql_native_password by ‘密码’;
测试远程连接是否正常。
<a name="zfplp"></a>
## 4.6 新建用户开启远程访问
修改 user 表的 host 字段是正儿八经的配置访问 IP,但我们可以不修改,直接重新新建一个账号,新建的时候直接就给他配置好 host 值为远程访问的 IP。
新建的账号虽然可以远程访问,但没有任何权限,无法操作数据库,所以还需要分配权限,可以按需分配权限,也可以授予全部权限。授予全部权限相当于新建了一个 root 账号。
```bash
# 添加用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
CREATE USER 'jack'@'%' IDENTIFIED BY 'root12345678';
# 查看权限
SHOW GRANTS FOR 'jack'@'%';
# 授权:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
GRANT ALL ON *.* TO 'jack'@'%'; # 全部授权
GRANT select,update ON *.* TO 'jack'@'%'; # 部分授权
# 简洁写法,授权不存在的用户,会自动完成用户新建的过程
GRANT ALL ON *.* TO 'John'@'%' IDENTIFIED BY '密码';
此方法算是取巧,多出来了新的用户,所以生产环境不建议此操作。