Ubuntu MariaDB网络配置与优化
小樊
38
2025-12-22 13:24:32
Ubuntu MariaDB网络配置与优化
一 基础网络配置
修改 MariaDB 监听地址
编辑配置文件:/etc/mysql/mariadb.conf.d/50-server.cnf ,在 [mysqld] 段将 bind-address 设为 0.0.0.0 (监听所有 IPv4)或指定内网地址;如需仅本地使用可保留 127.0.0.1 。同时确保未启用 skip-networking (该选项会禁用 TCP 网络)。修改后重启服务:sudo systemctl restart mariadb 。完成后可用 ss -tulnp | grep 3306 或 netstat -an | grep 3306 检查监听是否生效。
防火墙放行
使用 ufw :sudo ufw allow 3306/tcp 并 sudo ufw reload ;如使用 firewalld :sudo firewall-cmd --permanent --add-service=mysql && sudo firewall-cmd --reload 。
创建远程访问账户与授权
登录数据库:sudo mysql -u root -p ,创建用户并授权(示例:用户 remote_user 、密码 your_password 、允许来自任意主机 % ):
CREATE USER ‘remote_user’@‘%’ IDENTIFIED BY ‘your_password’;
GRANT ALL PRIVILEGES ON . TO ‘remote_user’@‘%’ WITH GRANT OPTION;
FLUSH PRIVILEGES;
如需仅允许内网网段,可将 ‘%’ 替换为如 ‘192.168.1.%’ 。
连接测试
从客户端测试:mysql -h <服务器IP> -u remote_user -p 。若仍失败,复核监听地址、防火墙与账户主机限制。
二 安全与访问控制
运行安全初始化:sudo mysql_secure_installation ,按提示设置 root 密码、移除匿名用户、禁止 root 远程登录、删除 test 数据库等。
最小权限原则:避免使用 ‘root’@‘%’ 远程登录,按业务创建专用账户并限制来源网段与库表权限。
网络最小化暴露:仅在内网开放 3306/TCP ,必要时通过跳板机或 SSH 隧道 访问;云环境建议配合 安全组 仅放通可信来源。
三 网络与连接性能优化
连接与会话
合理设置 max_connections (避免过大导致线程争用与内存膨胀),并结合应用连接池(如 HikariCP、连接复用)控制实际并发。
适度提高 thread_cache_size ,减少线程创建/销毁开销。
超时与缓冲
调整 wait_timeout 与 interactive_timeout ,避免空闲连接长期占用。
根据业务负载调整 max_allowed_packet ,避免大包被截断或报错。
日志与诊断
启用 slow_query_log 与 long_query_time ,配合 EXPLAIN 与 SHOW PROCESSLIST 定位慢查询与阻塞会话。
存储与引擎
使用 InnoDB 并优先配置 innodb_buffer_pool_size (建议为可用内存的约 50%–70% ,视负载与实例共存情况微调)。
适度增大 innodb_log_file_size 提升写吞吐;在允许一定持久性权衡的场景下,可将 innodb_flush_log_at_trx_commit=2 提升性能。
监控与容量
使用 mysqladmin status 、SHOW STATUS 、SHOW PROCESSLIST 与系统工具(如 top/htop、iostat、ss )持续观察连接数、线程、I/O 与查询延迟,结合容量规划逐步调优。
四 快速排障清单
服务与监听:确认 sudo systemctl status mariadb 为 active;用 ss -tulnp | grep 3306 检查是否在 0.0.0.0:3306 监听。
防火墙/安全组:核对 ufw/firewalld 或云安全组已放行 3306/TCP ,来源网段正确。
账户权限:确认存在允许远程的来源主机(如 ‘user’@‘%’ 或 ‘user’@‘192.168.1.%’ ),并已 FLUSH PRIVILEGES 。
端口连通性:从客户端执行 mysql -h -u -p ;必要时在服务器侧抓包或临时关闭防火墙验证。
错误码速查:ERROR 1130 (HY000) 多为来源主机未被授权;ERROR 2003 多为端口不通或监听地址不当。
五 推荐的配置片段与核对项
配置片段(/etc/mysql/mariadb.conf.d/50-server.cnf 的 [mysqld] 段,按需调整)
bind-address = 0.0.0.0
port = 3306
skip-networking = 0
max_connections = 200
thread_cache_size = 50
wait_timeout = 300
interactive_timeout = 300
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mariadb-slow.log
long_query_time = 1
innodb_buffer_pool_size = 4G(示例值,建议为内存的 50%–70%)
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2
max_allowed_packet = 64M
修改后执行:sudo systemctl restart mariadb 并用 ss -tulnp | grep 3306 复核监听。