李翔-大数据技术

Big data technology!

第6章 mysql的安装部署

Mysql的安装部署


在安装Hive前必须先安装MySQL,原因如下:

  1. 元数据管理:Hive需要一个数据库来存储表结构、分区信息等元数据。MySQL是常用的元数据存储系统,可靠且高效。

  2. 生产环境稳定性:默认的嵌入式Derby数据库不适合多用户并发场景。MySQL性能更佳,适合生产环境中的多用户并发操作,保障Hive稳定运行。

  3. 数据交换:MySQL不仅用于存储元数据,还能作为数据交换的桥梁,便于将MySQL数据导入Hive进行分析或将Hive处理结果导出。

因此,MySQL的安装和配置为Hive提供了可靠的元数据存储基础,确保系统稳定性和数据处理的灵活性。


1.前期准备

1.1 环境要求

  1. 已搭建好的Hadoop分布式系统(三台虚机masterslave1slave2

  2. 关闭防火墙

    systemctl status firewalld       #查看防火墙状态
    systemctl stop firewalld         #停止防火墙(开机会再启动)
    systemctl disable firewalld      #禁止防火墙开机启动(永久)


1.2 卸载原有的Mysql

1.2.1 检测系统是否自带Mysql

在安装新的MySQL版本前,可以使用以下命令检查是否有MySQL相关的软件包已安装:

检测是否已安装Mysql

rpm -qa | grep mysql
  • 命令解释

    • rpm:用于管理RPM软件包。

    • -q:表示查询软件包信息。

    • -a:表示查询所有已安装的软件包。

    • rpm -qa:列出系统中已安装的所有RPM软件包的名称和版本信息。

    • grep mysql:筛选出名称中包含 "mysql" 字符串的包。

    • 竖线字符 |:管道符号,用于将 rpm -qa 的输出结果传递给 grep mysql,从中筛选出相关的MySQL包。

卸载系统自带的MySQL

如果系统已经安装了MySQL,可以使用以下命令强制卸载相关的软件包:

rpm -e --nodeps 包名

  • 命令解释

    • -e:表示卸载软件包。

    • --nodeps:强制卸载,即使该软件包存在依赖关系也会卸载。

通过这些步骤,确保系统中没有安装不需要的MySQL版本,为后续安装新的MySQL版本做好准备。


1.2.2 检测系统是否自带MariaDB

在安装MySQL之前,还需要检查系统中是否已经安装了MariaDB。MariaDB是MySQL的一个分支,许多系统默认安装MariaDB作为数据库管理系统。

检测是否已安装MariaDB

rpm -qa | grep mariadb

检测结果示例

卸载已安装的MariaDB

如果检测到系统中已安装了MariaDB(如上图所示,检查到有mariadb-libs-5.5.68-1.el7.x86_64文件),可以使用以下命令卸载:

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

如果系统中没有安装MariaDB,可以跳过此步骤。

卸载结果示例

通过这些步骤,确保系统中没有冲突的数据库软件(如MariaDB),为后续安装MySQL做好准备。


1.2.3 查找删除mysql的相关目录

在卸载MySQL和相关包后,仍然可能存在一些残留的MySQL文件或目录。为了确保系统的干净状态,可以使用以下步骤查找并删除这些目录。

# 1.从根目录开始查找mysql文件
find / -name mysql

# 2.如果查询结果如下:
# /etc/selinux/targeted/active/modules/100/mysql   # 与SELinux安全策略相关的MySQL模块。
# /usr/lib64/mysql    # MySQL的动态链接库文件存放处,影响MySQL的运行。
# /usr/share/mysql    # MySQL的文档和共享资源目录,主要包含非关键文件.

# 在安装新的MySQL之前,删除这些残留目录是必要的,以避免冲突。

# 3.通过命令rm -rf将mysql有关目录都删除掉,例如我这里只有上述的两个目录,所以删除
# rm -rf:强制删除指定目录及其内容。
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /usr/lib64/mysql


2.安装并配置mysql

2.1 下载mysql

下载mysql-5.7.27-el7-x86_64.tar.gz,上传到master主机上的/opt/software/的文件夹中


2.2 安装mysql

2.2.1 解压

cd /opt/software
tar -zxvf mysql-5.7.27-el7-x86_64.tar.gz -C /opt/apps


2.2.2 重命名

cd /opt/apps
mv mysql-5.7.27-el7-x86_64 mysql-5.7.27


2.2.3 检查mysql组和用户是否存在,如果没有则创建

在安装MySQL之前,通常需要确保系统中存在MySQL的用户组和用户,以便MySQL服务能够以专用用户身份运行,从而提高系统安全性。以下步骤说明了如何检查并创建MySQL的组和用户。

1. 检查MySQL组是否存在

cat /etc/group | grep mysql

解释

  • 如果查询结果为空,表示MySQL组不存在。

  • 如果查询结果如下所示,表示MySQL组已存在:

    mysql:x:1001:
    • mysql:组名

    • x:组密码(通常是占位符)

    • 1001:组ID

    • (空):组成员列表


2. 检查MySQL用户是否存在

cat /etc/passwd | grep mysql

解释

  • 如果查询结果为空,表示MySQL用户不存在。

  • 如果查询结果如下所示,表示MySQL用户已存在:

    mysql:x:987:1001::/home/mysql:/bin/bash
    • mysql:用户名

    • x:口令(通常是占位符)

    • 987:用户标识号(UID)

    • 1001:组标识号(GID)

    • (空):用户的注释信息

    • /home/mysql:用户主目录

    • /bin/bash:命令解释程序(登录Shell)


3. 创建MySQL组和用户

如果MySQL组和用户不存在,可以使用以下命令创建:

# 创建名为`mysql`的用户组
groupadd mysql
# 创建一个名为`mysql`的系统用户,并将其加入`mysql`组。
useradd -r -g mysql mysql

# 检查MySQL组是否存在
cat /etc/group | grep mysql
# 检查MySQL用户是否存在
cat /etc/passwd | grep mysql

命令解读

  • -r:表示这是一个系统用户,不能用于登录系统。

  • -g mysql:将用户加入mysql用户组。

注意:为什么要创建MySQL用户及其用户组?

在Linux系统中,MySQL用户通常被设置为系统用户,系统用户是一种特殊类型的用户,它通常用于运行特定的系统服务或守护进程,而不是让人们登录使用。这样做有以下几个特点:

  1. 没有登录权限:系统用户通常不会有设置密码,也不会被分配一个交互式Shell(命令行界面)。因此,即使有人知道这个用户的名字,也无法通过它登录到系统中使用命令行或图形界面。

  2. 仅用于运行服务:MySQL用户的唯一作用是用于运行MySQL服务。当MySQL服务启动时,它会以这个用户的身份运行,确保MySQL的操作与系统的其他部分隔离开来。

  3. 提高安全性:由于这个用户不能直接登录系统,即使某个MySQL进程被攻击者利用,攻击者也不能通过这个用户获取系统的其他访问权限,从而提高了系统的整体安全性。

简单来说,设置MySQL用户为系统用户,确保这个用户只能用于运行MySQL服务,而不能被用来登录和操作系统,从而增强了系统的安全性。


2.3 配置mysql数据库

2.3.1 创建数据目录data

cd /opt/apps/mysql-5.7.27
mkdir data


2.3.2  修改所有者及所属组

# 先查看,再将/opt/apps/mysql-5.7.27的所有者及所属组改为mysql
chown -R mysql.mysql /opt/apps/mysql-5.7.27

# chown:用于更改文件和目录的所有权。
# -R:   递归地将指定目录及其所有子目录和文件的所有权和所属组都进行修改。
# mysql.mysql:: 指定新的所有者和所属组。前面的 mysql 是用户,后面的 mysql 是组。
# 这表示将 /opt/apps/mysql-5.7.27 目录及其所有内容的所有者和所属组都设置为 mysql 用户和 mysql 组。


2.3.3 编辑 /etc/my.cnf 配置文件

my.cnf:MySQL 启动时会读取该文件中的配置信息以确定服务器的行为和性能参数。

首次安装 MySQL 时,如果是手动安装MySQL(如使用二进制包),则 不会自动生成 my.cnf。需要自己创建此文件。

vi /etc/my.cnf

# 或者使用 touch /etc/my.cnf 命令先创建文件,再在FinalShell双击其打开编辑

配置如下:

[client]
# 指定MySQL服务器的端口号,客户端通过该端口进行网络连接
port = 3306
# 指定客户端使用的socket文件路径,用于与本地MySQL服务器通信
socket = /opt/apps/mysql-5.7.27/data/mysql.sock

[mysqld]
# 设置MySQL的安装目录
basedir = /opt/apps/mysql-5.7.27
# 设置MySQL数据库的数据存放目录
datadir = /opt/apps/mysql-5.7.27/data
# 指定MySQL服务器监听的端口号
port = 3306
# 指定服务器使用的socket文件路径,客户端通过这个文件与服务器通信(不需要通过网络)
socket = /opt/apps/mysql-5.7.27/data/mysql.sock
# 设置MySQL服务器的字符集为UTF-8
character-set-server = utf8
# 指定错误日志的存放路径
log-error = /opt/apps/mysql-5.7.27/data/mysqld.log
# 指定MySQL服务器进程ID文件的存放路径
pid-file = /opt/apps/mysql-5.7.27/data/mysqld.pid

【知识点】

  • [mysqld]: 该部分的设置对 MySQL 服务器生效,必不可少。

  • MySQL 服务器将在 /opt/apps/mysql-5.7.27/data/ 目录下创建一个名为 mysql.sock 的套接字文件,应用程序可以通过该套接字文件与 MySQL 服务器进行本地通信。

  • 在 Unix 和 Linux 系统中,套接字文件通常用于在本地计算机上实现进程之间的高效通信,尤其是客户端和服务器进程之间的通信。

  • 在MySQL中,通常使用套接字文件在本地计算机上与数据库服务器进行通信。客户端应用程序通过套接字文件连接到 MySQL 服务器,而不是通过网络。


2.3.4 初始化Mysql

目的:初始化MySQL数据库会创建MySQL所需的系统表,同时生成一个带有空密码的 root 用户。

cd /opt/apps/mysql-5.7.27

./bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/opt/apps/mysql-5.7.27/ \
--datadir=/opt/apps/mysql-5.7.27/data/

#解释
--initialize-insecure: 初始化 MySQL 数据目录,创建系统表和默认用户,并生成空密码。
--user=mysql: 以 mysql 用户身份运行 MySQL 服务器,提高安全性。
--basedir: 指定 MySQL 的安装目录。
--datadir: 指定 MySQL 数据目录,用于存储数据库文件。
  • 如果运行上述格式化命令没有报错,则跳过下面排错的步骤直接执行步骤2.3.5

  • 如果报错:./bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or ,则需要安装libaio,方法命令:yum install libaio

    • libaio 是 Linux 下的异步 I/O 库,许多应用程序,包括 MySQL 数据库,需要它才能正常工作。

  • 如果需要重新格式进行初始化,则需要把/opt/apps/mysql-5.7.27/data下的所有文件删除清空,否则会报错,清空命令如下

    • rm -rf  /opt/apps/mysql-5.7.27/data/*


2.3.5 初始化完成之后,查看日志信息

cat /opt/apps/mysql-5.7.27/data/mysqld.log 

image-20240922163205856


2.3.6 将启动脚本设置为开机自启

第一种方法:【本教程使用此方法】

# 1. 进入 MySQL 安装目录
cd /opt/apps/mysql-5.7.27

# 2. 将 MySQL提供的启动脚本mysql.server复制到系统的启动脚本目录,并重命名为 mysqld
cp support-files/mysql.server  /etc/init.d/mysqld

# 3. 赋予 mysqld 文件可执行权限
chmod +x /etc/init.d/mysqld

# 4. 将 MySQL 服务添加到系统服务中,并设置为开机自动启动
systemctl enable mysqld

# 5. 重启当前主机
reboot

# 6. 系统重启后,检查 MySQL 服务是否自启成功
# 查看 MySQL 服务的状态,确认服务是否正在运行。【状态为active (running)则成功】
systemctl status mysqld

# 7. 检查 MySQL 进程,确保 MySQL 正在监听指定的端口(通常是 3306)
# netstat -plnt | grep mysql

【知识点】

/etc/init.d/ 目录

  • 作用/etc/init.d/ 目录是 Linux 系统中的一个标准目录,用于存放服务启动脚本。系统在启动时会自动运行这个目录下的脚本来启动或停止各种服务(如 MySQL、Apache 等)。

mysql.server启动脚本

  • mysql.server:是 MySQL 提供的脚本文件,包含了启动、停止、重启 MySQL 服务所需的所有命令。

操作:我们将这个脚本文件复制到 /etc/init.d/ 目录下。这样做是为了将 MySQL 的启动和管理功能集成到系统服务中,使得 MySQL 可以被系统识别和管理。

为什么重命名

  • 为什么重命名:在将 mysql.server 复制到 /etc/init.d/ 目录后,我们将其重命名为 mysqld。这样做是为了使文件名与 MySQL 服务的名称一致,方便使用标准的命令来管理MySQL服务。

  • 作用:重命名为 mysqld 使得我们可以使用标准的  systemctl 命令来管理 MySQL 服务。例如:

    • 启动 MySQL 服务:systemctl start mysqld

    • 停止 MySQL 服务:systemctl stop mysqld

    • 重启 MySQL 服务:systemctl restart mysqld

    • 查看 MySQL 服务的状态:systemctl status mysqld


2.3.7 配置环境变量

vim /etc/profile

# 添加以下内容
# Mysql
export MYSQL_HOME=/opt/apps/mysql-5.7.27
export PATH=$PATH:$MYSQL_HOME/bin

使环境变量配置生效

source /etc/profile
# 查看PATH路径
echo $PATH


2.3.8 更改mysql密码和权限

进入mysql并更改root帐户密码  【注意:之前格式化创建的root用户是空密码!!!】

`1.在master节点登录mysql
mysql -u root -p

`2.更改密码与权限
mysql> set password=password('123456');
mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
mysql> flush privileges;
mysql> SELECT User, Host FROM mysql.user;
mysql> quit

# 命令解释
#1.设置当前登录用户(通常是root@localhost用户)的密码为 '123456'
#2.创建'root'@'%' 用户,该用户可以从任意主机(%表示所有主机)进行连接
#3.允许 root 用户从任何 IP 地址('%')登录,并赋予其对所有数据库和所有表的所有权限。
#      WITH GRANT OPTION :root 用户可以使用 GRANT 语句将自己的权限授予其他用户。
#4.刷新 MySQL 的权限系统,以使权限更改立即生效。
#5.查看 root用户的权限和主机的信息,确保root用户的Host字段包含了 '%',表明从任何 IP 地址都可以登录

`3.重启mysql,再查看mysql的服务状态
[root@master bin]# systemctl restart mysqld      
[root@master bin]# systemctl status mysqld  

image-20240922164044059

【知识点】

  1. 执行脚本文件时,必须给 .sh 文件加上可执行权限(x 权限)。

    例如:chmod +x filename.sh

    使用命令:./filename.sh 来执行脚本。如果没有执行权限,脚本无法运行。

  2. 如果不使用 ./ 执行脚本,Linux 会在系统路径(由 PATH 环境变量指定)中查找该脚本。

    因为系统路径中通常不包含脚本文件,所以直接执行脚本可能会失败。

  3. 脚本文件的第一行(例如:!/bin/bash)

    这行代码指定了脚本的解释器。确保这行代码正确无误,以便系统可以找到并使用正确的解释器来执行脚本。


2.3.9 验证mysql是否安装成功:

验证是否成功方法一:

# 命令行使用root用户,密码123456;登录mysql,如能正常登录mysql,则表示mysql安装成功!
mysql -u root -p123456

验证是否成功方法二:

# 查看本机mysql进程,netstat 需要安装 'yum install net-tools'
netstat -plnt | grep mysql
# 命令解释
此命令用于检查系统中 MySQL 服务的状态,特别是它是否在监听指定的端口。以下是该命令的详细解释:
   netstat:一个用于显示网络状态的工具,可以查看网络连接、路由表、接口统计信息等。
   -plnt:这些选项组合指定了 netstat 显示的内容:
   -p:显示与端口相关的进程信息。
   -l:仅显示监听状态的端口。
   -n:以数字形式显示网络地址和端口号,而不是将它们转换为主机名。
   -t:仅显示 TCP 协议的相关信息。
   |:管道符,用于将 netstat 命令的输出传递给 grep 命令进行进一步的筛选。
grep mysql:筛选出包含mysql的行。grep是用于搜索指定字符串的工具,用来查找所有与MySQL服务相关的监听端口。

# 运行后显示以下信息,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。
tcp     0      0 127.0.0.1:3306      0.0.0.0:*     LISTEN    33014/mysqld  
# 解释:
   127.0.0.1:3306:表示 MySQL 服务正在本地 IP 地址 127.0.0.1 的 3306 端口上监听。
   LISTEN:表示该端口正在等待连接请求。
   33014/mysqld:显示了 MySQL 进程的 ID 和名称(mysqld)。

# 综上所述,执行该命令可以快速查找当前系统中所有已经启动的MySQL服务,并显示其监听的端口号。

至此,mysql安装配置完毕。


2.4  记忆:启动和关闭mysql服务器命令:

systemctl start mysqld         # 启动服务
systemctl status mysqld        # 查看服务状态
systemctl stop mysqld          # 停止服务
systemctl restart mysqld       # 重启服务

mysql的安装和应用


在安装Hive前必须先安装MySQL,原因如下:

  1. 元数据管理:Hive需要一个数据库来存储表结构、分区信息等元数据。MySQL是常用的元数据存储系统,可靠且高效。

  2. 生产环境稳定性:默认的嵌入式Derby数据库不适合多用户并发场景。MySQL性能更佳,适合生产环境中的多用户并发操作,保障Hive稳定运行。

  3. 数据交换:MySQL不仅用于存储元数据,还能作为数据交换的桥梁,便于将MySQL数据导入Hive进行分析或将Hive处理结果导出。

因此,MySQL的安装和配置为Hive提供了可靠的元数据存储基础,确保系统稳定性和数据处理的灵活性。


1.前期准备

1.1 环境要求

  1. 已搭建好的Hadoop分布式系统(三台虚机masterslave1slave2

  2. 关闭防火墙

    systemctl status firewalld       #查看防火墙状态
    systemctl stop firewalld         #停止防火墙(开机会再启动)
    systemctl disable firewalld      #禁止防火墙开机启动(永久)


1.2 卸载原有的Mysql

1.2.1 检测系统是否自带Mysql

在安装新的MySQL版本前,可以使用以下命令检查是否有MySQL相关的软件包已安装:

检测是否已安装Mysql

rpm -qa | grep mysql
  • 命令解释

    • rpm:用于管理RPM软件包。

    • -q:表示查询软件包信息。

    • -a:表示查询所有已安装的软件包。

    • rpm -qa:列出系统中已安装的所有RPM软件包的名称和版本信息。

    • grep mysql:筛选出名称中包含 "mysql" 字符串的包。

    • 竖线字符 |:管道符号,用于将 rpm -qa 的输出结果传递给 grep mysql,从中筛选出相关的MySQL包。

卸载系统自带的MySQL

如果系统已经安装了MySQL,可以使用以下命令强制卸载相关的软件包:

rpm -e --nodeps 包名

  • 命令解释

    • -e:表示卸载软件包。

    • --nodeps:强制卸载,即使该软件包存在依赖关系也会卸载。

通过这些步骤,确保系统中没有安装不需要的MySQL版本,为后续安装新的MySQL版本做好准备。


1.2.2 检测系统是否自带MariaDB

在安装MySQL之前,还需要检查系统中是否已经安装了MariaDB。MariaDB是MySQL的一个分支,许多系统默认安装MariaDB作为数据库管理系统。

检测是否已安装MariaDB

rpm -qa | grep mariadb

检测结果示例

卸载已安装的MariaDB

如果检测到系统中已安装了MariaDB(如上图所示,检查到有mariadb-libs-5.5.68-1.el7.x86_64文件),可以使用以下命令卸载:

rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

如果系统中没有安装MariaDB,可以跳过此步骤。

卸载结果示例

通过这些步骤,确保系统中没有冲突的数据库软件(如MariaDB),为后续安装MySQL做好准备。


1.2.3 查找删除mysql的相关目录

在卸载MySQL和相关包后,仍然可能存在一些残留的MySQL文件或目录。为了确保系统的干净状态,可以使用以下步骤查找并删除这些目录。

# 1.从根目录开始查找mysql文件
find / -name mysql

# 2.如果查询结果如下:
# /etc/selinux/targeted/active/modules/100/mysql   # 与SELinux安全策略相关的MySQL模块。
# /usr/lib64/mysql    # MySQL的动态链接库文件存放处,影响MySQL的运行。
# /usr/share/mysql    # MySQL的文档和共享资源目录,主要包含非关键文件.

# 在安装新的MySQL之前,删除这些残留目录是必要的,以避免冲突。

# 3.通过命令rm -rf将mysql有关目录都删除掉,例如我这里只有上述的两个目录,所以删除
# rm -rf:强制删除指定目录及其内容。
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /usr/lib64/mysql


2.安装并配置mysql

2.1 下载mysql

下载mysql-5.7.27-el7-x86_64.tar.gz,上传到master主机上的/opt/software/的文件夹中


2.2 安装mysql

2.2.1 解压

cd /opt/software
tar -zxvf mysql-5.7.27-el7-x86_64.tar.gz -C /opt/apps


2.2.2 重命名

cd /opt/apps
mv mysql-5.7.27-el7-x86_64 mysql-5.7.27


2.2.3 检查mysql组和用户是否存在,如果没有则创建

在安装MySQL之前,通常需要确保系统中存在MySQL的用户组和用户,以便MySQL服务能够以专用用户身份运行,从而提高系统安全性。以下步骤说明了如何检查并创建MySQL的组和用户。

1. 检查MySQL组是否存在

cat /etc/group | grep mysql

解释

  • 如果查询结果为空,表示MySQL组不存在。

  • 如果查询结果如下所示,表示MySQL组已存在:

    mysql:x:1001:
    • mysql:组名

    • x:组密码(通常是占位符)

    • 1001:组ID

    • (空):组成员列表


2. 检查MySQL用户是否存在

cat /etc/passwd | grep mysql

解释

  • 如果查询结果为空,表示MySQL用户不存在。

  • 如果查询结果如下所示,表示MySQL用户已存在:

    mysql:x:987:1001::/home/mysql:/bin/bash
    • mysql:用户名

    • x:口令(通常是占位符)

    • 987:用户标识号(UID)

    • 1001:组标识号(GID)

    • (空):用户的注释信息

    • /home/mysql:用户主目录

    • /bin/bash:命令解释程序(登录Shell)


3. 创建MySQL组和用户

如果MySQL组和用户不存在,可以使用以下命令创建:

# 创建名为`mysql`的用户组
groupadd mysql
# 创建一个名为`mysql`的系统用户,并将其加入`mysql`组。
useradd -r -g mysql mysql

# 检查MySQL组是否存在
cat /etc/group | grep mysql
# 检查MySQL用户是否存在
cat /etc/passwd | grep mysql

命令解读

  • -r:表示这是一个系统用户,不能用于登录系统。

  • -g mysql:将用户加入mysql用户组。

注意:为什么要创建MySQL用户及其用户组?

在Linux系统中,MySQL用户通常被设置为系统用户,系统用户是一种特殊类型的用户,它通常用于运行特定的系统服务或守护进程,而不是让人们登录使用。这样做有以下几个特点:

  1. 没有登录权限:系统用户通常不会有设置密码,也不会被分配一个交互式Shell(命令行界面)。因此,即使有人知道这个用户的名字,也无法通过它登录到系统中使用命令行或图形界面。

  2. 仅用于运行服务:MySQL用户的唯一作用是用于运行MySQL服务。当MySQL服务启动时,它会以这个用户的身份运行,确保MySQL的操作与系统的其他部分隔离开来。

  3. 提高安全性:由于这个用户不能直接登录系统,即使某个MySQL进程被攻击者利用,攻击者也不能通过这个用户获取系统的其他访问权限,从而提高了系统的整体安全性。

简单来说,设置MySQL用户为系统用户,确保这个用户只能用于运行MySQL服务,而不能被用来登录和操作系统,从而增强了系统的安全性。


2.3 配置mysql数据库

2.3.1 创建数据目录data

cd /opt/apps/mysql-5.7.27
mkdir data


2.3.2  修改所有者及所属组

# 先查看,再将/opt/apps/mysql-5.7.27的所有者及所属组改为mysql
chown -R mysql.mysql /opt/apps/mysql-5.7.27

# chown:用于更改文件和目录的所有权。
# -R:   递归地将指定目录及其所有子目录和文件的所有权和所属组都进行修改。
# mysql.mysql:: 指定新的所有者和所属组。前面的 mysql 是用户,后面的 mysql 是组。
# 这表示将 /opt/apps/mysql-5.7.27 目录及其所有内容的所有者和所属组都设置为 mysql 用户和 mysql 组。


2.3.3 编辑 /etc/my.cnf 配置文件

my.cnf:MySQL 启动时会读取该文件中的配置信息以确定服务器的行为和性能参数。

首次安装 MySQL 时,如果是手动安装MySQL(如使用二进制包),则 不会自动生成 my.cnf。需要自己创建此文件。

vi /etc/my.cnf

# 或者使用 touch /etc/my.cnf 命令先创建文件,再在FinalShell双击其打开编辑

配置如下:

[client]
# 指定MySQL服务器的端口号,客户端通过该端口进行网络连接
port = 3306
# 指定客户端使用的socket文件路径,用于与本地MySQL服务器通信
socket = /opt/apps/mysql-5.7.27/data/mysql.sock

[mysqld]
# 设置MySQL的安装目录
basedir = /opt/apps/mysql-5.7.27
# 设置MySQL数据库的数据存放目录
datadir = /opt/apps/mysql-5.7.27/data
# 指定MySQL服务器监听的端口号
port = 3306
# 指定服务器使用的socket文件路径,客户端通过这个文件与服务器通信(不需要通过网络)
socket = /opt/apps/mysql-5.7.27/data/mysql.sock
# 设置MySQL服务器的字符集为UTF-8
character-set-server = utf8
# 指定错误日志的存放路径
log-error = /opt/apps/mysql-5.7.27/data/mysqld.log
# 指定MySQL服务器进程ID文件的存放路径
pid-file = /opt/apps/mysql-5.7.27/data/mysqld.pid

【知识点】

  • [mysqld]: 该部分的设置对 MySQL 服务器生效,必不可少。

  • MySQL 服务器将在 /opt/apps/mysql-5.7.27/data/ 目录下创建一个名为 mysql.sock 的套接字文件,应用程序可以通过该套接字文件与 MySQL 服务器进行本地通信。

  • 在 Unix 和 Linux 系统中,套接字文件通常用于在本地计算机上实现进程之间的高效通信,尤其是客户端和服务器进程之间的通信。

  • 在MySQL中,通常使用套接字文件在本地计算机上与数据库服务器进行通信。客户端应用程序通过套接字文件连接到 MySQL 服务器,而不是通过网络。


2.3.4 初始化Mysql

目的:初始化MySQL数据库会创建MySQL所需的系统表,同时生成一个带有空密码的 root 用户。

cd /opt/apps/mysql-5.7.27

./bin/mysqld --initialize-insecure \
--user=mysql \
--basedir=/opt/apps/mysql-5.7.27/ \
--datadir=/opt/apps/mysql-5.7.27/data/

#解释
--initialize-insecure: 初始化MySQL数据目录,创建系统表和超级管理员用户root@localhost,并生成空密码。。
--user=mysql: 以 mysql 用户身份运行 MySQL 服务器,提高安全性。
--basedir: 指定 MySQL 的安装目录。
--datadir: 指定 MySQL 数据目录,用于存储数据库文件。


2.3.5 初始化完成之后,查看日志信息

cat /opt/apps/mysql-5.7.27/data/mysqld.log 

image-20240922163205856


2.3.6 将启动脚本设置为开机自启

第一种方法:【本教程使用此方法】

# 1. 进入 MySQL 安装目录
cd /opt/apps/mysql-5.7.27

# 2. 将 MySQL提供的启动脚本mysql.server复制到系统的启动脚本目录,并重命名为 mysqld
cp support-files/mysql.server  /etc/init.d/mysqld

# 3. 赋予 mysqld 文件可执行权限
chmod +x /etc/init.d/mysqld

# 4. 将 MySQL 服务添加到系统服务中,并设置为开机自动启动
systemctl enable mysqld

# 5. 重启当前主机
reboot

# 6. 系统重启后,检查 MySQL 服务是否自启成功
# 查看 MySQL 服务的状态,确认服务是否正在运行。【状态为active (running)则成功】
systemctl status mysqld

# 7. 检查 MySQL 进程,确保 MySQL 正在监听指定的端口(通常是 3306)
# netstat -plnt | grep mysql


【知识点】

/etc/init.d/ 目录

  • 作用/etc/init.d/ 目录是 Linux 系统中的一个标准目录,用于存放服务启动脚本。系统在启动时会自动运行这个目录下的脚本来启动或停止各种服务(如 MySQL、Apache 等)。

mysql.server启动脚本

  • mysql.server:是 MySQL 提供的脚本文件,包含了启动、停止、重启 MySQL 服务所需的所有命令。

操作:我们将这个脚本文件复制到 /etc/init.d/ 目录下。这样做是为了将 MySQL 的启动和管理功能集成到系统服务中,使得 MySQL 可以被系统识别和管理。

为什么重命名

  • 为什么重命名:在将 mysql.server 复制到 /etc/init.d/ 目录后,我们将其重命名为 mysqld。这样做是为了使文件名与 MySQL 服务的名称一致,方便使用标准的命令来管理MySQL服务。

  • 作用:重命名为 mysqld 使得我们可以使用标准的  systemctl 命令来管理 MySQL 服务。例如:

    • 启动 MySQL 服务:systemctl start mysqld

    • 停止 MySQL 服务:systemctl stop mysqld

    • 重启 MySQL 服务:systemctl restart mysqld

    • 查看 MySQL 服务的状态:systemctl status mysqld


2.3.7 配置环境变量

vim /etc/profile

# 添加以下内容
# Mysql
export MYSQL_HOME=/opt/apps/mysql-5.7.27
export PATH=$PATH:$MYSQL_HOME/bin

使环境变量配置生效

source /etc/profile
# 查看PATH路径
echo $PATH


2.3.8 更改mysql密码和权限

# 查看mysql服务的状态
systemctl status mysqld

image-20230317134347527

进入mysql并更改root帐户密码 【注意:初次登录是空密码!!!】


# 命令解释
#1.设置当前登录用户(通常是root@localhost用户)的密码为 '123456'
#2.创建'root'@'%' 用户,该用户可以从任意主机(%表示所有主机)进行连接
#3.允许 root 用户从任何 IP 地址('%')登录,并赋予其对所有数据库和所有表的所有权限。
#      WITH GRANT OPTION :root 用户可以使用 GRANT 语句将自己的权限授予其他用户。
#4.刷新 MySQL 的权限系统,以使权限更改立即生效。
#5.查看 root用户的权限和主机的信息,确保root用户的Host字段包含了 '%',表明从任何 IP 地址都可以登录

image-20240922164044059

【知识点】

  1. 执行脚本文件时,必须给 .sh 文件加上可执行权限(x 权限)。

    例如:chmod +x filename.sh

    使用命令:./filename.sh 来执行脚本。如果没有执行权限,脚本无法运行。

  2. 如果不使用 ./ 执行脚本,Linux 会在系统路径(由 PATH 环境变量指定)中查找该脚本。

    因为系统路径中通常不包含脚本文件,所以直接执行脚本可能会失败。

  3. 脚本文件的第一行(例如:!/bin/bash)

    这行代码指定了脚本的解释器。确保这行代码正确无误,以便系统可以找到并使用正确的解释器来执行脚本。


2.3.9 验证mysql是否安装成功:

验证是否成功方法一:

# 命令行使用root用户,密码123456;登录mysql,如能正常登录mysql,则表示mysql安装成功!
mysql -u root -p123456

验证是否成功方法二:

# 查看本机mysql进程,netstat 需要安装 'yum install net-tools'
netstat -plnt | grep mysql
# 命令解释
此命令用于检查系统中 MySQL 服务的状态,特别是它是否在监听指定的端口。以下是该命令的详细解释:
   netstat:一个用于显示网络状态的工具,可以查看网络连接、路由表、接口统计信息等。
   -plnt:这些选项组合指定了 netstat 显示的内容:
   -p:显示与端口相关的进程信息。
   -l:仅显示监听状态的端口。
   -n:以数字形式显示网络地址和端口号,而不是将它们转换为主机名。
   -t:仅显示 TCP 协议的相关信息。
   |:管道符,用于将 netstat 命令的输出传递给 grep 命令进行进一步的筛选。
grep mysql:筛选出包含mysql的行。grep是用于搜索指定字符串的工具,用来查找所有与MySQL服务相关的监听端口。

# 运行后显示以下信息,如果看到有 mysql 的socket处于 LISTEN 状态则表示安装成功。
tcp     0      0 127.0.0.1:3306      0.0.0.0:*     LISTEN    33014/mysqld  
# 解释:
   127.0.0.1:3306:表示 MySQL 服务正在本地 IP 地址 127.0.0.1 的 3306 端口上监听。
   LISTEN:表示该端口正在等待连接请求。
   33014/mysqld:显示了 MySQL 进程的 ID 和名称(mysqld)。

# 综上所述,执行该命令可以快速查找当前系统中所有已经启动的MySQL服务,并显示其监听的端口号。

至此,mysql安装配置完毕。


2.4  记忆:启动和关闭mysql服务器命令:

systemctl start mysqld         # 启动服务
systemctl status mysqld        # 查看服务状态
systemctl stop mysqld          # 停止服务
systemctl restart mysqld       # 重启服务



发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

版权:李翔
备案/许可证编号为:新ICP备2024006115号-1