笔者的运行环境:
CentOS Stream 8 x86_64
MySQL 8.0.26
进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux 操作系统可以安装在虚拟机中,也可以安装在真实的电脑中。关于这方面的内容,可见笔者的其它博客:
VMware Workstation Pro 16 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/112152218?spm=1001.2014.3001.5502
Linux 操作系统 CentOS Stream 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/119792728?spm=1001.2014.3001.5502
为了方便远程输入命令、将文件加入到 Linux 操作系统中,最好还要在一台 Windows 操作系统上面使用一种终端控制软件,如 Xshell、Xftp 等。关于这方面的内容,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152?spm=1001.2014.3001.5502
一般来说,安装一个软件有 3 种方法:离线安装、在线安装、免安装。通常,离线安装是最好的方法,同时也通常是笔者的首选,本文亦使用的是离线安装的方法。
对于 Linux,这三种方法各有千秋。笔者分别试验了这 3 种方法,但只给出离线安装的方法。因为对于安装来说,提供多种选择实属多余,还会增加读者选择上的负担。
对于 Linux,离线安装的好处与坏处分别为:
由于 Linux 操作系统的种类繁多,因此首先要知道要安装 Linux 操作系统的处理器架构信息。以 CentOS Stream 8 x86_64
为例,输入以下命令:
[root@localhost ~]# cat /proc/version
Linux version 4.18.0-326.el8.x86_64 ([email protected]) (gcc version 8.5.0 20210514 (Red Hat 8.5.0-3) (GCC)) #1 SMP Wed Jul 28 21:21:05 UTC 2021
可以看出,上述的关键信息为 x86_64
。记住这一点,下面将会用上。
Linux 的 PMS 工具主流有两种。
对于基于 Red Hat 的发行版,其 PMS 工具为 rpm,对应的安装命令为 yum。
对于基于 Debian 的发行版,其 PMS 工具为 dpkg,对应的安装命令为 aptitude。
笔者的操作系统 CentOS Stream 8 x86_64
属于 Red Hat,将使用后缀为 rpm 的安装包。如果读者使用的操作系统为 Ubuntu,需要选择后缀为 deb 的安装包。如果读者不知道如何分辨,可以输入以下命令来验证:
[root@localhost xshell_win10]# yum
[...一长串说明文字...]
如果输入 yum 之后,出现了一大串的说明文字,说明应该使用后缀为 rpm 的安装包。如果提示 yum 命令不存在,说明应该使用后缀为 deb 的安装包。当然,读者也可以通过输入命令 aptitude
来进行进一步的验证。
打开 MySQL 官网,找到 Community 版的下载。选择 Community 是因为该版本免费而且是一般使用的版本。具体的流程如下面的图片所示。
MySQL 的官网是:https://www.mysql.com/
MySQL 下载处的最终网址:https://dev.mysql.com/downloads/mysql/
注意,这里选择 MySQL Community Server
。而 MySQL Community Server
上面的三个选项(MySQL Yum Repository
、MySQL APT Repository
、MySQL SUSE Repository
)则为 MySQL 在线安装需要下载的安装包。
此处,需要根据自己的操作系统来作选择。笔者的操作系统为 CentOS Stream 8 x86_64
,因此选择 Red Hat Enterprise Linux / Oracle Linux
。
此处,同样也需要根据自己的操作系统来作选择。前面已作说明,此处笔者应该选择带 x86
、64
、Linux 8
字样的选项 Red Hat Enterprise Linux 8 / Oracle Linux 8 (x86, 64-bit)
。
此处应该选择 RPM Bundle
(RPM 打包版)字样的选项来下载。可以看出,需要下载的文件为 tar 文件。另外,RPM Bundle
下还有其它选项,这其实已经被包含在 RPM Bundle
中了。应该说,MySQL 的安装包有多个组成部分, RPM Bundle
下面的正是这各个部分,这是为了供某些有特殊需求的人单独下载。
一般来说,MySQL 是用于服务器中的,因此需要的是 MySQL Server
(mysql-community-server
)。那么,为什么要下载 RPM Bundle
呢?原因是 MySQL 的各个组成安装包之间有复杂的依赖关系,因此需要整个一起下载,而不能只下载 MySQL Server
。
下载完成之后,先不要急着安装。由于某些原因,在本次安装 MySQL 之前,可能电脑中已经有了安装过 MySQL 的痕迹,这可能会给下面 MySQL 的安装带来各种问题(如密码不能初始化、MySQL 执行失败等),因此首先需要先彻底清除电脑中与 MySQL 有关的任何文件。
首先要检查电脑里是否已经安装了 MySQL。输入以下命令来查看电脑中与 MySQL 有关的安装信息。
如果命令的输出什么也没有,那就无需卸载。如果有,则要输入以下命令来卸载:
卸载通常不是万能的,还需要手动删除与 MySQL 有关的文件。输入以下命令来查找这种文件:
输入以下命令来删除目录 /var/
、/usr/
、/etc/
下的这些文件。
删除完成之后,再使用上面的查找命令,看看还能不能找到这些文件。
彻底清除 MySQL 之后,就可以进行安装了。可以使用 Xshell 将前面下载的 tar 包置入 Linux 操作系统中。对于使用安装包来安装 Java,将安装包放在哪个目录无关紧要。假设已经将安装包置入当前目录,输入以下命令进行解压:
[root@localhost MySQL 安装包]# tar -xvf mysql-8.0.26-1.el8.x86_64.rpm-bundle.tar
mysql-community-client-8.0.26-1.el8.x86_64.rpm
mysql-community-client-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-client-plugins-8.0.26-1.el8.x86_64.rpm
mysql-community-client-plugins-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-common-8.0.26-1.el8.x86_64.rpm
mysql-community-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-debugsource-8.0.26-1.el8.x86_64.rpm
mysql-community-devel-8.0.26-1.el8.x86_64.rpm
mysql-community-libs-8.0.26-1.el8.x86_64.rpm
mysql-community-libs-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-server-8.0.26-1.el8.x86_64.rpm
mysql-community-server-debug-8.0.26-1.el8.x86_64.rpm
mysql-community-server-debug-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-server-debuginfo-8.0.26-1.el8.x86_64.rpm
mysql-community-test-8.0.26-1.el8.x86_64.rpm
mysql-community-test-debuginfo-8.0.26-1.el8.x86_64.rpm
解压之后可以得到一系列的安装包,这在意料之中。前面已经介绍过,核心的安装包是 mysql-community-server
。在普通情况下,输入命令 sudo yum localinstall mysql-community-server-8.0.26-1.el8.x86_64.rpm
。但在此处却不能这样做,因为 MySQL 的各个组成安装包之间有复杂的依赖关系,而 mysql-community-server
并不是依赖的起点。幸运的是,以下命令可以自动解析本目录下各安装包的依赖关系,并自动按顺序安装:
(注意:虽然这是离线安装包,但安装时并非完全不需要网络。在初次安装时,操作系统可能会首先对软件仓库进行更新,此过程需要联网。)
下载过程示例:
【踩坑提醒】
不要自己手动去安装各个依赖包。依赖包数目众多,依赖关系复杂,手动安装将会遭遇各种问题。
验证 MySQL 是否安装成功。验证的方法非常多,这里只举几个例子。
如果输入这条命令后出现了刚刚安装的 MySQL 的版本,说明安装成功。
[root@localhost ~]# mysql --version
mysql Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)
如果输入这条命令,出现了很长的说明文字,说明安装成功。
安装完成之后,需要设置数据库密码。输入以下命令重启 MySQL,在初次重启的时候,MySQL 会自动生成一个随机密码。
生成的密码在文件 /var/log/mysqld.log
中,输入以下命令可快速查看:
[root@localhost MySQL 安装包]# grep 'temporary password' /var/log/mysqld.log
2021-09-08T11:55:40.637829Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: wqhR5:*BHyrf
可以看出,上述的密码是 wqhR5:*BHyrf
。
【踩坑提醒】
MySQL 关于此文件 /var/log/mysqld.log
的初始密码的生成只会进行一次。要尽快备份此文件直到修改密码之前。不然一旦忘记密码,就只能和前面一样,彻底删除 MySQL,然后再重新安装它。只是简单地卸载 MySQL 并不会重置 MySQL 的密码!
输入命令 mysql -u -root -p初始密码
来登录。其中,初始密码
要换成上面在文件 /var/log/mysqld.log
中查看的密码,且 mysql -u -root -p
与 初始密码
之间没有空格。如笔者应该输入的命令为:
wqhR5:*BHyrf
首次登录后,需要修改密码才能使用 MySQL 的其它命令。
不过这里有一个问题,MySQL 默认要求设置的密码对安全系数要求较高,如长度最小为 8 位,含大小写、数字、特殊符号。对于个人作实验而用的 MySQL,这会很不方便。可以修改这个密码最低要求的设定,不过必须要先设置一个合格的密码才行。
修改密码的命令为:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
。其中,新密码
要被换成自己设置的密码,且 新密码
要位于单引号之中。
在设置完之后,输入以下命令查看 MySQL 关于密码强度的默认设定:
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
输入以下命令来更改 MySQL 密码强度的要求:(为了数据库的安全,请谨慎使用这些命令)
mysql> set global validate_password.length=6;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.mixed_case_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.number_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.policy=LOW;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password.special_char_count=0;
Query OK, 0 rows affected (0.00 sec)
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 6 |
| validate_password.mixed_case_count | 0 |
| validate_password.number_count | 0 |
| validate_password.policy | LOW |
| validate_password.special_char_count | 0 |
+--------------------------------------+-------+
7 rows in set (0.00 sec)
可以看出,现在的密码强度已经发生了变更,现在就可以使用上面修改密码的命令来设置一个简单的密码了。
安装完成之后,还希望 MySQL 能随电脑开机时自启动。不过,使用安装包来安装 MySQL 后,MySQL 会自动被自动设置成开机自启动。
可以验证这一点。输入以下命令重启电脑:
电脑重启后,马上输入以下命令查看 MySQL 的运行状态:
[root@localhost ~]# service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since XXX XXXX-XX-XX XX:XX:XX EDT; XXh XXmin ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 1521 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 1836 (mysqld)
Status: "Server is operational"
Tasks: 38 (limit: 22839)
Memory: 535.8M
CGroup: /system.slice/mysqld.service
└─1836 /usr/sbin/mysqld
X月 XX XX:XX:XX localhost.localdomain systemd[1]: Starting MySQL Server...
X月 XX XX:XX:XX localhost.localdomain systemd[1]: Started MySQL Server.
如果出现了类似于上述的信息,说明 MySQL 可以开机启动。
Linux 通常作为服务器操作系统,一般希望能使用远程使用 MySQL。不过,Linux 上有防火墙,默认会阻止远程对 MySQL 的连接。实际上,它会阻止所有的远程连接。对于笔者的 CentOS Stream 8 x86_64
,默认的防火墙为 firewalld,而不是 iptables。(很多人会选择安装 iptables,但偷懒的笔者当时没有选择这样做。)
一个偷懒的方法就是,永久地关闭防火墙。关闭的方法如下:
另一个方法是,在防火墙中永久开放 MySQL 的默认端口 3306。开放的方法如下:
单独开放完端口 3306 之后,可以输入以下命令查看是否生效:
[root@localhost temp]# firewall-cmd --zone=public --query-port=3306/tcp
yes
实际上,也可以输入以下命令查看所有开放的端口:
[root@localhost temp]# firewall-cmd --zone=public --list-ports
3306/tcp
现在可以尝试远程访问 MySQL。笔者以 Windows 下的 MySQL Workbench 8.0
、Navicat Premium 15
为例来远程访问 MySQL。在这之前,需要在 MySQL 中提供这一支持。方法是输入以下命令:
其中,密码
要改成自己设置的实际的密码。
使用 MySQL Workbench 8.0
远程访问 MySQL。这需要提前安装 MySQL Workbench 8.0
。关于这方面的内容,可见笔者的另一篇博客:
MySQL Community 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/112000033
打开 MySQL Workbench 8.0
后,按下图所示进行操作即可。
按下图填写信息,先测试连接是否可用。如果连接过程中,MySQL Workbench 8.0
出现了无响应的状态,这是正常现象,耐心等待即可。
如果连接可用,就可以建立连接了。
使用 Navicat Premium 15
远程访问 MySQL。这需要提前安装 Navicat Premium 15
。不过很遗憾,该软件不是免费的,但是不是没有免费安装的方法。笔者已经提前安装好了该软件。
(笔者很愿意就在这里讲解免费安装的方法,但由于版权的问题,读者需要在网上自行了解。如果实在找不到,也可在下方留言联系。笔者在看到这些消息之后将免费提供相关资源,希望各位了解后不要自由传播。)
打开 Navicat Premium 15
后,按下图所示进行操作即可。
按下图填写信息,先测试连接是否可用。如果连接过程中,Navicat Premium 15
出现了无响应的状态,这是正常现象,耐心等待即可。
如果连接可用,就可以建立连接了。
经过以上漫长的操作,现在就可以轻松地远程访问 MySQL 了。欢呼吧,少年!