Debian 上 MariaDB 连接失败的排查与修复
一、先快速定位问题
sudo systemctl status mariadb,若未运行执行 sudo systemctl start mariadb 并设置开机自启 sudo systemctl enable mariadb。mysql -u root -p,若本地也失败,多为服务未启动或本地 socket/权限问题。nc -vz 服务器IP 3306 或 telnet 服务器IP 3306。二、常见原因与对应修复
/etc/mysql/mariadb.conf.d/50-server.cnf,将 bind-address = 127.0.0.1 改为 bind-address = 0.0.0.0(或注释该行),保存后 sudo systemctl restart mariadb。注意 MariaDB 仅支持一个 bind-address。sudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reloadsudo ufw allow 3306/tcpsudo mysql -u root -pCREATE USER '用户名'@'%' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO '用户名'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES;ALTER USER '用户名'@'%' IDENTIFIED WITH mysql_native_password BY '密码'; FLUSH PRIVILEGES;sudo mysql -u root -p 进入后执行 UPDATE mysql.user SET plugin='' WHERE user='root'; FLUSH PRIVILEGES;(Debian/Ubuntu 系常见)。三、按场景给出最小可行命令清单
远程连接时报错 2003/10061(端口不通或监听不对)
sudo sed -i 's/^bind-address\s*=.*/bind-address = 0.0.0.0/' /etc/mysql/mariadb.conf.d/50-server.cnfsudo systemctl restart mariadbsudo firewall-cmd --add-port=3306/tcp --permanent && sudo firewall-cmd --reloadnc -vz 服务器IP 3306 应返回 succeededmysql -h 服务器IP -P 3306 -u 用户名 -p本地 socket 报错 2002(Can’t connect to local MySQL server through socket)
sudo systemctl status mariadb(若 inactive 则 sudo systemctl start mariadb)mysql -u root -proot 本地登录报错 1698(Access denied for user ‘root’@‘localhost’)
sudo mysql -u root -pUSE mysql;UPDATE user SET plugin='' WHERE user='root';FLUSH PRIVILEGES;四、安全与最佳实践
'app'@'192.168.1.%')。ss -lntp | grep 3306,确认监听在 0.0.0.0:3306。