Ubuntu下MariaDB常见问题解决方法汇总
/tmp/mysql.sock或/var/run/mysqld/mysqld.sock是否存在,若不存在可通过符号链接修复:ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock(或替换为实际socket路径)。/etc/mysql/mariadb.conf.d/50-server.cnf,将bind-address从127.0.0.1改为0.0.0.0以允许远程访问;然后开放3306端口:sudo ufw allow 3306;最后确认用户权限(如GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;)。sudo systemctl status mariadb确认服务状态,若未启动,通过sudo tail -n 50 /var/log/mysql/error.log查看具体错误(如配置错误、权限问题、端口冲突)。/var/lib/mysql)属主为mysql用户,运行sudo chown -R mysql:mysql /var/lib/mysql && sudo chmod -R 755 /var/lib/mysql。/etc/mysql/my.cnf或/etc/mysql/mariadb.conf.d/*.cnf,使用mysqld --validate-config验证配置语法。netstat -tuln | grep 3306检查端口占用,终止冲突进程(如kill -9 <PID>)。df -h检查磁盘空间,清理无用文件(如日志、缓存)。sudo aa-disable /etc/apparmor.d/usr.sbin.mysqld)或修改配置文件允许MariaDB访问所需路径。sudo systemctl stop mariadb。sudo mysqld_safe --skip-grant-tables &。mysql -u root。UPDATE mysql.user SET Password=PASSWORD('new_password') WHERE User='root'; FLUSH PRIVILEGES;(MySQL 5.7.6+需用ALTER USER语句)。exit → sudo mysqladmin -u root -p shutdown → sudo systemctl start mariadb。/etc/mysql/mariadb.conf.d/50-server.cnf,将bind-address设为0.0.0.0。sudo ufw allow 3306(若使用ufw)。GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;(%表示允许所有主机,生产环境建议限制为特定IP)。innodb_buffer_pool_size(设为系统内存的50%-80%,用于缓存InnoDB数据)、max_connections(根据应用需求调整,避免过多连接导致资源耗尽)、query_cache_size(启用查询缓存,适用于读多写少场景)。CREATE INDEX idx_user_id ON users(user_id);),避免全表扫描;使用EXPLAIN分析查询计划,优化慢查询。SELECT *(只查询所需列),使用LIMIT限制结果集,定期清理无用数据(如OPTIMIZE TABLE整理表碎片)。log_slow_queries),使用pt-query-digest分析慢查询;定期更新MariaDB至最新版本(修复bug并获得性能改进)。/etc/mysql/my.cnf(主配置文件)和/etc/mysql/mariadb.conf.d/*.cnf(附加配置)的语法,使用mysqld --validate-config验证配置是否正确;修改配置后需重启服务(sudo systemctl restart mariadb)使更改生效。/var/lib/mysql)必须属主为mysql用户,否则会导致启动失败。运行以下命令修复:sudo chown -R mysql:mysql /var/lib/mysql && sudo chmod -R 755 /var/lib/mysql。netstat -tuln | grep 3306查看3306端口是否被占用(如另一个MariaDB实例或其他服务)。若被占用,终止冲突进程(kill -9 <PID>)或修改MariaDB的bind-address(如改为3307端口),并更新防火墙规则。