当前位置: 首页 > news >正文

Ubuntu 24.04 MariaDB 完整安装与配置文档

Ubuntu 24.04 MariaDB 完整安装与配置文档

本文整合了 MariaDB 的安装、安全配置、本地使用及远程访问(含 root 远程授权)全流程,步骤连贯且兼顾安全性,适合新手快速上手与进阶用户参考。

一、前提准备:更新系统包

安装前先更新软件包列表,确保依赖兼容且最新:

sudo apt update && sudo apt upgrade -y

二、安装 MariaDB

Ubuntu 24.04 官方源内置 MariaDB 10.11(LTS 稳定版),无需额外添加仓库,直接通过 apt 安装:

sudo apt install -y mariadb-server mariadb-client libmariadb3 libmariadb-dev
  • mariadb-server:服务器核心包(必装,提供数据库运行环境)
  • mariadb-client:命令行客户端(用于连接操作数据库,显式指定更稳妥)

三、服务管理:启动与开机自启

安装后服务默认自动启动,如需手动操作或确认状态:

# 启动服务(未自动启动时使用)
sudo systemctl start mariadb# 设置开机自启(默认已启用,执行可确认)
sudo systemctl enable mariadb# 查看服务状态(验证是否正常运行)
sudo systemctl status mariadb
  • 正常运行时,输出会显示 active (running),无报错信息。

四、安全初始化配置(关键步骤)

默认安装存在空密码、匿名用户等安全隐患,需通过官方脚本优化:

sudo mysql_secure_installation

执行后按以下推荐配置完成交互提问:

提问内容推荐操作说明
Enter current password for root (enter for none)直接回车初始状态 root 无密码
Switch to unix_socket authentication? (Y/n)Y本地登录无需密码,更安全
Set root password? (Y/n)Y需远程登录则设置强密码(如 MariaDB@2024
New password: / Re-enter new password:输入并重复密码密码需含大小写、数字、特殊字符
Remove anonymous users? (Y/n)Y禁止无账号登录
Disallow root login remotely? (Y/n)Y默认禁止 root 远程(后续需开启可单独配置)
Remove test database and access to it? (Y/n)Y删除无用测试数据库,降低风险
Reload privilege tables now? (Y/n)Y立即重载权限表,使配置生效

五、本地登录与安装验证

1. 本地登录方式

  • 启用 unix_socket 认证(推荐):无需密码,直接执行
    sudo mysql -u root
    
  • 禁用 unix_socket 认证:需输入密码登录
    mysql -u root -p
    

2. 验证 MariaDB 版本

登录后执行以下命令,确认安装版本(默认10.11.x):

SELECT VERSION();

输出示例:10.11.13-MariaDB-0ubuntu0.24.04.1

六、基本操作(常用 SQL 命令)

登录后执行以下命令(结尾需加 ;):

操作需求命令
查看所有数据库SHOW DATABASES;
创建新数据库CREATE DATABASE mydb;(mydb 为自定义数据库名)
切换使用数据库USE mydb;
创建数据表CREATE TABLE users (id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50));
插入数据INSERT INTO users (name) VALUES ('Alice'), ('Bob');
查询数据SELECT * FROM users;
退出数据库EXIT;quit;

七、远程访问配置(含 root 远程授权)

如需从其他机器连接 MariaDB,按以下步骤配置(优先推荐专用用户,root 远程仅用于测试/受控环境):

1. 方案一:创建专用远程用户(推荐,更安全)

-- 登录本地 MariaDB
sudo mysql -u root-- 创建用户(username 为用户名,password 为强密码,% 允许所有 IP 访问)
CREATE USER 'username'@'%' IDENTIFIED BY 'password';-- 授权访问指定数据库(如 mydb,或用 *.* 授权所有数据库)
GRANT ALL PRIVILEGES ON mydb.* TO 'username'@'%' WITH GRANT OPTION;-- 刷新权限
FLUSH PRIVILEGES;

2. 方案二:授权 root 远程登录(不推荐生产环境)

保留本地 'root'@'localhost' 安全登录,额外添加远程 root 用户:

-- 登录本地 MariaDB
sudo mysql -u root-- 查看现有 root 用户
SELECT Host, User, plugin FROM mysql.user WHERE User = 'root';-- 创建远程 root 用户(设置强密码)
CREATE USER 'root'@'%' IDENTIFIED BY 'lihaozhe';-- 授予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;-- 刷新权限
FLUSH PRIVILEGES;-- 确认用户创建成功
SELECT Host, User FROM mysql.user WHERE User = 'root';

3. 配置 MariaDB 监听所有接口

