WPF连接DigitalOcean Ubuntu MySQL数据库提示未知数据库错误求助
首先咱们拆解下这个错误:Unknown database 'firefly'才是核心问题,身份验证失败其实是找不到数据库引发的连锁反应(MySQL会先验证数据库存在性,再处理身份验证细节)。既然你能正常连接默认库(mysql、performance_schema),说明远程连接的基础配置是通的,问题大概率出在数据库存在性/权限/连接字符串匹配上,下面是一步步排查和解决的方法:
1. 先确认目标数据库是否真的存在于服务器上
登录你的Ubuntu服务器,打开MySQL命令行(用root或有权限的用户):
mysql -u root -p
执行命令查看所有数据库:
SHOW DATABASES;
仔细检查输出列表里有没有firefly——注意:Ubuntu上的MySQL默认是大小写敏感的(lower_case_table_names=0),如果创建数据库时用了FireFly或FIREFLY,但连接字符串里写的是小写firefly,就会找不到。如果确实不存在,先创建数据库:
CREATE DATABASE firefly; -- 若需要指定UTF-8字符集,可使用: CREATE DATABASE firefly CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
2. 检查MySQL用户对目标数据库的访问权限
即使数据库存在,你的root用户可能没被授予访问firefly的远程权限(DigitalOcean默认MySQL配置里,root可能只拥有默认库的权限,或限制了访问来源)。执行以下命令给root用户授权(替换your_root_password为你的实际密码):
GRANT ALL PRIVILEGES ON firefly.* TO 'root'@'%' IDENTIFIED BY 'your_root_password'; FLUSH PRIVILEGES;
这里的'%'表示允许从任何远程IP访问,若想限制特定IP,把%换成你的本地IP即可。
3. 修正C#连接字符串的关键错误
你错误里显示主机是127.0.0.1,这是致命问题!你要连接的是DigitalOcean远程服务器,不能用本地回环地址。正确的连接字符串示例如下:
string connectionString = "server=你的DigitalOcean公网IP;database=firefly;uid=root;pwd=你的密码;port=3306;SslMode=Required;";
还要注意这几个细节:
SslMode=Required:DigitalOcean的MySQL默认要求SSL连接,没加这个参数可能导致连接失败或权限验证异常database参数的大小写要和服务器上的数据库名完全一致
4. 额外排查:MySQL大小写敏感性配置
如果数据库名和连接字符串大小写一致但仍找不到,可以检查MySQL的大小写配置:
在Ubuntu服务器上打开MySQL配置文件(通常是/etc/mysql/mysql.conf.d/mysqld.cnf),查找lower_case_table_names参数:
- 值为
0:大小写敏感,数据库名必须完全匹配 - 值为
1:不区分大小写(Windows系统默认)
若需修改,改完后重启MySQL服务:
sudo systemctl restart mysql
⚠️ 注意:修改这个参数建议先备份数据库,且重启后对已存在的数据库名生效逻辑不同,尽量在创建数据库前就确认好大小写规则。
最后测试
修改完上述配置后,重新运行WPF程序即可。如果还是有问题,先在本地终端用远程连接测试服务器端配置:
mysql -h 你的服务器IP -u root -p firefly
如果这个命令能成功登录,说明服务器端没问题,问题肯定出在C#代码的连接字符串上。
内容的提问来源于stack exchange,提问作者ChakirBelhaj

