笔者的运行环境:

  • 安装成功过的 MySQL:

    • MySQL 8.0.33

    • MySQL 8.0.26

  • 安装成功过的 Linux:

    • RedHat Enterprise Linux 9 x86_64

    • CentOS 8 x86_64

    • CentOS Stream 8 x86_64

前置附录

MySQL 常用命令

为了便于以后使用,这里在开头就给出 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

事先准备

  1. 进行这个教程之前,必须要先安装好一个 Linux 操作系统。这个 Linux 操作系统可以安装在虚拟机中,也可以安装在真实的电脑中。关于这方面的内容,可见笔者的其它博客:

    各种操作系统安装教程大全:
    https://blog.csdn.net/wangpaiblog/article/details/115436520

    为了方便远程输入命令、将文件加入到 Linux 操作系统中,最好还要在一台 Windows 操作系统上面使用一种终端控制软件,如 Xshell、Xftp 等。关于这方面的内容,可见笔者的另一篇博客:

    如何在 Windows 主机上访问本地局域网中的 Linux 主机:
    https://blog.csdn.net/wangpaiblog/article/details/120052152

  2. 一般来说,安装一个软件有 4 种方法:离线安装、在线安装、离线免安装、编译安装。通常,离线安装是最好的方法,同时也通常是笔者的首选,本文亦使用的是离线安装的方法。

  3. 由于 Linux 操作系统的种类繁多,因此首先要知道要安装 Linux 操作系统的处理器架构信息。以 RedHat Enterprise Linux 9 x86_64 为例,输入以下命令:

    cat /proc/version

    [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。记住这一点,下面将会用上。

  4. Linux 的 PMS 工具主流有两种。

    对于基于 Red Hat 的发行版,其 PMS 工具为 rpm,对应的安装命令为 yum。

    对于基于 Debian 的发行版,其 PMS 工具为 dpkg,对应的安装命令为 aptitude。

    笔者的操作系统 RedHat Enterprise Linux 9 x86_64 属于 Red Hat,将使用后缀为 rpm 的安装包。如果读者使用的操作系统为 Ubuntu,需要选择后缀为 deb 的安装包。如果读者不知道如何分辨,可以输入以下命令来验证:

    yum

    [root@XXX ~]# yum
    [...一长串说明文字...]
    

    如果输入 yum 之后,出现了一大串的说明文字,说明应该使用后缀为 rpm 的安装包。如果提示 yum 命令不存在,说明应该使用后缀为 deb 的安装包。当然,读者也可以通过输入命令 aptitude 来进行进一步的验证。

下载 MySQL

  1. 打开 MySQL 官网,找到 Community 版的下载。选择 Community 是因为该版本免费而且是一般使用的版本。具体的流程如下面的图片所示。

    MySQL 的官网是:https://www.mysql.com/

    MySQL 下载处的最终网址:https://dev.mysql.com/downloads/mysql/

    在这里插入图片描述

    在这里插入图片描述

  2. 注意,这里选择 MySQL Community Server。而 MySQL Community Server 上面的三个选项(MySQL Yum RepositoryMySQL APT RepositoryMySQL SUSE Repository)则为 MySQL 在线安装需要下载的安装包。

    在这里插入图片描述

  3. 此处,需要根据自己的操作系统来作选择。笔者的操作系统为 RedHat Enterprise Linux 9 x86_64,因此选择 Red Hat Enterprise Linux / Oracle Linux

    在这里插入图片描述

  4. 此处,同样也需要根据自己的操作系统来作选择。前面已作说明,此处笔者应该选择带 x8664Linux 8 字样的选项 Red Hat Enterprise Linux 8 / Oracle Linux 8 (x86, 64-bit)

    在这里插入图片描述

  5. 此处应该选择 RPM Bundle(RPM 打包版)字样的选项来下载。可以看出,需要下载的文件为 tar 文件。另外,RPM Bundle 下还有其它选项,这其实已经被包含在 RPM Bundle 中了。应该说,MySQL 的安装包有多个组成部分, RPM Bundle 下面的正是这各个部分,这是为了供某些有特殊需求的人单独下载。

    在这里插入图片描述

    一般来说,MySQL 是用于服务器中的,因此需要的是 MySQL Servermysql-community-server)。那么,为什么要下载 RPM Bundle 呢?原因是 MySQL 的各个组成安装包之间有复杂的依赖关系,因此需要整个一起下载,而不能只下载 MySQL Server

