MariaDB在Ubuntu上的故障排查思路
首先确认MariaDB服务是否正在运行,使用systemctl命令查看服务状态:
sudo systemctl status mariadb
若服务未运行(显示“inactive”或“failed”),尝试启动服务:
sudo systemctl start mariadb
若启动失败,需进一步排查错误原因(如查看日志)。
错误日志是定位MariaDB故障的核心依据,默认路径为/var/log/mysql/error.log(或/var/log/mariadb/mariadb.log)。使用以下命令查看最新日志:
sudo tail -n 50 /var/log/mysql/error.log
日志中会记录启动失败、连接拒绝、权限问题、查询错误等关键信息,帮助快速定位故障根源。
MariaDB的主配置文件通常位于/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf),需检查以下关键配置:
0.0.0.0(允许所有IP访问)或特定IP;本地连接可保留127.0.0.1。socket配置项指向的路径存在且可写(如/var/run/mysqld/mysqld.sock)。sudo systemctl restart mariadb
```。
### **4. 权限与所有权修复**
MariaDB的数据目录(通常为`/var/lib/mysql`)和日志文件需属于`mysql`用户和组,权限设置为`755`(目录)或`644`(文件)。使用以下命令修复:
```bash
sudo chown -R mysql:mysql /var/lib/mysql
sudo chmod -R 755 /var/lib/mysql
若权限问题导致服务无法启动,修复后重启服务即可。
MariaDB默认使用3306端口,需确保防火墙允许该端口的流量:
ufw防火墙,执行:sudo ufw allow 3306/tcp
sudo ufw reload
iptables,执行:sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
同时,检查客户端与服务器之间的网络连通性(如ping服务器IP、telnet测试3306端口)。
若需远程访问MariaDB,除了修改bind-address外,还需创建远程访问用户并授权:
mysql -u root -p
在MariaDB shell中执行:
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
注意:出于安全考虑,建议限制远程访问IP范围(如将%替换为具体IP)。
若出现查询慢、响应时间长等问题,可通过以下步骤排查:
top、htop查看CPU、内存占用;iotop查看磁盘I/O;vmstat查看系统级资源状态。EXPLAIN关键字查看查询执行计划,找出全表扫描、索引缺失等问题;使用SHOW PROCESSLIST查看当前执行的查询,终止异常查询(如KILL query_id)。innodb_buffer_pool_size(设置为服务器内存的70%左右)、innodb_log_file_size(增大日志文件大小)、query_cache_size(启用查询缓存,MariaDB 8.0及以上版本已移除)等参数。OPTIMIZE TABLE优化表碎片;重建索引;清理无用日志。sudo systemctl stop mariadb
sudo mysqld_safe --skip-grant-tables &
mysql -u root
在MariaDB shell中执行:FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
exit;
重启服务:sudo systemctl start mariadb
sudo aa-disable /usr/sbin/mysqld)或修改AppArmor配置文件(/etc/apparmor.d/usr.sbin.mysqld),添加允许访问的路径。