温馨提示×

Ubuntu MariaDB常见故障如何解决

小樊
49
2025-10-18 17:33:06
栏目: 云计算

Ubuntu MariaDB常见故障及解决方法

1. 服务无法启动

  • 检查服务状态:使用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;目录权限设为755,执行sudo chmod -R 755 /var/lib/mysql
    • 配置文件错误:检查/etc/mysql/mariadb.conf.d/50-server.cnf(或/etc/my.cnf),确认bind-addressport等配置正确(如bind-address设为0.0.0.0允许远程连接)。
    • 磁盘空间不足:使用df -h查看磁盘使用情况,清理不必要的文件(如/tmp目录)或扩容磁盘。
    • AppArmor限制:临时禁用AppArmor(sudo aa-disable /etc/apparmor.d/usr.sbin.mysqld),或修改/usr/lib/systemd/system/mariadb.service中的ProtectHomefalse,然后重启服务。

2. 无法连接到服务器

  • 检查服务运行状态:确保MariaDB服务已启动(sudo systemctl status mariadb),未启动则执行sudo systemctl start mariadb
  • 验证防火墙设置:允许3306端口(MariaDB默认端口),执行sudo ufw allow 3306/tcp,然后sudo ufw reload
  • 确认配置文件:检查/etc/mysql/mariadb.conf.d/50-server.cnf中的bind-address,若为127.0.0.1(仅本地连接),改为0.0.0.0(允许远程连接),重启服务。
  • 检查网络连接:使用ping <服务器IP>测试网络连通性,telnet <服务器IP> 3306验证端口是否可达。
  • 授权远程访问:登录MariaDB(mysql -u root -p),执行GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password'%表示允许所有主机),然后FLUSH PRIVILEGES

3. 忘记root密码

  • 停止服务sudo systemctl stop mariadb
  • 安全模式启动sudo mysqld_safe --skip-grant-tables &(跳过权限检查)。
  • 重置密码:登录MariaDB(mysql -u root),执行FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'(替换new_password为新密码)。
  • 重启服务sudo mysqladmin -u root -p shutdown关闭服务,sudo systemctl start mariadb正常启动。

4. 远程连接失败

  • 检查bind-address:确保/etc/mysql/mariadb.conf.d/50-server.cnf中的bind-address设为0.0.0.0(允许远程连接),重启服务。
  • 开放防火墙端口sudo ufw allow 3306/tcpsudo ufw reload
  • 授权远程用户:登录MariaDB,执行CREATE USER 'newuser'@'%' IDENTIFIED BY 'password'(创建远程用户),GRANT ALL PRIVILEGES ON database_name.* TO 'newuser'@'%'(授权指定数据库权限),FLUSH PRIVILEGES
  • 检查网络连通性:客户端使用ping <服务器IP>测试网络,telnet <服务器IP> 3306验证端口可达。

5. 主从同步出错

  • 跳过错误命令:停止从库同步(STOP SLAVE;),跳过当前错误(SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;),重启同步(START SLAVE;)。
  • 查看同步状态:执行SHOW SLAVE STATUS\G,检查Slave_IO_RunningSlave_SQL_Running是否为YesLast_Error字段查看具体错误。

6. 连接被拒绝

  • 检查服务状态:确保MariaDB服务运行(sudo systemctl status mariadb)。
  • 验证socket文件:若出现“Can’t connect to local MySQL server through socket”错误,检查/var/run/mysqld/mysqld.sock是否存在,若不存在则创建符号链接(sudo ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock)。
  • 检查用户权限:登录MariaDB,执行SELECT user, host FROM mysql.user;,确保用户的主机字段包含localhost(本地连接)或%(远程连接)。

7. 字符编码问题

  • 导出/导入时指定编码:导出数据时使用LOAD DATA INFILE '/data/file.txt' INTO TABLE table_name CHARACTER SET 'utf8mb4'(指定源文件编码);导入时确保表字符集与文件一致(如ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4)。
  • 修改配置文件:在/etc/mysql/mariadb.conf.d/50-server.cnf中添加[mysqld]部分,设置character-set-server = utf8mb4collation-server = utf8mb4_unicode_ci,重启服务。

8. max_connect_errors导致连接被阻塞

  • 解锁主机:执行mysqladmin flush-hosts -u root -p(临时解决)。
  • 提高阈值:登录MariaDB,执行SET GLOBAL max_connect_errors = 1000(临时调整);或在/etc/mysql/mariadb.conf.d/50-server.cnf中添加max_connect_errors = 1000(永久生效),重启服务。

0