卸载 MySQL

  1. 安装之前先教卸载,这看起来是一种迷惑行为,不过这是必要的。下载完成之后,先不要急着安装。由于某些原因,在本次安装 MySQL 之前,可能电脑中已经有了安装过 MySQL 的痕迹,这可能会给下面 MySQL 的安装带来各种问题(如密码不能初始化、MySQL 执行失败等),因此首先需要先彻底清除电脑中与 MySQL 有关的任何文件。另外,如果有些不听话的读者后来发现需要重新安装 MySQL,这也需要知道如何卸载。

  2. 首先要检查电脑里是否已经安装了 MySQL。输入以下命令来查看电脑中与 MySQL 有关的安装信息。

    sudo yum list installed | grep mysql

    如果命令的输出什么也没有,那就无需卸载。如果有,则要输入以下命令来卸载:(此操作不可逆,请谨慎操作)

    sudo yum list installed | grep mysql | awk '{print $1}' | xargs sudo yum erase -y

  3. 卸载通常不是万能的,还需要手动删除与 MySQL 有关的文件。输入以下命令来查找这种文件:

    sudo find / -name 'mysql*'

    这些文件大致位于目录 /var//usr//etc/ 中。读者需要根据自己的实际情况来决定。如果在上面发现其它位置下需要删除的文件,也可以酌情删除。

    输入以下命令来删除上面找到的那些残留文件,以目录 /var//usr//etc/ 为例。(此操作不可逆,请谨慎操作)

    sudo find /var /usr /etc -name "mysql*" -exec rm -r {} \;

    删除完成之后,再使用上面的查找命令,看看还能不能找到这些文件。

安装 MySQL

  1. 彻底清除 MySQL 之后,就可以进行安装了。可以使用 Xshell 将前面下载的 tar 包置入 Linux 操作系统中。对于使用安装包来安装 MySQL,将安装包放在哪个目录无关紧要。假设已经将安装包置入当前目录,输入以下命令进行解压:

    tar -xvf 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
    
  2. 解压之后可以得到一系列的安装包,这在意料之中。前面已经介绍过,核心的安装包是 mysql-community-server。在普通情况下,使用命令 sudo yum localinstall mysql-community-server-8.0.26-1.el8.x86_64.rpm 即可。但在此处却不能这样做,因为 MySQL 的各个组成安装包之间有复杂的依赖关系,而 mysql-community-server 并不是依赖的起点。幸运的是,以下命令可以自动解析本目录下各安装包的依赖关系,并自动按顺序安装:

    sudo yum -y localinstall *.rpm

    (注意:虽然这是离线安装包,但安装时并非完全不需要网络。在初次安装时,操作系统可能会首先对软件仓库进行更新,此过程需要联网。)

    下载过程示例:

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述


    【踩坑提醒】

    • 不要自己手动去安装各个依赖包。依赖包数目众多,依赖关系复杂,手动安装将会遭遇各种问题。

    • 有些读者在 CentOS 8 中使用以上命令安装时可能会出现报错。解决方法可见笔者的另一篇博客:

      解决 CentOS 8 使用 yum 安装 rpm 报错 Cannot prepare internal mirrorlist No URLs in mirrorlist:
      https://blog.csdn.net/wangpaiblog/article/details/131118012


  3. 验证 MySQL 是否安装成功。验证的方法非常多,这里只举几个例子。


    如果输入这条命令后出现了刚刚安装的 MySQL 的版本,说明安装成功。

    mysql --version

    [root@192 mysql]# mysql --version
    mysql  Ver 8.0.33 for Linux on x86_64 (MySQL Community Server - GPL)
    

    如果输入这条命令,出现了很长的说明文字,说明安装成功。

    man mysql


  4. 安装完成之后,需要设置数据库密码。输入以下命令重启 MySQL,在初次重启的时候,MySQL 会自动生成一个随机密码。

    sudo systemctl start mysqld

  5. 生成的密码在文件 /var/log/mysqld.log 中,输入以下命令可快速查看:

    grep 'temporary password' /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 的密码


  6. 输入如下命令来登录。

    mysql -uroot -p初始密码

    其中,初始密码要换成上面在文件 /var/log/mysqld.log 中查看的密码,且 mysql -uroot -p初始密码 之间没有空格。如笔者应该输入的命令为:mysql -uroot -pwqhR5:*BHyrf


    【踩坑提醒】

      有时候运气不好时(笔者的运气经常不好),上述的密码会含一些非常奇怪的字符(如小括号),这些字符直接在命令 mysql -uroot -p初始密码 中输入时会导致混淆(密码中部分字符会被视为 MySQL 命令,从而导致错误)。此时就不能使用这种明文输入密码的方式,需要先使用命令 mysql -uroot -p 进行密码输入行,然后再单独输入密码。


  7. 首次登录后,需要修改密码才能使用 MySQL 的其它命令。

    不过这里有一个问题,MySQL 默认要求设置的密码对安全系数要求较高,如长度最小为 8 位,含大小写、数字、特殊符号。对于个人作实验而用的 MySQL,这会很不方便。可以修改这个密码最低要求的设定,不过必须要先设置一个合格的密码才行。

    修改密码的命令如下:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

    其中,新密码 要被换成自己设置的密码,且 新密码 要位于单引号之中。

  8. 在设置完之后,输入以下命令查看 MySQL 关于密码强度的默认设定:

    SHOW VARIABLES LIKE 'validate_password%';

    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)
    
  9. 输入以下命令来更改 MySQL 密码强度的要求:(为了数据库安全,请谨慎使用这些命令)

    set global validate_password.length=6;

    set global validate_password.mixed_case_count=0;

    set global validate_password.number_count=0;

    set global validate_password.policy=LOW;

    set global validate_password.special_char_count=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)
    
  10. 可以看出,现在的密码强度已经发生了变更,现在就可以使用上面修改密码的命令来设置一个简单的密码了。

