news 2026/6/7 1:06:09

Ubuntu 安装 MariaDB 并配置远程连接(轻量级场景完整指南)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ubuntu 安装 MariaDB 并配置远程连接(轻量级场景完整指南)

Ubuntu 安装 MariaDB 并配置远程连接(轻量级场景完整指南)

适用背景

  • 希望在 Ubuntu 服务器上部署一个轻量级的 MariaDB 数据库。
  • 使用场景:仅几个数据库,无并发要求,内存资源有限(如 1GB 云服务器)
  • 需要允许远程客户端(如 dbWeaver、Navicat)连接管理。
  • 追求低内存占用(~100MB 左右),同时保留与 MySQL 的完全兼容性,便于未来迁移。

本文档基于我们成功的安装和配置过程整理而成。


1. 环境准备

  • 服务器:Ubuntu 20.04 / 22.04 / 24.04(已开通 SSH 访问)
  • 云服务器安全组:需开放3306 端口(后续会配置)
  • 本地客户端:图形化工具如 dbWeaver、Navicat、DBeaver 等

2. 安装 MariaDB

使用 apt 安装 MariaDB 服务器和客户端:

sudoaptupdatesudoaptinstallmariadb-server mariadb-client-y

安装完成后,MariaDB 服务会自动启动。检查状态:

sudosystemctl status mariadb

输出包含active (running)即为正常。


3. 安全初始化与设置 root 密码

3.1 运行安全脚本(推荐)

sudomysql_secure_installation

