Mysql connect localhost windows

mysql_connect (localhost / 127.0.0.1) slow on Windows platform

I am using Windows 7, Apache 2, PHP 5, MySQL 5, all are on the same machine. I have found an interesting issue, I have the following code:

The running time for the above code is over 1 second.

When I use 127.0.0.1 instead of localhost , the running time is around 10 ms.

I tried to find the underlying reason on the internet, and this is the result:

I recently moved my development from XP to Windows 7 and found that webpages I had developed were taking 5 seconds long to load. This was unacceptable of course so I had to track down the problem. I eventually tracked down the offending function/method pdo::construct. I also found that mysql_connect was taking about 1 second to make a connection. After a little googling I found an explaination that php had issues with IPv6 and that you could fix the problem by either disabling IPv6 or switching to the ipaddress 127.0.0.1 when making your connection.

I wonder what the issue of IPv6 on PHP is, just want to get a deeper understaning. Thanks.

2 Answers 2

PHP is attempting to open a connection to localhost. Because your computer is connected to your network via IPv6 it’s trying the IPv6 version of ‘localhost’ first, which is which is an IP address of ::1

::1/128 — The loopback address is a unicast localhost address. If an application in a host sends packets to this address, the IPv6 stack will loop these packets back on the same virtual interface (corresponding to 127.0.0.0/8 in IPv4).

It looks like your MySQL server isn’t listening to that address, instead it’s only bound to an IPv4 address and so once PHP fails to open the connection it falls back and tries to open localhost via IPv4 aka 127.0.0.1

I personally prefer to use either IP addresses or use ether the Windows hosts file or Mac equivalent to define ‘fake’ domain names and then use those when connecting to MySQL, which resolve to IP addresses. Either way I can know exactly whether an IPv4 or IPv6 address will be used.

Both MySQL and Apache support IPv6 but you have to tell them to use an IPv6 address explicitly. For MySQL see: http://dev.mysql.com/doc/refman/5.5/en/ipv6-server-config.html

Apache supports multiple IP addresses so you can use both at once — if the network card in the machine has both an IPv4 and IPv6 address. MySQL only supports one address.

mysqli_connect not connecting to localhost

As title suggests, I’m getting the following error when using mysqli_connect:

Warning: mysqli_connect(): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /Users/username/Sites/test.php on linez 2

Warning: mysqli_connect(): (HY000/2002): php_network_getaddresses: getaddrinfo failed: nodename nor servname provided, or not known in /Users/username/Sites/test.php on line 2 Could not connect:

My firewall is turned off and apache2 is turned on, I am able to view localhost/Username/Sites/test.php as well as logging into mysql using localhost.

Читайте также:  Qca9377 bluetooth drivers windows 10

6 Answers 6

from where you bring those quotes ? you should use single quotes.

and why you mix between mysqli and mysql ?

Like that you connect to database:

please read good the documentation here http://se2.php.net/mysqli_select_db

If you are using textedit app that is built into OS X then, disable/ uncheck the feature called «Smart Quotes» from the preferences pane of TextEdit and then You will have to replace all the existing quotes in the code.

I have encountered this problem as well but none of the answers helped.

Despite what many answers say, the database name is not mandatory as a 4th parameter, as per the documentation: https://www.php.net/manual/en/mysqli.construct.php — all the parameters are optional.

For me what solved it was to double check the database host as in my code it is dynamic and it was picking up wrongly the distant database host instead of localhost.

(After I created a virtual host, I had to add it to the IS_LOCAL constant’s condition)

Which is defining your Hostname, port, username, password, db and mySQL socket, it worked for me.

For some reason I can’t remember (I think I read it somewhere else on SO, actually), when you connect to ‘localhost’ using mysqli(), you actually have to specify what port number you’re connecting on as well:

$dbconn = new mysqli(‘localhost:3306’, /*your username*/, /*your password*/, /*your database name*/);

3306 is, if I remember correctly, the default port, but even so you need to specify that in this case — literally only when you try to connect on localhost, but for some reason that’s how it is.

Also — I noticed that in your original code your quotation marks in your mysqli_connect(. ) line look different from those in your other code lines. This may just be something that happened in stack overflow when you wrote out your question, but if it’s not and those different quotation marks are in your code as well, then you may need to change them to the same ones as in your later code.