设置 MySQL 开机自启动

  1. 安装完成之后,还希望 MySQL 能随电脑开机时自启动。不过,使用安装包来安装 MySQL 后,MySQL 会自动被自动设置成开机自启动。

    可以验证这一点。输入以下命令重启电脑:

    reboot

    电脑重启后,马上输入以下命令查看 MySQL 的运行状态:

    service mysqld status

    [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 可以开机启动。

远程访问 MySQL

  1. Linux 通常作为服务器操作系统,一般希望能使用远程使用 MySQL。不过,Linux 上有防火墙,默认会阻止远程对 MySQL 的连接。实际上,它会阻止所有的远程连接。对于笔者的 RedHat Enterprise Linux 9 x86_64,默认的防火墙为 firewalld,而不是 iptables。(很多早期的 Linux,使用的防火墙是 iptables,但 RedHat 从 RHEL 7 开始就用 firewalld 取代了 iptables。)

    • 一个偷懒的方法就是,永久地关闭防火墙。关闭的方法如下:

      systemctl stop firewalld

      systemctl mask firewalld

      firewall-cmd --reload

    • 另一个方法是,在防火墙中永久开放 MySQL 的默认端口 3306。开放的方法如下:

      firewall-cmd --zone=public --add-port=3306/tcp --permanent

      firewall-cmd --reload

      单独开放完端口 3306 之后,可以输入以下命令查看是否生效:

      firewall-cmd --zone=public --query-port=3306/tcp

      [root@localhost temp]# firewall-cmd --zone=public --query-port=3306/tcp
      yes
      

      实际上,也可以输入以下命令查看所有开放的端口:

      firewall-cmd --zone=public --list-ports

      [root@localhost temp]# firewall-cmd --zone=public --list-ports
      3306/tcp
      
  2. 在 MySQL 中授权远程访问。方法是在登录 MySQL 之后,输入以下命令:

    create user 'root'@'%' identified with mysql_native_password by '密码';

    grant all privileges on *.* to 'root'@'%' with grant option;

    flush privileges;

    其中,密码 要改成自己设置的实际的密码。

  3. 现在可以尝试远程访问 MySQL。

使用 MySQL Workbench 远程访问 MySQL

  1. 使用 MySQL Workbench 8.0 远程访问 MySQL。这需要在本地客户端提前安装 MySQL Workbench。关于这方面的内容,可见笔者的另一篇博客:

    MySQL Community 安装教程:
    https://blog.csdn.net/wangpaiblog/article/details/112000033

  2. 打开 MySQL Workbench 后,按下图所示进行操作即可。

    在这里插入图片描述

  3. 按下图填写信息,先测试连接是否可用。如果连接过程中,MySQL Workbench 出现了无响应的状态,这是正常现象,耐心等待即可。

    在这里插入图片描述

  4. 如果连接可用,就可以建立连接了。

    在这里插入图片描述

使用 Navicat Premium 远程访问 MySQL

  1. 使用 Navicat Premium 15 远程访问 MySQL。这在本地客户端需要提前安装 Navicat Premium。不过很遗憾,该软件不是免费的。

  2. 打开 `Navicat Premium 后,按下图所示进行操作即可。

    在这里插入图片描述

  3. 按下图填写信息,先测试连接是否可用。如果连接过程中,Navicat Premium 出现了无响应的状态,这是正常现象,耐心等待即可。

    在这里插入图片描述

  4. 如果连接可用,就可以建立连接了。

    在这里插入图片描述

使用 DataGrip 远程访问 MySQL

  1. 使用 DataGrip 远程访问 MySQL。这在本地客户端需要提前安装 DataGrip。不过很遗憾,该软件也不是免费的。

  2. 打开 DataGrip 后,按下图所示进行操作即可。

    在这里插入图片描述

  3. DataGrip 中下载所需的驱动文件,然后测试连接即可。

    在这里插入图片描述

后置附录

MySQL 的配置文件

  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.

数据库存放目录

可以使用以下任意一个方法查看:

  • 使用如下命令查看:

    sudo grep datadir /etc/my.cnf

    [root@XXX ~]# sudo grep datadir /etc/my.cnf
    datadir=/var/lib/mysql
    
  • 在登录 MySQL 之后,使用如下命令可以查看当前的数据存放位置:

    SHOW VARIABLES LIKE 'datadir';

    mysql> SHOW VARIABLES LIKE 'datadir';
    +---------------+-----------------+
    | Variable_name | Value           |
    +---------------+-----------------+
    | datadir       | /var/lib/mysql/ |
    +---------------+-----------------+
    1 row in set (0.01 sec)
    
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