Ubuntu MariaDB常见问题及解决方案
sudo systemctl status mariadb查看服务运行状态,若显示“inactive (dead)”或“failed”,需进一步排查。sudo tail -n 50 /var/log/mysql/error.log获取具体错误信息(如配置文件语法错误、数据目录权限问题)。/var/lib/mysql)属主为mysql用户,执行sudo chown -R mysql:mysql /var/lib/mysql修复。/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf),修正语法错误(如bind-address格式错误)后重启服务。df -h查看磁盘使用情况,清理/tmp、/var/log等目录无用文件,或扩容磁盘。sudo systemctl stop mariadb。sudo mysqld_safe --skip-grant-tables &(跳过权限检查)。mysql -u root),执行以下命令(MariaDB 10.4+版本):FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
退出后重启服务:sudo systemctl start mariadb。/etc/mysql/mariadb.conf.d/50-server.cnf,将bind-address从127.0.0.1改为0.0.0.0(允许所有IP访问),保存后重启服务。sudo ufw allow 3306/tcp允许3306端口流量。GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;(%表示允许所有主机)。LOAD DATA INFILE '/data/file.txt' INTO TABLE table_name CHARACTER SET utf8mb4;(确保文件编码与指定一致)。SHOW CREATE DATABASE db_name;和SHOW CREATE TABLE table_name;确认编码是否为utf8mb4(推荐),若不是,可使用ALTER DATABASE db_name CHARACTER SET utf8mb4;修改。STOP SLAVE;),跳过当前错误命令(SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;),重新启动同步(START SLAVE;)。SHOW SLAVE STATUS\G查看Slave_IO_Running和Slave_SQL_Running是否为“Yes”,以及Last_Error字段定位具体错误。/etc/mysql/mariadb.conf.d/50-server.cnf,调整关键参数:
innodb_buffer_pool_size:设置为物理内存的50%-70%(InnoDB引擎核心缓存)。innodb_log_file_size:增大至256M-512M(减少日志切换频率)。max_connections:根据应用需求调整(避免过多连接消耗资源)。slow_query_log = 1和long_query_time = 2(记录执行时间超过2秒的查询),使用pt-query-digest分析日志定位慢查询。EXPLAIN分析查询计划,添加合适索引(避免SELECT *,优先使用覆盖索引)。/var/log/mysql/下旧日志文件(如error.log.1)、/tmp目录临时文件。sudo apt-get clean清除APT缓存,sudo apt-get autoremove删除无用依赖。/etc/mysql/mariadb.conf.d/下的.cnf文件,确保修改的是正确文件(而非/etc/my.cnf,除非明确指定)。sudo systemctl restart mariadb使更改生效。mysqladmin variables | grep key_name(如key_buffer_size)检查参数是否已更新。