$con = mysqli_connect('<remote server ip address>','root','*******','CSV_DB',); if (!$con) { die('Could not connect: ' . mysqli_error($con)); }
У меня есть простая программа для подключения к серверу mysql, который я создал с помощью phpmyadmin, однако я получаю сообщение «не могу подключиться» каждый раз, когда я пытаюсь подключиться.
Я знаю, что это может быть несколько разных проблем, но я действительно ищу советы по устранению неполадок.
Когда я ssh как root для сервера, я могу получить доступ к серверу с помощью терминала, и все в порядке. Однако это соединение, использующее одно и то же имя пользователя / пароль / db / etc, и я не могу войти в систему. Кроме того, mysqli_error никогда не печатает – не уверен, почему.
Вот быстрый быстрый контрольный список для включения удаленных подключений для MySQL, но сначала прочитайте (6). Если я что-то пропустил, не стесняйтесь редактировать.
1) Ваш удаленный пользователь подключается через учетную запись, созданную с соответствующими user,host
элементами (смотрите вывод от select user,host from mysql.user order by 1,2
). Если нет, загляните в команды CREATE USER
и / или GRANT
. Изучите вывод из SHOW GRANTS
для пользователя.
2) Вы сделали flush privileges;
(Некоторые говорят, что это не нужно, другие говорят, что это так).
3a) Найдите файл конфигурации mysql, C:\ProgramData\MySQL\MySQL Server 5.NNN
3b) ниже, просмотрев информацию в этом документе (или для Windows, вероятно, по пути C:\ProgramData\MySQL\MySQL Server 5.NNN
). Это зависит от дистрибутива Linux.
3b) Вы изменили и сохранили my.ini
(Windows) или my.cnf
(Linux) и изменили bind-address
от 127.0.0.1
или localhost
, в пользу 0.0.0.0
. И вы создали и rem'd из следующей строки: #skip-networking
. Он будет выглядеть примерно так:
[mysqld] bind-address=0.0.0.0 #skip-networking
4) Перезапустите демон mysql. Как это зависит от дистрибутива.
5) Проблемы с брандмауэром. Убедитесь, что порт, по умолчанию 3306
, открыт для внешнего мира (что фактически может быть вашей интрасети). Сюда входят любые другие уровни брандмауэров, такие как группы безопасности AWS EC2 или аналогичные, если таковые имеются.
6) Понимать, что с этим связан риск безопасности. Если вы не знаете, как разоблачить ваш сервер mysql для удаленных подключений, не выполняйте это.
7) Проводите частые оценки безопасности с помощью оператора select
указанного в разделе 1. выше, включая просмотр SHOW GRANTS
для этих пользователей. Не перенагружайте пользователей с помощью шаблона без необходимости. Скорее, предоставите пользователям минимальные привилегии для их выполнения.
8) Часто проверяйте неудачные попытки подключения через общий журнал и журнал ошибок, как это кратко описано ниже.
Для входящего вы можете просмотреть общий журнал запросов.
select @@general_log; -- a 1 indicates it is turned on for capture select @@general_log_file; -- the file that it logs to
Таким образом, все запросы могут быть зарегистрированы в общем журнале запросов, если параметр включен. Изучите журнал для «connect», но особенно для Access denied for user
чтобы увидеть неудачные попытки. Делайте это регулярно (не каждые несколько лет). Я делаю это не реже двух раз в день. Обратите внимание: вы можете автоматизировать отчетность через внешнюю программу. Внешний мир собирается забить ваш сервер, чтобы войти, как на изображении ниже. Это реальность; приготовьтесь к этому.
Проверьте также страницу руководства для журнала ошибок , указав уровни предупреждений и подробные настройки на основе вашей версии.
Я бы рекомендовал создать резервную копию по дате (названную как таковой) и удалить файлы журнала после резервного копирования, чтобы начать работу после резервного копирования. Файлы журналов могут быстро увеличиваться, особенно в общем журнале. Не забудьте, включен или выключен параметр для ведения журнала.
Вы можете использовать два журнала, чтобы определить, пропустила ли ваша попытка соединение через брандмауэр во время шагов здесь.