Не удается подключиться к серверу MySQL на ‘localhost’ (10061)

Я недавно установил MySQL 5 на Windows 2003 и попытался настроить экземпляр. Все работало нормально, пока я не добрался до «применения настроек безопасности», после чего он дал мне вышеуказанную ошибку ( Can’t connect to MySQL server on ‘localhost’ (10061) ).

У меня есть исключение порта 3306 в моем брандмауэре для «MySQL Server».

18 ответов:

вам, вероятно, придется предоставить привилегии «localhost» в таблице пользователю. Смотрите ‘GRANT’ синтаксис документации. Вот пример (из какого источника).

«предоставить все привилегии на %s.* для’%s’@ ‘localhost’, идентифицированного ‘%s'»;

Это самая распространенная проблема с MySQL.

кроме этого, вы можете проверить, что пользователь, которого вы определили для создания вашего экземпляра, имеет полные права, иначе пользователь не может предоставлять привилегии.

кроме того, убедитесь, что служба mysql запущена.

убедитесь, что у вас не включен сторонний брандмауэр или Служба безопасности Интернета.

кроме того, есть несколько страниц форума MySQL, посвященных этому: http://forums.mysql.com/read.php?11,9293, 9609#msg-9609

попробуйте прочитать это.

получил эту ошибку на Windows, потому что мой mysqld.exe не работал.

побежал «C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqld» —install из командной строки, чтобы добавить его в мои службы, запустите службы.msc (start -> run), нашел службу MySQL и запустил ее.

Читайте также:  Ssh ����������� �� ����� linux

не пришлось беспокоиться об этом оттуда.

  1. идем в Диспетчер задач
  2. выберите вкладку Услуги
  3. найти службу MySql
  4. под управлением

У меня были трудности с доступом к MySQL при подключении через соединение localhost на стандартном порту 3306, который отлично работал, когда я установил и настроил его для предыдущих классов, которые я взял в MySQL и Java. Я получал ошибки, такие как» ошибка 2003 «и»не удается подключиться к серверу MySql на localhost (10061)». Я попытался подключиться как из MySQL Workbench (5.2.35 CE), так и из Netbeans (7.2). Я использую Windows 7 64 bit professional.

Я попытался ввести службы.msc в самом начале окно поиска меню, которое открыло диалоговое окно службы, чтобы показать все службы, установленные в windows. Я прокрутил вниз к MySQL и запустил эту службу. Последующие попытки подключиться к MySQL из MySQL WorkBench и из командной строки завершились успешно.

