MySQL 安装包分免安装版和安装版,这里使用安装版。

5.7 版本注意点:

  • 密码需要8位,包含数字和字母
  • user 表的密码字段为authentication_string,5.6 版本为password

    1. 安装路径

Linux 软件安装目录通常为这几个

  • /usr:系统级的目录,可以理解为C:/Windows/,/usr/lib理解为C:/Windows/System32。
  • /usr/local:用户级的程序目录,可以理解为C:/Progrem Files/。用户自己编译的软件默认会安装到这个目录下。
  • /opt:用户级的程序目录,可以理解为D:/Software,opt有可选的意思,这里可以用于放置第三方大型软件(或游戏)

本次安装在 /opt/mysql 目录

  1. #进入 /opt 目录
  2. cd /opt
  3. #新建 mysql 目录
  4. mkdir mysql

2. 下载

2.1 wget 下载

  1. cd mysql #进入 mysql 目录
  2. 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 包

  1. 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 冲突,要先删除。

  1. rpm -qa|grep mariadb #查询 mariadb 相关安装包
  2. rpm -e --nodeps mariadb-libs... #删除 mariadb 相关安装包

rpm 包管理工具,类似 npm

  • -q 包名;查询已经安装的 rpm 包
  • -qa 查询所有已安装的 rpm 包

| 管道符

  • 命令 | 命令:将左边命令的结果传递给右边命令处理

grep 过滤查询

  • grep 关键字

3.3 安装 rpm 包

  1. rpm -ivh mysql-community-common-5.7.37-1.el7.x86_64.rpm
  2. rpm -ivh mysql-community-libs-5.7.37-1.el7.x86_64.rpm
  3. rpm -ivh mysql-community-client-5.7.37-1.el7.x86_64.rpm
  4. rpm -ivh mysql-community-server-5.7.37-1.el7.x86_64.rpm

rpm

  • -i install 安装
  • -v verbose 提示
  • -h hash 进度条

3.4 启动 MySQL 服务

  1. #实际执行的命令是 /bin/systemctl start mysqld.service
  2. service mysqld start

初次安装 Mysql 会自动给 root 用户设置随机密码,可查看日志查询当前密码。

  1. grep "password" /var/log/mysqld.log #从日志文件中查询 password 关键字

3.5 修改密码

利用随机密码登录 MySQL。

  1. mysql -u root -p

MySQL 密码等级:

  • 0 or low
    • 只要求长度(8位)
  • 1 or medium (默认等级)
    • 要求:长度、数字、大小写、特殊字符
  • 2 or strong
    • 要求:长度、数字、大小写、特殊字符、字典文件

个人使用为了方便记忆可修改密码等级为低,生产环境得使用高强度密码。

  1. #设置密码等级为0
  2. set global validate_password_policy=0;
  3. #修改密码
  4. set password for 'root'@'localhost'=password('root123456');
  5. #刷新配置
  6. flush privileges;

修改完毕,退出后就可用新密码登录了。

若查询日志未找到随机密码,无法登录 MySQL,可修改 my.cnf 配置文件登录。
修改 MySQL 5.7 登录密码

4. 开启远程访问

默认情况下 MySQL 只允许本地连接,不允许远程连接。

4.1 原理

MySQL自带的数据库 mysql 库,里面的 user 表存放了用户的所有信息,其中 host 字段表示允许该用户登录 MySQL 的主机地址。

host 默认为 localhost,所以只能本地登录。现在只需将 host 更改为允许远程登录的主机地址即可,或者修改为%,即允许所有 IP 访问 MySQL,生产环境严禁此操作。

注意:Linux 防火墙可能没有开启 3306 端口,需要手动开启。若是云服务器,除了防火墙,还需查看服务器安全组策略中 MySQL 端口是否放行。

4.2 修改 host

  1. #打开数据库
  2. use mysql;
  3. #查看root用户的host,默认为localhost
  4. select user,host from user where user = 'root';
  5. #修改host
  6. update user set host = '%' where user = 'root';
  7. #刷新配置
  8. flush privileges;

4.3 重启 MySQL

  1. service mysqld restart

4.4 防火墙端口放行

  1. # 查看防火墙开放端口
  2. firewall-cmd --list-ports
  3. # 为防火墙添加 3306 端口
  4. firewall-cmd --zone=public --add-port=3306/tcp --permanent
  5. # 重新加载防火墙配置
  6. 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 ‘密码’;

  1. 测试远程连接是否正常。
  2. <a name="zfplp"></a>
  3. ## 4.6 新建用户开启远程访问
  4. 修改 user 表的 host 字段是正儿八经的配置访问 IP,但我们可以不修改,直接重新新建一个账号,新建的时候直接就给他配置好 host 值为远程访问的 IP
  5. 新建的账号虽然可以远程访问,但没有任何权限,无法操作数据库,所以还需要分配权限,可以按需分配权限,也可以授予全部权限。授予全部权限相当于新建了一个 root 账号。
  6. ```bash
  7. # 添加用户:CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
  8. CREATE USER 'jack'@'%' IDENTIFIED BY 'root12345678';
  9. # 查看权限
  10. SHOW GRANTS FOR 'jack'@'%';
  11. # 授权:grant 权限列表 on 数据库名.表名 to '用户名'@'主机名';
  12. GRANT ALL ON *.* TO 'jack'@'%'; # 全部授权
  13. GRANT select,update ON *.* TO 'jack'@'%'; # 部分授权
  14. # 简洁写法,授权不存在的用户,会自动完成用户新建的过程
  15. GRANT ALL ON *.* TO 'John'@'%' IDENTIFIED BY '密码';

此方法算是取巧,多出来了新的用户,所以生产环境不建议此操作。