Версия, которая использует Ruby и http://flori.github.com/json/
$ < file.json ruby -e "require 'rubygems'; require 'json'; puts JSON.pretty_generate(JSON[STDIN.read]);"
или более кратко:
$ < file.json ruby -r rubygems -r json -e "puts JSON.pretty_generate(JSON[STDIN.read]);"
, если вы получите ошибку, как показано ниже:
django.db.utils.OperationalError: (2002, "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)")
Затем просто найдите местоположение файла mysqld.sock и добавьте его в «HOST».
Как я использую xampp на linux, поэтому файл mysqld.sock
находится в другом месте. поэтому он не работает для /var/run/mysqld/mysqld.sock
'
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'asd',
'USER' : 'root',
'PASSWORD' : '',
'HOST' : '/opt/lampp/var/mysql/mysql.sock',
'PORT' : ''
}
}
Когда, если вы потеряете демона mysql в mac OSx, но присутствуете в другом пути для примера в private / var, выполните следующую команду:
1)
ln -s /private/var/mysql/mysql.sock /tmp/mysql.sock
2 ) перезапустите вашу связь с mysql с помощью:
mysql -u username -p -h host databasename
Убедитесь, что ваш mysql не достиг максимального количества подключений или не находится в каком-то виде цикла загрузки, как это происходит довольно часто, если настройки неверны в my.cnf.
Использовать ps aux | grep mysql, чтобы проверить, изменяется ли PID.
Была эта же проблема. Выключено mysqld
перестало работать (я на Mac OSX). Я перезапустил его, и ошибка исчезла.
Я понял, что mysqld
не работает в основном из-за этой ссылки: http://dev.mysql.com/doc/refman/5.6 /en/can-not-connect-to-server.html
Обратите внимание на первый отзыв!
Для тех, кто обновился с 5.7 до 8.0 с помощью доморощенного, эта ошибка, скорее всего, вызвана тем, что обновление не завершено. В моем случае mysql.server start
получил следующую ошибку:
ОШИБКА! Сервер завершает работу без обновления файла PID
blockquote>Затем я проверил файл журнала с помощью
cat /usr/local/var/mysql/YOURS.err | tail -n 50
и нашел следующее:InnoDB: обновление после сбоя не поддерживается.
blockquote>Если вы находитесь на одной лодке, сначала установите
mysql@5.7
через homebrew, остановите сервер, а затем снова запустите систему 8.0.brew install mysql@5.7 /usr/local/opt/mysql@5.7/bin/mysql.server start /usr/local/opt/mysql@5.7/bin/mysql.server stop
Затем ,
mysql.server start
Это заставит ваш MySQL (8.0) работать снова.
ERROR! The server quit without updating PID file
.
– awebartisan
28 July 2018 в 10:41
Это может быть одной из следующих проблем.
mysqladmin -p variables | grep socket
blockquote>, а затем поместите его в код подключения db:
pymysql.connect(db='db', user='user', passwd='pwd', unix_socket="/tmp/mysql.sock")
/tmp/mysql.sock - это возврат из grep
2. Неверное решение порта mysql: вы должны узнать правильный порт mysql:
mysqladmin -p variables | grep port
, а затем в вашем коде:
pymysql.connect(db='db', user='user', passwd='pwd', host='localhost', port=3306)
3306 - это порт, возвращенный из grep
Я думаю, что первый вариант разрешит вашу проблему.
Просто попробуйте запустить mysqld
.
Это было то, что не работало для меня на Mac. Если он не работает, попробуйте перейти к /usr/local/var/mysql/<your_name>.err
, чтобы просмотреть подробные журналы ошибок.
Я видел, как это происходит в моем магазине, когда у моих разработчиков есть менеджер стека, такой как MAMP, который предварительно настроен с использованием MySQL, установленного в нестандартном месте.
на вашем терминальном запуске
mysql_config --socket
, который даст вам свой путь к файлу носка. возьмите этот путь и используйте его в вашем DATABASES HOST paramater.
Что вам нужно сделать, это указать ваш
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'test',
'USER': 'test',
'PASSWORD': 'test',
'HOST': '/Applications/MAMP/tmp/mysql/mysql.sock',
'PORT': '',
},
}
также запустить which mysql_config
если у вас есть несколько экземпляров сервера mysql, установленных на компьютере, вы можете подключиться к неправильному.
Убедитесь, что ваш / etc / hosts имеет 127.0.0.1 localhost
, и он должен работать нормально
Мне пришлось убить все экземпляры mysql, сначала обнаружив все идентификаторы процессов:
ps aux | grep mysql
blockquote>И затем убить их:
kill -9 {pid}
blockquote>Затем:
mysql.server start
blockquote>Работал для меня.
Проверить количество открытых файлов для процесса mysql с помощью команды lsof.
Увеличьте ограничение на открытые файлы и запустите снова.
ulimit
, чтобы увеличить количество открытых файлов, доступных вашему клиенту и серверу. если вы используете последнюю версию ubuntu, это может потребовать редактирования сценария upstart mysql в / etc / init, но, надеюсь, вы можете просто сделать это в файле .cnf.
– underrun
6 May 2013 в 14:29
Соответствующий раздел руководства MySQL - здесь . Я хотел бы начать с описанных там шагов отладки.
Кроме того, помните, что localhost и 127.0.0.1 в этом контексте не то же самое:
localhost
, тогда используется сокет или труба. 127.0.0.1
, клиент вынужден использовать TCP / IP. Итак, например, вы можете проверить, прослушивает ли ваша база данных TCP-соединения vi netstat -nlp
. Похоже, что он прослушивает TCP-соединения, потому что вы говорите, что mysql -h 127.0.0.1
работает просто отлично. Чтобы проверить, можете ли вы подключиться к своей базе данных через сокеты, используйте mysql -h localhost
.
Если это не помогает, вам, вероятно, потребуется опубликовать более подробную информацию о вашей конфигурации MySQL, точно как вы создаете соединение и т. д.
localhost
в качестве хоста). Изменение на 127.0.0.1
зафиксировано.
– krock
4 March 2016 в 01:01
Попытка нескольких из этих решений и отсутствие каких-либо успехов, это то, что сработало для меня:
Я думаю, что видел подобное поведение некоторое время назад, но не могу вспомнить детали. В нашем случае проблема заключалась в том, что testrunner инициализирует соединения с базой данных относительно первого взаимодействия с базой данных, например, путем импорта модуля в settings.py или в некоторых __init__.py. Я попытаюсь найти дополнительную информацию, но это может уже вызвать звонок для вашего дела.
Если это сокет, прочитайте этот файл
/etc/mysql/my.cnf
и посмотрите, что такое стандартное расположение сокетов. Это строка, например:
socket = /var/run/mysqld/mysqld.sock
теперь создает псевдоним для вашей оболочки:
alias mysql="mysql --socket=/var/run/mysqld/mysqld.sock"
Таким образом, вам не нужны привилегии root.
в ubuntu 14.04 вы можете сделать это, чтобы решить эту проблему.
zack@zack:~/pycodes/python-scraping/chapter5$ **mysqladmin -p variables|grep socket**
Enter password:
| socket | ***/var/run/mysqld/mysqld.sock*** |
zack@zack:~/pycodes/python-scraping/chapter5$***ln -s /var/run/mysqld/mysqld.sock /tmp/mysql.sock***
zack@zack:~/pycodes/python-scraping/chapter5$ ll /tmp/mysql.sock
lrwxrwxrwx 1 zack zack 27 11月 29 13:08 /tmp/mysql.sock -> /var/run/mysqld/mysqld.sock=
Настройте соединение с БД в диалоговом окне «Управление соединениями с БД». Выберите «Стандартный (TCP / IP)» в качестве метода подключения.
Подробнее см. На этой странице http://dev.mysql.com/doc/workbench/en/wb-manage-db -connections.html
В соответствии с эта другая страница используется файл сокета, даже если вы укажете localhost.
A Unix файл сокета используется, если вы не укажете имя хоста или укажите специальное имя хоста localhost.
Он также показывает, как проверить ваш сервер, выполнив следующие команды:
Если процесс mysqld запущен, вы можете проверить его, попробовав следующие команды. Номер порта или имя файла сокета Unix может отличаться в вашей настройке. host_ip представляет IP-адрес машины, на которой работает сервер.
shell> mysqladmin version shell> mysqladmin variables shell> mysqladmin -h `hostname` version variables shell> mysqladmin -h `hostname` --port=3306 version shell> mysqladmin -h host_ip version shell> mysqladmin --protocol=SOCKET --socket=/tmp/mysql.sock version
Запустите ниже cmd в терминале
/ usr / local / mysql / bin / mysqld_safe
blockquote>[/g0]
Затем перезапустите аппарат, чтобы он вступил в силу. Он работает !!
sudo /usr/local/mysql/support-files/mysql.server start
Это сработало для меня. Однако, если это не работает, убедитесь, что mysqld запущен и попробуйте подключиться.
Выглядели онлайн слишком долго, чтобы не вносить свой вклад. После попытки ввода приглашения mysql из командной строки я продолжал получать это сообщение:
ERROR 2002 (HY000): Не удается подключиться к локальному серверу MySQL через socket '/ tmp / mysql. sock '(2)
Это было связано с тем, что мой локальный сервер mysql больше не работал. Чтобы перезагрузить сервер, я перешел к
shell> cd /user/local/bin
, где находился мой mysql.server. Отсюда просто введите:
shell> mysql.server start
Это приведет к перезапуску локального сервера mysql.
Оттуда вы можете сбросить пароль root, если это необходимо ..
mysql> UPDATE mysql.user SET Password=PASSWORD('MyNewPass')
-> WHERE User='root';
mysql> FLUSH PRIVILEGES;
Для меня, я уверен, что mysqld запущен, а командная строка mysql может работать исправно. Но сервер httpd показывает проблему (не могу подключиться к mysql через сокет).
, наконец, я обнаружил, что при запуске службы mysqld при запуске службы mysqld возникают проблемы (проблема разрешения selinux), и когда я исправляю проблему selinux и запускаю mysqld с «service mysqld start», проблема подключения httpd исчезает. Но когда я запускаю mysqld с mysqld_safe & amp ;, mysqld может работать. (клиент mysql может работать правильно). Но есть еще проблема при подключении с httpd.
У меня есть две подлые гипотезы на этом
Посмотрите на возможность не иметь доступа к файлу /tmp/mysql.sock
. Когда я устанавливаю базы данных MySQL, я обычно разрешаю сайт файла сокета в /var/lib/mysql
. Если вы входите в mysql как root@localhost
, ваш сеанс ОС должен получить доступ к папке /tmp
. Убедитесь, что /tmp
имеет правильные права доступа в ОС. Кроме того, убедитесь, что пользователь sudo всегда может читать файл в /tmp
.
Доступ к mysql через 127.0.0.1
может вызвать некоторую путаницу, если вы не обращаете внимания. Как?
Из командной строки, если вы подключаетесь к MySQL с 127.0.0.1
, вам может потребоваться указать протокол TCP / IP.
mysql -uroot -p -h127.0.0.1 --protocol=tcp
или попробуйте DNS-имя
mysql -uroot -p -hDNSNAME
Это приведет к обходу входа в систему как root@localhost
, но убедитесь, что у вас установлен root@'127.0.0.1'
.
При следующем подключении к MySQL запустите это:
SELECT USER(),CURRENT_USER();
Что это дает вам?
Если эти функции возвращаются с одинаковыми значениями, то вы подключаетесь и проверяете подлинность, как ожидалось. Если значения разные, вам может потребоваться создать соответствующего пользователя root@127.0.0.1
.
Я только что изменил HOST
с localhost
на 127.0.0.1
, и он отлично работает:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'db_name',
'USER': 'username',
'PASSWORD': 'password',
'HOST': '127.0.0.1',
'PORT': '',
},
Сокет находится в / tmp. В системе Unix из-за режимов & amp; владельцы в / tmp, это может вызвать некоторые проблемы. Но, пока вы говорите нам, что вы МОЖЕТЕ использовать свою связь mysql нормально, я думаю, это не проблема в вашей системе. Первичная проверка должна состоять в том, чтобы переместить mysql.sock в более нейтральный каталог.
Тот факт, что проблема возникает «случайно» (или не каждый раз), позволяет мне думать, что это может быть проблема с сервером.
iotop
что-то не так, когда вы сталкиваетесь с проблемой? Для меня проблема в том, что я не запускал сервер mysql. Сначала запустите сервер, а затем выполните mysql
.
$ mysql.server start
$ mysql -h localhost -u root -p