убедитесь, что ваш хост-файл windows (расположен по адресу c://windows/system32/drivers/etc.host ) имеет следующие линии. Если нет, добавьте его в конце

иногда mysql не может вызвать Windows для принудительного запуска служб хоста, если брандмауэр блокирует его, поэтому запустите его вручную

win + выполнить >>услуги.msc, выберите «MySQL_xx», где» xx » — это имя, которое вы назначили службам хоста MySQL во время установки. Нажмите на кнопку «начать», чтобы начать с гиперссылки появился на левой стороне.

Я попробовал решение Kuzhichamadam Inn и обнаружил, что необходимо внести небольшое изменение.

MYSQL57 был сетевой службой. Я пробовал это неоднократно без успеха. Когда я открыл службы.msc я нашел другой сервис для localhost: MySQL. Я начал это с помощью процесса ниже, и это сработало.

выполнить > Services.МСЦ > правой кнопкой мыши по MySQL > «свойства» >в начало

пресс клавиша Windows + R напишите » услуги.МСЦ» введите ищите «MYSQL56» напишите нажмите на нее и Запустите сервис

Настройка удаленного подключения к MySQL

Материал статьи предназначен для начинающих, профессионалы Хабра в большинстве не нуждаются в изложении этого вопроса. Тем не менее, те, кто делает первые шаги в работе с MySQL часто задают подобные вопросы. Статья написан для тех, кто впервые столкнулся с необходимостью установить удаленное соединение с базой данных MySQL. В статье рассказывается о сложностях, которые могут возникнуть при настройке удаленного соединения и о методах их преодоления.

Как установить соединение с удаленной базой?

Для установления удаленного соединения нужно указать параметры, характеризующие устанавливаемое подключение. Это

  • —host
  • —protocol
  • —port

Из четырех возможных протоколов удаленное подключение позволяет только TCP/IP, поэтому первым требованием является доступность компьютера из сети по TCP/IP.
Далее необходимо добавить имя хоста (или ip адрес машины, на которой расположена база) в строке подключения:
mysql —host=host_name
Обратите внимание, что указание в качестве имени хоста значения localhost (или же отсутствие такого параметра, что то же самое, так как это дефолтное значение) приводит к обращению на локальную машину.

Учтите, что параметры имеют две формы записи: длинную и короткую. В свою очередь, если параметр имеет значение (как например, в случае хоста необходимо указать имя хоста к которому нужно подключиться), то короткая форма записи может использоваться с пробелом или без (исключением из этого правила является пароль).
Таким образом, следующие три записи являются эквивалентными:

  • mysql —host=myhost.ru
  • mysql -h myhost.ru
  • mysql -hmyhost.ru
Читайте также:  Что такое linux pos

Как настроить соединение с удаленной базой?

В MySQL пользователь характеризуется двумя параметрами: именем и хостом, с которого он может обращаться. По умолчанию доступ разрешен только с локальной машины, т.е. для пользователя user@localhost. Права на доступ пользователям даются с помощью команды GRANT. Команда выполняется под рутом.

Например, если я хочу создать юзера, который сможет коннектиться с любого хоста с полными правами, то следует выполнить следующую команду:
GRANT ALL PRIVILEGES ON `имя_базы`.* TO myuser@% IDENTIFIED BY ‘пароль’;

Примечание. Обратите внимание, что данная команда дает доступ пользователю myuser со всех IP кроме 127.0.0.1, соответсвующего localhost.
Для пользователя myuser@localhost необходимо давать права отдельной командой GRANT.

Если вы решите обратиться к локальной машине как к удаленной, используя протокол TCP/IP, то не забывайте, что myuser@localhost и myuser@ip_собственного_компа это разные пользователи и каждому из них права нужно давать отдельной командой.

Второй пример показывает как дать право читать таблицу time_zone в базе mysql пользователю myuser с машины 192.168.0.76
с паролем mypassy:
GRANT SELECT ON mysql.time_zone TO myuser@192.168.0.76 IDENTIFIED BY ‘mypassy’;

Возникающие сложности

Если после всех действий у вас возникает ошибка
(Can’t connect to Mysql Server on ‘ваш IP'(10061)),
значит соединение блокирует firewall (windows firewall, outpost, антивирус или еще что-то).

Если возникает ошибка
(Client does not support autentification protocol request by server; consider upgrading MySQL client), клиент (то есть ваша программа) не поддерживает требуемый сервером протокол.
Эту ошибку можно исправить, установив пароль старого формата:
SET PASSWORD FOR user@host = OLD_PASSWORD(‘password’);

mysql_connect doesn’t work with localhost on my Windows machine

This does not work with my PHP 5.3.3 installation on WAMP / Windows 7:

After Maximum execution time , this error is presented:

Warning: mysql_connect() [function.mysql-connect]: [2002] A connection attempt failed because the connected party did not (trying to connect via tcp://localhost:3306)

Warning: mysql_connect() [function.mysql-connect]: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

I’m wondering if it has something to do with this, from the PHP docs:

Whenever you specify «localhost» or «localhost:port» as server, the MySQL client library will override this and try to connect to a local socket (named pipe on Windows). If you want to use TCP/IP, use «127.0.0.1» instead of «localhost». If the MySQL client library tries to connect to the wrong local socket, you should set the correct path as in your PHP configuration and leave the server field blank.

This is from my php.ini:

Is this a bug, or what is going on?

Update: I’m using MySQL 5.1.36 something, and I can connect to it otherwise. Forgot to mention, but this works with PHP 5.3.0 and 5.2.11. Ofcourse I can just change localhost to 127.0.0.1 , but I want to know why I can’t use localhost .

Update 2: Adding (uncommenting) 127.0.0.1 localhost to the hosts file made it work. But why is this necessary?

Оцените статью