赞
踩
笔者的运行环境:
为了便于以后使用,这里在开头就给出 MySQL 使用中的常用命令。
启动 MySQL 服务:sudo systemctl start mysqld
关闭 MySQL 服务:sudo systemctl stop mysqld
重启 MySQL 服务:sudo systemctl restart mysqld
查看 MySQL 运行状态:service mysqld status
登录 MySQL:mysql -u root -p
查看 MySQL 最新 50 行日志:tail -n 50 /var/log/mysqld.log
操作系统内存查看:free -m
进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux 操作系统可以安装在虚拟机中,也可以安装在真实的电脑中。关于这方面的内容,可见笔者的其它博客:
各种操作系统安装教程大全:
https://blog.csdn.net/wangpaiblog/article/details/115436520
为了方便远程输入命令、将文件加入到 Linux 操作系统中,最好还要在一台 Windows 操作系统上面使用一种终端控制软件,如 Xshell、Xftp 等。关于这方面的内容,可见笔者的另一篇博客:
如何在 Windows 主机上访问本地局域网中的 Linux 主机:
https://blog.csdn.net/wangpaiblog/article/details/120052152
一般来说,安装一个软件有 4 种方法:离线安装、在线安装、离线免安装、编译安装。通常,离线安装是最好的方法,同时也通常是笔者的首选,本文亦使用的是离线安装的方法。
由于 Linux 操作系统的种类繁多,因此首先要知道要安装 Linux 操作系统的处理器架构信息。以 RedHat Enterprise Linux 9 x86_64
为例,输入以下命令:
[root@192 mysql]# cat /proc/version
Linux version 5.14.0-284.11.1.el9_2.x86_64 (mockbuild@x86-vm-09.build.eng.bos.redhat.com) (gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4), GNU ld version 2.35.2-37.el9) #1 SMP PREEMPT_DYNAMIC Wed Apr 12 10:45:03 EDT 2023
可以看出,上述的关键信息为 x86_64
。记住这一点,下面将会用上。
Linux 的 PMS 工具主流有两种。
对于基于 Red Hat 的发行版,其 PMS 工具为 rpm,对应的安装命令为 yum。
对于基于 Debian 的发行版,其 PMS 工具为 dpkg,对应的安装命令为 aptitude。
笔者的操作系统 RedHat Enterprise Linux 9 x86_64
属于 Red Hat,将使用后缀为 rpm 的安装包。如果读者使用的操作系统为 Ubuntu,需要选择后缀为 deb 的安装包。如果读者不知道如何分辨,可以输入以下命令来验证:
[root@XXX ~]# 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 在线安装需要下载的安装包。
此处,需要根据自己的操作系统来作选择。笔者的操作系统为 RedHat Enterprise Linux 9 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 有关的安装信息。
如果命令的输出什么也没有,那就无需卸载。如果有,则要输入以下命令来卸载:(此操作不可逆,请谨慎操作)
卸载通常不是万能的,还需要手动删除与 MySQL 有关的文件。输入以下命令来查找这种文件:
这些文件大致位于目录 /var/
、/usr/
、/etc/
中。读者需要根据自己的实际情况来决定。如果在上面发现其它位置下需要删除的文件,也可以酌情删除。
输入以下命令来删除上面找到的那些残留文件,以目录 /var/
、/usr/
、/etc/
为例。(此操作不可逆,请谨慎操作)
删除完成之后,再使用上面的查找命令,看看还能不能找到这些文件。
彻底清除 MySQL 之后,就可以进行安装了。可以使用 Xshell 将前面下载的 tar 包置入 Linux 操作系统中。对于使用安装包来安装 MySQL,将安装包放在哪个目录无关紧要。假设已经将安装包置入当前目录,输入以下命令进行解压:
MySQL 的压缩包文件路径
[root@192 mysql]# tar -xvf mysql-8.0.33-1.el9.x86_64.rpm-bundle.tar mysql-community-client-8.0.33-1.el9.x86_64.rpm mysql-community-client-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-client-plugins-8.0.33-1.el9.x86_64.rpm mysql-community-client-plugins-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-common-8.0.33-1.el9.x86_64.rpm mysql-community-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-debugsource-8.0.33-1.el9.x86_64.rpm mysql-community-devel-8.0.33-1.el9.x86_64.rpm mysql-community-icu-data-files-8.0.33-1.el9.x86_64.rpm mysql-community-libs-8.0.33-1.el9.x86_64.rpm mysql-community-libs-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-server-8.0.33-1.el9.x86_64.rpm mysql-community-server-debug-8.0.33-1.el9.x86_64.rpm mysql-community-server-debug-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-server-debuginfo-8.0.33-1.el9.x86_64.rpm mysql-community-test-8.0.33-1.el9.x86_64.rpm mysql-community-test-debuginfo-8.0.33-1.el9.x86_64.rpm
解压之后可以得到一系列的安装包,这在意料之中。前面已经介绍过,核心的安装包是 mysql-community-server
。在普通情况下,使用命令 sudo yum localinstall mysql-community-server-8.0.26-1.el8.x86_64.rpm
即可。但在此处却不能这样做,因为 MySQL 的各个组成安装包之间有复杂的依赖关系,而 mysql-community-server
并不是依赖的起点。幸运的是,以下命令可以自动解析本目录下各安装包的依赖关系,并自动按顺序安装:
(注意:虽然这是离线安装包,但安装时并非完全不需要网络。在初次安装时,操作系统可能会首先对软件仓库进行更新,此过程需要联网。)
下载过程示例:
【踩坑提醒】
不要自己手动去安装各个依赖包。依赖包数目众多,依赖关系复杂,手动安装将会遭遇各种问题。
有些读者在 CentOS 8
中使用以上命令安装时可能会出现报错。解决方法可见笔者的另一篇博客:
解决 CentOS 8 使用 yum 安装 rpm 报错 Cannot prepare internal mirrorlist No URLs in mirrorlist:
https://blog.csdn.net/wangpaiblog/article/details/131118012
验证 MySQL 是否安装成功。验证的方法非常多,这里只举几个例子。
如果输入这条命令后出现了刚刚安装的 MySQL 的版本,说明安装成功。
[root@192 mysql]# mysql --version
mysql Ver 8.0.33 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
202X-XX-XXTXX:XX:XX.XXXXXZ 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 的密码!
输入如下命令来登录。
初始密码
其中,初始密码
要换成上面在文件 /var/log/mysqld.log
中查看的密码,且 mysql -uroot -p
与 初始密码
之间没有空格。如笔者应该输入的命令为:mysql -uroot -pwqhR5:*BHyrf
。
【踩坑提醒】
有时候运气不好时(笔者的运气经常不好),上述的密码会含一些非常奇怪的字符(如小括号),这些字符直接在命令 mysql -uroot -p初始密码
中输入时会导致混淆(密码中部分字符会被视为 MySQL 命令,从而导致错误)。此时就不能使用这种明文输入密码的方式,需要先使用命令 mysql -uroot -p
进行密码输入行,然后再单独输入密码。
首次登录后,需要修改密码才能使用 MySQL 的其它命令。
不过这里有一个问题,MySQL 默认要求设置的密码对安全系数要求较高,如长度最小为 8 位,含大小写、数字、特殊符号。对于个人作实验而用的 MySQL,这会很不方便。可以修改这个密码最低要求的设定,不过必须要先设置一个合格的密码才行。
修改密码的命令如下:
新密码
';
其中,新密码
要被换成自己设置的密码,且 新密码
要位于单引号之中。
在设置完之后,输入以下命令查看 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 密码强度的要求:(为了数据库的安全,请谨慎使用这些命令)
6
;
0
;
0
;
LOW
;
0
;
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@XXX ~]# 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 的连接。实际上,它会阻止所有的远程连接。对于笔者的 RedHat Enterprise Linux 9 x86_64
,默认的防火墙为 firewalld
,而不是 iptables
。(很多早期的 Linux,使用的防火墙是 iptables,但 RedHat 从 RHEL 7 开始就用 firewalld 取代了 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 中授权远程访问。方法是在登录 MySQL 之后,输入以下命令:
密码
';
其中,密码
要改成自己设置的实际的密码。
现在可以尝试远程访问 MySQL。
使用 MySQL Workbench 8.0
远程访问 MySQL。这需要在本地客户端提前安装 MySQL Workbench
。关于这方面的内容,可见笔者的另一篇博客:
MySQL Community 安装教程:
https://blog.csdn.net/wangpaiblog/article/details/112000033
打开 MySQL Workbench
后,按下图所示进行操作即可。
按下图填写信息,先测试连接是否可用。如果连接过程中,MySQL Workbench
出现了无响应的状态,这是正常现象,耐心等待即可。
如果连接可用,就可以建立连接了。
使用 Navicat Premium 15
远程访问 MySQL。这在本地客户端需要提前安装 Navicat Premium
。不过很遗憾,该软件不是免费的。
打开 `Navicat Premium 后,按下图所示进行操作即可。
按下图填写信息,先测试连接是否可用。如果连接过程中,Navicat Premium
出现了无响应的状态,这是正常现象,耐心等待即可。
如果连接可用,就可以建立连接了。
使用 DataGrip
远程访问 MySQL。这在本地客户端需要提前安装 DataGrip
。不过很遗憾,该软件也不是免费的。
打开 DataGrip
后,按下图所示进行操作即可。
在 DataGrip
中下载所需的驱动文件,然后测试连接即可。
MySQL 在安装之后会自动一个配置文件 my.cnf
,用于指定一些启动时的必要参数。该文件位于 /etc/my.cnf
。可以酌情修改该文件的内容以自定义配置 MySQL。该文件的默认信息如下:
# For advice on how to change settings please see # http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
【踩坑提醒】
不要尝试修改上面配置文件中任何与文件路径有关的配置,否则会报下面的各种错误。记住笔者踩坑无数的教训!
Job for mysqld.service failed because the control process exited with error code.
See "systemctl status mysqld.service" and "journalctl -xe" for details.
XXX 0 [Warning] [MY-010091] [Server] Can't create test file /XXX/mysqld_tmp_file_case_insensitive_test.lower-test
XXX 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.33) starting as process 87262
XXX 0 [Warning] [MY-010091] [Server] Can't create test file /XXX/mysqld_tmp_file_case_insensitive_test.lower-test
XXX 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /XXX/ is case insensitive
mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)
XXX 0 [ERROR] [MY-010119] [Server] Aborting
XXX 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.33) MySQL Community Server - GPL.
可以使用以下任意一个方法查看:
使用如下命令查看:
[root@XXX ~]# sudo grep datadir /etc/my.cnf
datadir=/var/lib/mysql
在登录 MySQL 之后,使用如下命令可以查看当前的数据存放位置:
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.01 sec)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。