脚本会交互式提问,建议如下回答:

  • Enter current password for root→ 刚安装完无密码,直接回车
  • Switch to unix_socket authentication→ 选择n(使用传统密码认证)
  • Change the root password?→ 选择Y,然后输入你的强密码(例如MyStrongPwd2026!
  • Remove anonymous users?Y
  • Disallow root login remotely?n(因为我们就是要配置远程连接,暂时选n;也可以选Y后面单独授权)
  • Remove test database and access to it?Y
  • Reload privilege tables now?Y

3.2 手动设置密码(可选)

如果跳过安全脚本,也可以手动设置 root 密码:

sudomysql-uroot

进入 MariaDB 后执行:

ALTERUSER'root'@'localhost'IDENTIFIEDBY'你的新密码';FLUSHPRIVILEGES;EXIT;

4. 配置远程连接

默认 MariaDB 只允许本地连接(bind-address = 127.0.0.1),且 root 用户没有远程访问权限。需要两步修改。

4.1 修改bind-address

编辑 MariaDB 配置文件:

sudonano/etc/mysql/mariadb.conf.d/50-server.cnf

找到bind-address行,将其值改为0.0.0.0(监听所有网络接口):

bind-address = 0.0.0.0

保存退出(Ctrl+OEnterCtrl+X)。

注意:务必写完整0.0.0.0,不要写成0.0.0.等错误形式。

4.2 授权 root 用户远程访问

登录 MariaDB:

sudomysql-uroot-p

执行以下 SQL 命令(注意将'你的密码'替换为实际密码):

-- 允许 root 从任意 IP 连接(% 代表任意)GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'你的密码'WITHGRANTOPTION;-- 如果只允许特定 IP(比如你的客户端公网 IP),更安全:-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'你的客户端IP' IDENTIFIED BY '你的密码' WITH GRANT OPTION;FLUSHPRIVILEGES;

验证授权:

SELECTuser,hostFROMmysql.userWHEREuser='root';

应看到类似输出:

+------+-----------+ | User | Host | +------+-----------+ | root | % | | root | localhost | +------+-----------+

4.3 重启 MariaDB 服务

sudosystemctl restart mariadb

4.4 检查端口监听状态

sudonetstat-tlnp|grep3306

正确输出应包含0.0.0.0:3306,表示已监听所有网络接口。


5. 配置防火墙与云服务器安全组

即使 MariaDB 已允许远程连接,操作系统防火墙和云平台安全组仍可能拦截。

5.1 Ubuntu UFW 防火墙(如果启用)

查看 UFW 状态:

sudoufw status

如果状态为active,放行 3306 端口:

sudoufw allow3306/tcp

5.2 云服务器安全组(关键)

以华为云、阿里云、腾讯云为例:

  1. 登录云控制台,进入“云服务器”实例列表。
  2. 找到你的服务器,点击“安全组”或“防火墙”规则。
  3. 添加入方向规则:
    • 协议端口TCP:3306
    • 源地址0.0.0.0/0(允许所有 IP)或指定你的客户端公网 IP(更安全)
  4. 保存规则。

6. 测试远程连接

在本地电脑上使用图形化工具(如 dbWeaver、Navicat、DBeaver)进行连接测试:

  • 主机:服务器公网 IP
  • 端口:3306
  • 用户名:root
  • 密码:你设置的密码

连接成功即配置完成。


7. 常见问题排查

错误信息原因解决方法
Host 'xx.xx.xx.xx' is not allowed to connect没有授权远程访问或bind-address未改检查SELECT user,host是否有'root'@'%';检查bind-address是否为0.0.0.0并重启
Access denied for user 'root'@'...' (using password: YES)密码错误重新设置密码:ALTER USER 'root'@'%' IDENTIFIED BY '新密码';
Can't connect to MySQL server on '...' (timed out)防火墙/安全组未放行 3306 端口检查云安全组入方向规则,以及服务器本机ufw状态
bind-address = 0.0.0.配置错误少写了一个0修正为0.0.0.0并重启
端口监听显示127.0.0.1:3306bind-address未生效或修改错文件确认配置文件路径正确,重启服务后再检查netstat

8. 安全建议

  1. 避免直接使用 root 远程连接
    创建专用用户,并仅授予所需数据库的权限:

    CREATEUSER'appuser'@'%'IDENTIFIEDBY'StrongPwd';GRANTALLPRIVILEGESONmydb.*TO'appuser'@'%';FLUSHPRIVILEGES;
  2. 限制允许连接的 IP
    在安全组或 MariaDB 授权中将'%'替换为客户端公网 IP 段。

  3. 使用强密码
    建议包含大小写字母、数字、特殊字符,长度 ≥ 10 位。

  4. 定期更新 MariaDB

    sudoaptupdate&&sudoaptupgrade mariadb-server
  5. 监控日志
    错误日志位置:/var/log/mysql/error.log


9. 轻量级配置优化(完整配置)

如果你的服务器内存有限(如 1GB),可以使用以下完整配置文件替换/etc/mysql/mariadb.conf.d/50-server.cnf中的[mysqld]段。该配置已在我们之前的实践中验证,内存占用约 100MB 左右。

操作步骤

  1. 备份原配置:
    sudocp/etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak
  2. 编辑配置文件:
    sudonano/etc/mysql/mariadb.conf.d/50-server.cnf
  3. 将以下内容粘贴到文件中(覆盖原有[mysqld]段,其他段如[client]保留不变),然后保存退出。
  4. 重启 MariaDB:
    sudosystemctl restart mariadb

完整配置文件内容(轻量级专用)

# # MariaDB 轻量级配置文件(适用于单库/无并发/低内存环境) # 内存占用约 100-150MB # [mysqld] # ------------------------------------------------ # 基础路径 # ------------------------------------------------ user = mysql pid-file = /run/mysqld/mysqld.pid socket = /run/mysqld/mysqld.sock port = 3306 basedir = /usr datadir = /var/lib/mysql tmpdir = /tmp lc-messages-dir = /usr/share/mysql skip-external-locking # ------------------------------------------------ # 内存核心优化(轻量关键) # ------------------------------------------------ # 关闭性能监控(节省 80-120MB) performance_schema = OFF # InnoDB 缓冲池(1GB 内存建议 256M,如内存紧张可降至 128M) innodb_buffer_pool_size = 256M # InnoDB 日志文件大小(配合小缓冲池) innodb_log_file_size = 64M # InnoDB 刷写策略(降低磁盘IO) innodb_flush_log_at_trx_commit = 2 innodb_flush_method = O_DIRECT # 临时表内存限制(避免写磁盘) tmp_table_size = 16M max_heap_table_size = 16M # 关闭废弃的查询缓存 query_cache_size = 0 query_cache_type = 0 # ------------------------------------------------ # 连接与并发限制(无并发场景) # ------------------------------------------------ max_connections = 20 thread_cache_size = 4 table_open_cache = 200 table_definition_cache = 200 # 会话级缓冲区(每个连接分配,设小值) sort_buffer_size = 256K read_buffer_size = 128K read_rnd_buffer_size = 256K join_buffer_size = 256K net_buffer_length = 2K # ------------------------------------------------ # 日志优化(按需启用慢查询,禁用二进制日志) # ------------------------------------------------ # 如需主从复制,请注释下行;无复制需求则关闭二进制日志 skip-log-bin # 慢查询日志(便于日后排查,体积小,保持开启) slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 2 log_queries_not_using_indexes = 0 # 错误日志(保持默认) log_error = /var/log/mysql/error.log # ------------------------------------------------ # 字符集与兼容性(与 MySQL 完全一致) # ------------------------------------------------ character-set-server = utf8mb4 collation-server = utf8mb4_general_ci init-connect = 'SET NAMES utf8mb4' # 兼容 MySQL 5.7/8.0 的 SQL 模式 sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION" # 默认存储引擎(与 MySQL 保持一致) default-storage-engine = InnoDB # ------------------------------------------------ # 其他优化 # ------------------------------------------------ symbolic-links = 0 innodb_file_per_table = 1 connect_timeout = 10 wait_timeout = 600 interactive_timeout = 28800 max_allowed_packet = 16M # ------------------------------------------------ # MyISAM 相关(基本不用,保留默认小值) # ------------------------------------------------ key_buffer_size = 8M myisam_recover_options = BACKUP # ------------------------------------------------ # 监听地址(允许远程连接) # ------------------------------------------------ bind-address = 0.0.0.0 # 结束

如有其他问题,欢迎查阅 MariaDB 官方文档。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/7 1:06:05

AI agent不必非要是chat的样子

这段时间一直在迭代我的ai agent框架,虽然,它基本的形态也和其它agent一样是chatbot的样子。但,在实际应用这个框架开发AI SaaS的时候,不必非要是chatbot。完全可以是表单的样子,去调用Agent - Tool循环,甚…

作者头像 李华
网站建设 2026/6/7 0:54:31

3步上手Windows自动化神器:Pulover‘s Macro Creator新手完全指南

3步上手Windows自动化神器:Pulovers Macro Creator新手完全指南 【免费下载链接】PuloversMacroCreator Automation Utility - Recorder & Script Generator 项目地址: https://gitcode.com/gh_mirrors/pu/PuloversMacroCreator 你是否每天重复着相同的电…

作者头像 李华
网站建设 2026/6/7 0:46:59

跟着 MDN 学JavaScript day_6:JavaScript 中的基础数学——数字与运算符

引言 编程的本质是对数据的处理与运算,而在所有数据类型中,数字无疑是最基础也最频繁被操作的对象。无论是计算购物车总价、控制游戏角色的移动距离、还是实现页面元素的动态缩放,都离不开数学运算。JavaScript 作为一门功能完备的编程语言&a…

作者头像 李华
网站建设 2026/6/7 0:44:10

告别重复编码,用快马平台高效生成可定制sweezy光标效果库

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 请生成一个功能丰富的sweezy光标效果效率工具页面,核心功能包括:一个主视觉区域,默认使用一个平滑的粒子流光标,粒子会随鼠标移动方…

作者头像 李华
网站建设 2026/6/7 0:36:25

CSDN GEO优化内容发布后,你必须在19分钟内完成这4项操作:否则AI大模型将默认“该地域无权威信源”——基于LLaMA-3微调日志的首次披露

更多请点击: https://codechina.net 第一章:CSDN AI 数字营销的 GEO 优化内容多久会被各大 AI 大模型收录? CSDN AI 数字营销平台生成的 GEO(地理围栏)优化内容,其被主流 AI 大模型收录的时间并非由 CSDN …

作者头像 李华
网站建设 2026/6/7 0:29:29

网盘直链下载助手:免费解锁8大网盘高速下载的终极指南

网盘直链下载助手:免费解锁8大网盘高速下载的终极指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

作者头像 李华