【MySQL】1. MySQL安装

目录

  • 1.安装MySQL
    • [第一步:更新 Ubuntu 系统软件源](#第一步:更新 Ubuntu 系统软件源)
    • [第二步:安装 MySQL 服务器](#第二步:安装 MySQL 服务器)
    • [第三步:安全初始化配置 MySQL(关键步骤)](#第三步:安全初始化配置 MySQL(关键步骤))
    • [第四步:验证 MySQL 服务运行状态](#第四步:验证 MySQL 服务运行状态)
    • [第五步:登录 MySQL 数据库,验证安装结果](#第五步:登录 MySQL 数据库,验证安装结果)
    • 总结
  • [2. 相关配置](#2. 相关配置)
    • [2.1 MySQL 配置文件核心存放位置](#2.1 MySQL 配置文件核心存放位置)
    • [2.2 配置修改](#2.2 配置修改)
      • [2.2.1 推荐修改配置](#2.2.1 推荐修改配置)
      • [2.2.2 配置修改后的后续操作](#2.2.2 配置修改后的后续操作)
  • [3. 相关问题](#3. 相关问题)

1.安装MySQL

(默认安装 Ubuntu22.04 官方源中的 MySQL 8.0 版本,最稳定且推荐):

第一步:更新 Ubuntu 系统软件源

首先登录 Ubuntu22.04(桌面版或服务器版均可),打开终端(桌面版可通过Ctrl+Alt+T快速调出),执行更新命令,确保系统软件包列表最新,避免安装依赖冲突:

bash 复制代码
sudo apt update
sudo apt upgrade -y  # 可选,升级已安装的软件包,提升系统稳定性

执行时会提示输入当前用户的密码(输入时终端不显示明文,输入完成回车即可),sudo表示以管理员权限执行命令。

第二步:安装 MySQL 服务器

Ubuntu22.04 的官方软件源中已包含 MySQL 服务器包,直接通过apt命令安装即可,命令如下:

bash 复制代码
sudo apt install mysql-server -y

安装过程无需手动干预,系统会自动下载、解压并配置 MySQL 的基础运行环境,包括创建 MySQL 系统用户、生成默认配置文件等。

第三步:安全初始化配置 MySQL(关键步骤)

MySQL 安装完成后,默认安全性较低(如允许匿名用户登录、无密码验证等),需通过官方提供的mysql_secure_installation脚本进行安全配置,执行命令:

bash 复制代码
sudo mysql_secure_installation

执行后会进入交互式配置流程,按以下步骤逐一操作:

  1. 是否启用 MySQL 密码验证组件(VALIDATE PASSWORD COMPONENT)

    提示:Would you like to setup VALIDATE PASSWORD component?

    输入y(是),回车(该组件用于校验密码强度,提升安全性,推荐启用)。

  2. 设置密码强度级别

    提示:There are three levels of password validation policy:

    可选 3 个级别:0(低,仅需密码长度≥8)、1(中,需包含数字、小写字母、大写字母 / 特殊字符)、2(高,需包含数字、大小写字母、特殊字符且不能包含用户名 / 常见字符串)。

    输入对应数字(推荐1,兼顾安全性和易用性),回车。

  3. 设置 MySQL root 用户密码

    提示:Please set the password for root here.

    输入你要设置的 root 密码(建议符合强度要求,如Root@123456),回车,然后再次输入相同密码确认,回车。

  4. 删除匿名用户

    提示:Remove anonymous users?

    输入y,回车(匿名用户存在安全风险,禁止匿名登录)。

  5. 禁止 root 用户远程登录

    提示:Disallow root login remotely?

    先输入y,回车(默认禁止 root 远程登录,如需远程连接,后续可单独配置专用用户,更安全)。

  6. 删除测试数据库(test)

    提示:Remove test database and access to it?

    输入y,回车(test 数据库为默认测试用,无实际业务用途,删除可减少安全隐患)。

  7. 刷新权限表,使配置生效

    提示:Reload privilege tables now?

    输入y,回车(立即刷新 MySQL 的权限配置,无需重启服务即可生效)。

Disallow root login remotely? 这个问题选择y还是n

答:推荐选择 y(禁止 root 用户远程登录)

第四步:验证 MySQL 服务运行状态

MySQL 安装完成后会自动启动,并设置为开机自启,可通过以下命令验证服务是否正常运行:

bash 复制代码
# 查看MySQL服务状态
sudo systemctl status mysql

若输出结果中包含active (running)(绿色字体),说明 MySQL 服务已正常启动。

补充相关服务管理命令(后续可按需使用):

bash 复制代码
# 启动MySQL服务(若未启动)
sudo systemctl start mysql

# 停止MySQL服务
sudo systemctl stop mysql

# 重启MySQL服务(配置修改后需生效时使用)
sudo systemctl restart mysql

# 设置MySQL开机自启(默认已开启,可再次确认)
sudo systemctl enable mysql

第五步:登录 MySQL 数据库,验证安装结果

Ubuntu22.04 中安装的 MySQL 8.0,默认对本地root用户采用auth_socket认证方式(而非密码认证),因此本地登录有两种方式:

方式 1:无需密码,直接以管理员身份登录(推荐本地操作)

bash 复制代码
sudo mysql -u root

执行后直接进入 MySQL 的命令行界面(提示符变为mysql>),表示登录成功。

方式 2:通过密码登录(需修改 root 用户认证方式)

若想通过mysql -u root -p输入密码登录,需先修改 root 用户的认证插件为mysql_native_password,步骤如下:

  1. 先通过方式 1 登录 MySQL 命令行,执行以下 SQL 语句(替换'你的root密码'为第三步设置的密码):
sql 复制代码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的root密码';
-- 刷新权限,使修改生效
FLUSH PRIVILEGES;
  1. 执行exit;退出 MySQL 命令行,然后通过密码登录:
bash 复制代码
mysql -u root -p
  1. 输入第三步设置的 root 密码,回车即可登录 MySQL 命令行。

验证登录成功

进入 MySQL 命令行后,可执行简单 SQL 语句验证功能正常:

sql 复制代码
-- 查看MySQL版本
SELECT VERSION();
-- 查看所有数据库
SHOW DATABASES;

执行后会返回对应结果,说明 MySQL 运行正常,安装完成。

总结

  1. 核心流程:更新软件源 → 安装mysql-server → 安全初始化mysql_secure_installation → 验证服务与登录。
  2. 关键注意点:Ubuntu22.04 的 MySQL 8.0 默认采用auth_socket本地认证,密码登录需修改认证插件。
  3. 远程访问需配置:绑定 0.0.0.0 + 创建远程用户 + 开放 3306 端口 + 重启 MySQL。
  4. 验证标准:能进入mysql>命令行并执行 SQL 语句,即为安装成功。

2. 相关配置

2.1 MySQL 配置文件核心存放位置

Ubuntu 22.04 中的 MySQL 8.0,核心配置文件(服务端配置)/etc/mysql/mysql.conf.d/mysqld.cnf,所有关于 MySQL 服务端的配置(端口、数据目录、编码、存储引擎等)都在这个文件中修改。

补充说明:

  1. 全局配置文件 /etc/mysql/my.cnf:该文件通常不直接编辑,它会通过 !includedir 指令包含其他目录下的配置文件(包括 mysql.conf.d 目录),起到统一整合配置的作用。
  2. 编辑配置文件需要管理员权限,推荐使用 nanovim 编辑,例如:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

2.2 配置修改

2.2.1 推荐修改配置

sql 复制代码
[mysqld]
# 1. 端口号
port = 3306
# 2. 数据目录
datadir = /var/lib/mysql
# 3. Socket文件(默认)
socket = /var/run/mysqld/mysqld.sock
# 4. 完整UTF-8编码配置
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 5. 默认存储引擎
default-storage-engine = InnoDB

# 以下为文件原有默认配置,保留即可,无需修改
pid-file        = /var/run/mysqld/mysqld.pid
user            = mysql
# ... 其他原有配置

2.2.2 配置修改后的后续操作

  1. 保存配置并退出编辑

    • 若使用 nano 编辑:按 Ctrl+O 保存,按 Ctrl+X 退出。
    • 若使用 vim 编辑:按 Esc,输入 :wq 回车保存退出。
  2. 验证配置语法(避免语法错误导致服务无法启动)

    bash 复制代码
    sudo mysqld --help --verbose | grep -E 'port|datadir|character-set-server'

    若输出无报错,且能看到你配置的参数值,说明语法无误。

  3. 重启 MySQL 服务,使配置生效

    bash 复制代码
    sudo systemctl restart mysql
  4. 验证配置是否生效(登录 MySQL 命令行执行以下 SQL)

    sql 复制代码
    -- 查看端口、编码、存储引擎等配置信息
    SHOW VARIABLES LIKE 'port';
    SHOW VARIABLES LIKE 'datadir';
    SHOW VARIABLES LIKE 'character_set_server';
    SHOW VARIABLES LIKE 'default_storage_engine';

    输出结果与你配置的内容一致,即表示配置生效。

总结:

  1. 核心配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf[mysqld] 节点下修改)。
  2. 5 项配置核心:端口 3306、数据目录/var/lib/mysql、socket 默认保留、编码utf8mb4、存储引擎InnoDB
  3. 关键步骤:修改后重启 MySQL 服务,通过 SQL 语句验证配置是否生效。
  4. 编码避坑:MySQL 中优先使用 utf8mb4 而非 utf8,兼容完整标准 UTF-8。

3. 相关问题

在/var/lib/mysql中有binlog.000095类似这种文件,从1到100多,这是什么文件?

/var/lib/mysql 目录下 binlog.000095 这类序号递增文件的含义,其实这些文件是 MySQL 的二进制日志文件(Binary Log,简称 binlog) ,是 MySQL 中非常重要的日志类型。binlog 主要记录了 MySQL 中所有对数据库数据产生修改的操作(增、删、改,即 DML 操作;以及建库、建表等 DDL 操作) ,不会记录查询操作(如 SELECTSHOW)。

正确的 binlog 删除方式(推荐 2 种,禁止直接 rm)

方式 1:配置自动过期清理(推荐,长期省心,无人工失误风险)

这是最优解,通过 MySQL 配置自动清理过期 binlog,无需手动干预,且会自动更新binlog.index索引文件,步骤如下:

  1. 编辑 MySQL 配置文件/etc/mysql/mysql.conf.d/mysqld.cnf

    bash 复制代码
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. [mysqld]节点下添加过期清理配置(以保留 7 天为例):

    ini 复制代码
    # MySQL 8.0 推荐配置(单位:秒,604800秒=7天)
    binlog_expire_logs_seconds = 604800

    补充:若为 MySQL 5.7,可配置expire_logs_days = 7(单位:天),MySQL 8.0 也兼容该配置,但优先推荐binlog_expire_logs_seconds(精度更高)。

  3. 保存退出,重启 MySQL 服务使配置生效:

    bash 复制代码
    sudo systemctl restart mysql
  4. 生效后,MySQL 会自动检测并清理超过 7 天的 binlog 文件,且同步更新binlog.index,安全无风险。

方式 2:通过 MySQL 命令手动清理(规范操作,适合临时清理)

若需要临时清理部分 binlog 文件,必须通过 MySQL 内置命令执行(而非rm),命令会自动更新binlog.index,步骤如下:

  1. 登录 MySQL 命令行(sudo mysql -u root)。

  2. 执行以下清理命令(二选一,谨慎操作):

    sql 复制代码
    -- 方式A:删除所有序号小于 binlog.000095 的binlog文件(保留 binlog.000095 及以后的文件)
    PURGE BINARY LOGS TO 'binlog.000095';
    
    -- 方式B:删除2026-01-01 00:00:00 之前生成的所有binlog文件(替换为你的目标时间)
    PURGE BINARY LOGS BEFORE '2026-01-01 00:00:00';
  3. 执行完成后,退出 MySQL 命令行,可通过cat /var/lib/mysql/binlog.index验证,被删除的 binlog 文件名已从索引文件中移除。

...过云雨-CSDN博客

相关推荐
Shea3012 小时前
如何优化深度分页的性能问题
mysql
紫微AI2 小时前
文件系统就是新的数据库:我是如何为 AI Agent 构建个人操作系统的
数据库·人工智能
小红卒2 小时前
Redis数据库四种getshell方法研究
数据库·redis·网络安全
Coder_Boy_2 小时前
技术交流总结:分布式、数据库、Spring及SpringBoot核心知识点梳理
数据库·spring boot·分布式·spring·微服务
专注VB编程开发20年2 小时前
单服务器的 IIS + ASP.NET页面来说不需要redis
数据库·redis·缓存
知识分享小能手2 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019 新增功能 — 语法知识点及使用方法详解(20)
数据库·学习·sqlserver
禹凕2 小时前
MySQL ALTER 命令详解:灵活修改表结构的终极指南
数据库·mysql
Coder_Boy_2 小时前
技术交流总结:分布式、数据库、Spring及SpringBoot核心知识点梳理(实现参考)
数据库·spring boot·分布式·spring·架构
想不明白的过度思考者2 小时前
Spring Boot 实战:MyBatis 操作数据库(上)
java·数据库·spring boot·mysql·mybatis