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?→YDisallow root login remotely?→n因为我们就是要配置远程连接暂时选n也可以选Y后面单独授权Remove test database and access to it?→YReload privilege tables now?→Y3.2 手动设置密码可选如果跳过安全脚本也可以手动设置 root 密码sudomysql-uroot进入 MariaDB 后执行ALTERUSERrootlocalhostIDENTIFIEDBY你的新密码;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保存退出CtrlOEnterCtrlX。注意务必写完整0.0.0.0不要写成0.0.0.等错误形式。4.2 授权 root 用户远程访问登录 MariaDBsudomysql-uroot-p执行以下 SQL 命令注意将你的密码替换为实际密码-- 允许 root 从任意 IP 连接% 代表任意GRANTALLPRIVILEGESON*.*TOroot%IDENTIFIEDBY你的密码WITHGRANTOPTION;-- 如果只允许特定 IP比如你的客户端公网 IP更安全-- GRANT ALL PRIVILEGES ON *.* TO root你的客户端IP IDENTIFIED BY 你的密码 WITH GRANT OPTION;FLUSHPRIVILEGES;验证授权SELECTuser,hostFROMmysql.userWHEREuserroot;应看到类似输出----------------- | User | Host | ----------------- | root | % | | root | localhost | -----------------4.3 重启 MariaDB 服务sudosystemctl restart mariadb4.4 检查端口监听状态sudonetstat-tlnp|grep3306正确输出应包含0.0.0.0:3306表示已监听所有网络接口。5. 配置防火墙与云服务器安全组即使 MariaDB 已允许远程连接操作系统防火墙和云平台安全组仍可能拦截。5.1 Ubuntu UFW 防火墙如果启用查看 UFW 状态sudoufw status如果状态为active放行 3306 端口sudoufw allow3306/tcp5.2 云服务器安全组关键以华为云、阿里云、腾讯云为例登录云控制台进入“云服务器”实例列表。找到你的服务器点击“安全组”或“防火墙”规则。添加入方向规则协议端口TCP:3306源地址0.0.0.0/0允许所有 IP或指定你的客户端公网 IP更安全保存规则。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 新密码;Cant 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未生效或修改错文件确认配置文件路径正确重启服务后再检查netstat8. 安全建议避免直接使用 root 远程连接创建专用用户并仅授予所需数据库的权限CREATEUSERappuser%IDENTIFIEDBYStrongPwd;GRANTALLPRIVILEGESONmydb.*TOappuser%;FLUSHPRIVILEGES;限制允许连接的 IP在安全组或 MariaDB 授权中将%替换为客户端公网 IP 段。使用强密码建议包含大小写字母、数字、特殊字符长度 ≥ 10 位。定期更新 MariaDBsudoaptupdatesudoaptupgrade mariadb-server监控日志错误日志位置/var/log/mysql/error.log9. 轻量级配置优化完整配置如果你的服务器内存有限如 1GB可以使用以下完整配置文件替换/etc/mysql/mariadb.conf.d/50-server.cnf中的[mysqld]段。该配置已在我们之前的实践中验证内存占用约 100MB 左右。操作步骤备份原配置sudocp/etc/mysql/mariadb.conf.d/50-server.cnf /etc/mysql/mariadb.conf.d/50-server.cnf.bak编辑配置文件sudonano/etc/mysql/mariadb.conf.d/50-server.cnf将以下内容粘贴到文件中覆盖原有[mysqld]段其他段如[client]保留不变然后保存退出。重启 MariaDBsudosystemctl 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 官方文档。