关于MySQL的版本选择:5.7最多,但8.0是未来~

1、Windows下MySQL安装

待迁移,todo…

2、Linux下MySQL的安装

2.1 安装前说明

todo…

2.2 MySQL的Linux安装

1、MySQL版本说明

  • MySQL Community Server 社区版本,开源免费,自由下载,但不提供官方技术支持,适用于 大多数普通用户;
  • MySQL Enterprise Edition 企业版本,需付费,不能在线下载,可以试用30天;提供了更多的 功能和更完备的技术支持,更适合于对数据库的功能和可靠性要求较高的企业客户;
  • MySQL Cluster 集群版,开源免费;用于架设集群服务器,可将几个MySQL Server封装成一个 Server;需要在社区版或企业版的基础上使用;
  • MySQL Cluster CGE 高级集群版,需付费;

2、下载MySQL指定版本

下载地址:https://www.mysql.com/downloads/
1、选择社区版,点击 MySQL Community Server 进行下载:https://dev.mysql.com/downloads/mysql/
2、选择适合的版本,这里选择红帽,x86架构64为的Linux操作系统
image.png

3、CentOS7下检查MySQL依赖

3.1 检查/tmp临时目录权限

由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限;执行

  1. $ chmod -R 777 /tmp

3.2 安装前,检查依赖

  1. $ rpm -qa|grep libaio
  2. $ rpm -qa|grep net-tools

如果存在libaio包,以及net-tools包,则会按照如下显示:
image.png
如果不存在需要到centos安装盘里进行rpm安装;安装linux如果带图形化界面,这些都是安装好的;

4、CentOS7下MySQL安装过程

4.1 执行安装脚本

将下载的安装包解压后,只需要将如下依赖复制上传到Linux主机上的 /opt 目录下,之后,按照顺序执行如下命令(必须按照先后顺序,不信你试试/(ㄒoㄒ)/~~)

  1. $ rpm -ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
  2. $ rpm -ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
  3. $ rpm -ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
  4. $ rpm -ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
  5. $ rpm -ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm

在执行第三条语句时,如果有如下报错信息:
image.png
一个命令:yum remove mysql-libs解决,清除之前安装过的依赖即可;然后重新执行第三条报错的,往后继续执行,待执行完毕所有脚本,至此,安装完成;

4.2 查看MySQL版本

执行如下命令,查看MySQL版本,如果成功表示安装MySQL成功

  1. $ mysql --version
  2. $ mysqladmin --version

image.png

4.3 服务的初始化

为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执 行下面的命令初始化

  1. $ mysqld --initialize --user=mysql

说明:--initialize选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将 该密码标记为过期,登录后你需要设置一个新的密码;生成的 临时密码 会往日志中记录一份;

  1. $ cat /var/log/mysqld.log

image.png

4.4 启动MySQL,查看状态

此时,MySQL服务尚未启动

  1. # 启动
  2. $ systemctl start mysqld
  3. # 关闭
  4. $ systemctl stop mysqld
  5. # 重启
  6. $ systemctl restart mysqld
  7. # 查看状态
  8. $ systemctl status mysqld

image.png
image.png

4.5 查看MySQL服务是否自启动

默认是enabled(自启动)

  1. $ systemctl list-unit-files|grep mysqld.service

image.png

如不是enabled可以运行如下命令设置自启动

  1. $ systemctl enable mysqld.service

如果希望不进行自启动,运行如下命令设置

  1. $ systemctl disable mysqld.service

2.3 MySQL登录

1、首次登录

通过mysql -uroot -p进行登录,在Enter password:录入初始化密码
image.png

2、修改密码

因为初始化密码默认是过期的,所以查看数据库会报错
image.png

  1. ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

image.png

5.7版本之后(不含5.7),mysql加入了全新的密码安全机制。设置新密码太简单会报错

修改后,重新登录 MySQL,使用命令就不会报错了
image.png

3、设置远程登录

todo…

2.4 MySQL 5.7安装

对比8.x,common->libs->client…
在安装过程中,如果有报错的,参考 8.x 进行修复执行即可;

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

3、MacOS下MySQL的安装

3.1 下载MySQL

首先到Mysql社区下载对应安装包,下载地址:https://www.mysql.com/downloads/
image.png

选择合适的社区版进行下载
image.png
Apple M1 版本选择 Arm64 进行安装
image.png

3.2

todo

设置远程登录

当前问题

SQLyog 远程连接虚拟机内部 MySQL 服务器:默认情况下,是连接不成功的:
image.png
那么,如何进行排查呢?排查的思路是什么?

确认网络

1、确认网络是否能够 ping 通;
image.png

2、排查网络端口号是否开放;
在远程机器上使用 talnet 命令保证端口号开放访问,发现,访问是失败的,是防火墙的问题导致的;
image.png

拓展:开启 telnet 功能
image.png

关闭 Linux 上的防火墙:

  1. # 查看防火墙状态
  2. $ systemctl status firewalld
  3. # 停止防火墙
  4. $ systemctl stop firewalld
  5. # 设置 防火墙永久关闭
  6. $ systemctl disable firewalld

image.png

可以看到,这里只允许 root 用户在本机登录,因此这里需要修改,即通过update语句修改host字段的值,也就是允许哪些客户端进行连接;

  1. select host, user from user;

image.png

这里设置成 % 通配符,实际开发场景中禁止这样操作:

  1. update user set host = '%' where user = 'root';

image.png

修改成功后,一定要刷新下权限;

  1. flush privileges;

image.png

之后,再次测试,配置新连接报错,错误号码 2058,分析是 mysql 密码加密方法变了;
image.png
image.png

  1. alter user 'root'@'%' identified with mysql_native_password by 'abc123';

:::info todo(作为兴趣了解,目前没必要知道):MySQL 8 的密码强度评估(p100 后半部分) :::

字符集

image.png

image.png

image.png

image.png
原因:
image.png

因此,使用 MySQL 5.x,安装后的第一件事就是修改字符集;
image.png

image.png
image.png

  1. $ systemctl restart mysqld

image.png
image.png

image.png

各级别的字符集
MySQL 4个级别的字符集,粒度是很小的,也就是说甚至可以对某一列,进行单独的设置字符集;

也就解释了,为什么在配置文件中设置编码字符集的时候,为什么只需要设置 服务器级别的了;