Вопрос или проблема
Я попробовал множество способов, но ничего не помогло. На моем сервере нет SSL-сертификата. В данный момент я получаю ошибку “Не удается подключиться к любому из указанных хостов MySQL”
Вот мой код:
using MySql.Data.MySqlClient;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace testDB
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string connectionString = "Server=ip_my_server;Port=3306;Database=main;Uid=root;Pwd=my_pas;SSL Mode=None";
try
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
connection.Open();
MessageBox.Show("Подключение успешно!");
connection.Close();
}
}
catch (Exception ex)
{
MessageBox.Show("Ошибка подключения: " + ex.Message);
}
}
}
}
Я изменял строку подключения разными способами, пытался сделать это через MySqlConnectionStringBuilder, но ничего не сработало
Ответ или решение
Для подключения к базе данных MySQL из C# существует несколько важных моментов, которые следует учесть. Ошибка "Unable to connect to any of the specified MySQL hosts" может возникать по разным причинам, и я готов помочь вам разобраться в этой проблеме.
Вот шаги, которые вам нужно выполнить для успешного подключения:
-
Проверка конфигурации сервера MySQL:
- Убедитесь, что ваш MySQL сервер запущен и доступен по указанному IP-адресу.
- Проверьте, что MySQL слушает на порту 3306. Вы можете использовать команду
netstat -an | find "3306"
в терминале для проверки. - Убедитесь, что ваш сервер позволяет подключения с удалённых IP-адресов. Это можно сделать, проверив файл конфигурации
my.cnf
илиmy.ini
(опцияbind-address
должна быть установлена на0.0.0.0
или ваш конкретный IP).
-
Настройки безопасности:
- Убедитесь, что пользователю
root
предоставлены все необходимые привилегии для доступа к базе данных из вашего IP-адреса. Это можно сделать с помощью команды:GRANT ALL PRIVILEGES ON main.* TO 'root'@'%' IDENTIFIED BY 'my_pas'; FLUSH PRIVILEGES;
- Замените
'%'
на конкретный IP-адрес, если вы хотите ограничить доступ для большей безопасности.
- Убедитесь, что пользователю
-
Проверка соединения:
- Убедитесь, что ваш брандмауэр (как на уровне системы, так и сети) позволяет соединения по порту 3306.
-
Использование правильного подключения в C#:
На вашем коде есть небольшая ошибка в строке подключения. Рекомендуется использоватьSslMode=None
без пробелов междуSSL
иMode
. Вот исправленный код:string connectionString = "Server=ip_my_server;Port=3306;Database=main;Uid=root;Pwd=my_pas;SslMode=None";
-
Использование MySqlConnectionStringBuilder:
Если вы хотите построить строку подключения с помощьюMySqlConnectionStringBuilder
, это может выглядеть следующим образом:var builder = new MySqlConnectionStringBuilder { Server = "ip_my_server", Port = 3306, Database = "main", UserID = "root", Password = "my_pas", SslMode = MySqlSslMode.None }; using (var connection = new MySqlConnection(builder.ConnectionString)) { try { connection.Open(); MessageBox.Show("Подключение успешно!"); } catch (Exception ex) { MessageBox.Show("Ошибка подключения: " + ex.Message); } }
Если все вышеперечисленные шаги не помогли, попробуйте подключиться к MySQL серверу с помощью другого клиента (например, MySQL Workbench или командной строки), чтобы удостовериться, что проблема не программная, а в настройках сервера или сети.
Следуя указанным шагам и рекомендациям, вы должны устранить проблемы с подключением к MySQL серверу. Если у вас будут дополнительные вопросы или появятся новые ошибки, не стесняйтесь задать!