编辑配置文件,允许外部 IP 连接:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

找到 [mysqld] 段,修改 bind-address

[mysqld]
# 允许所有 IPv4 地址访问(IPv6 可设为 ::)
bind-address = 0.0.0.0

保存后重启服务:

sudo systemctl restart mariadb

八、防火墙配置(允许远程访问)

根据系统防火墙工具,开放 MariaDB 默认端口 3306

# 若使用 UFW(Ubuntu 默认)
sudo ufw allow 3306/tcp
sudo ufw status  # 验证规则生效# 若使用 firewalld(CentOS/RHEL)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

远程连接验证

从另一台机器执行以下命令,测试连接:

mysql -h 服务器IP -u 用户名(root/专用用户名) -p

九、常见问题解决

1. 本地登录提示密码错误

# 停止 MariaDB 服务
sudo systemctl stop mariadb# 跳过权限验证启动
sudo mysqld_safe --skip-grant-tables &# 无密码登录
mysql -u root# 重置 root 密码并启用 unix_socket 认证
USE mysql;
UPDATE user SET authentication_string=PASSWORD('新密码'), plugin='unix_socket' WHERE User='root';
FLUSH PRIVILEGES;
EXIT;# 重启服务
sudo systemctl restart mariadb

2. 远程连接失败

  1. 确认 bind-address 已改为 0.0.0.0 并重启服务;
  2. 确认远程用户已创建并授权,且密码正确;
  3. 确认防火墙已开放 3306 端口;
  4. 检查服务器安全组(云服务器需额外开放 3306 端口)。

十、卸载 MariaDB(如需)

彻底卸载 MariaDB 及配置、数据:

# 停止服务
sudo systemctl stop mariadb# 卸载软件包
sudo apt purge -y mariadb-server mariadb-client# 删除配置文件和数据目录
sudo rm -rf /etc/mysql/ /var/lib/mysql/# 清理依赖
sudo apt autoremove -y && sudo apt autoclean

十一、安全建议

  1. 生产环境禁用 'root'@'%',使用最小权限的专用远程用户;
  2. 限制远程用户的来源 IP(如 'user'@'192.168.1.%'),而非 %
  3. 使用强密码,建议启用 SSL 加密连接;
  4. 避免直接暴露 3306 端口,可通过 SSH 隧道连接。

如需更复杂配置(主从复制、性能优化),可参考 MariaDB 官方文档。

http://www.dtcms.com/a/605348.html

相关文章:

  • [特殊字符] 在 Linux 上设置 SQLite
  • Arbess从初级到进阶(2) - 使用Arbess+GitLab实现Vue.js项目自动化部署
  • 网站开发外文参考文献邯郸小学网站建设
  • C语言编译器最新版 | 提升开发效率,优化性能
  • 手游网站怎么做企业型网站
  • 用Rust实现二进制文件差异工具
  • 代理IP的匿名性测试:如何验证你的真实IP是否已泄露?
  • FreeRTOS 在 AS32系列RISC-V 架构MCU电机驱动中的应用实践与优化
  • 【OpenCV + VS】 图像像素类型转换与归一化
  • 用 Rust 写一个可落地的目录实时监听器:跨平台文件系统事件的可靠表达与工程实践
  • Linux网络--Socket 编程 TCP
  • 【一文了解】C#反射
  • 网站建设seo推广外贸网站建设海外推广
  • 网站ip域名查询安徽省住房城乡建设厅网站电工
  • 202511-Selenium技术深度解析:Web自动化测试的王者之路
  • Android 打开 在线 pdf 文件
  • Python 教程:如何快速在 PDF 中添加水印(文字、图片)
  • 普中51单片机学习笔记-矩阵按键
  • 视觉语言模型新突破!开源项目解读
  • 深圳南山区住房和建设局网站官网天天向上做图网站
  • 微算法科技(NASDAQ MLGO)通过容量证明(PoC)构建全球存储资源池,为Web3应用提供低成本、抗审查的数据存储服务
  • 08-微服务原理篇(Canal-Redis)
  • 填写网站备案信息深圳建设材料价格网站
  • 【Spring Boot 报错已解决】Spring Boot开发避坑指南:Hibernate实体类主键配置详解与异常修复
  • 【CSS】cursor: auto, default, none 有什么区别?
  • 网站备案负责人三网合一营销型全网站
  • 7.2 Dify核心功能与技术架构:前后端分离、API接口、数据存储
  • 观察Springboot AI-Function Tools 执行过程
  • 信贷风控建设的多维意义解析
  • 如何在产品已上线后发现需求遗漏进行补救