Ответ 1
чтобы ответить на первую часть вашего вопроса:
run
% mysqladmin variables
и проверьте переменную 'socket'
Мне просто пришлось переустановить mysql, и у меня возникла проблема с запуском. Он не может найти сокет (mysql.sock). Проблема в том, что я не могу. В моем терминале Mac OS X 10.4 я печатаю: locate mysql.sock
, и я возвращаюсь /private/tmp/mysql.sock
. Имеет смысл, что файл сокета существует в этом месте, но на самом деле это не так.
Как найти файл сокета?
Если locate возвращает ложное местоположение, он должен иметь некоторую память и, возможно, индексы. Как обновить этот индекс?
чтобы ответить на первую часть вашего вопроса:
run
% mysqladmin variables
и проверьте переменную 'socket'
Это решило мою проблему
mysql_config --socket
UPDATE
mysql_config может сообщить нам, где должен быть файл mysql.sock, но в моем случае файл не существовал. Итак, я удалил my.cnf:
sudo rm -rf /etc/my.cnf
И затем перезагрузите mysql:
brew services restart mysql
Файл был создан, и mysql теперь работает хорошо.
Файл сокета должен быть создан автоматически, когда запускается демон MySQL.
Если он не найден, скорее всего, каталог, который должен содержать его, не существует, или какая-либо другая проблема с файловой системой не позволяет создавать сокет.
Чтобы узнать, где находится файл, используйте:
% mysqld --verbose --help | grep ^socket
Это нашло это для меня:
netstat -ln | grep mysql
Mac OSX
Моя проблема была также в файле mysql.sock.
Во время процесса установки drupal я должен был сказать, какую базу данных я хочу использовать но моя база данных не найдена
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
система ищет mysql.sock, но в неправильном каталоге
все, что вам нужно сделать, это связать его;)
мне потребовалось много времени, чтобы google всю важную информацию, но мне потребовалось даже несколько часов, чтобы узнать, как адаптироваться, но теперь я могу представить результат: D
ps: если вы хотите быть точным, вам нужно связать свой /tmp/mysql.sock-file
(если он также находится в вашей системе) в каталог, заданный php.ini(или php.default.ini), где pdo_mysql.default_socket= ...
Я получил точный путь, используя:
netstat -ln | grep -o -m 1 -E '\S*mysqld?\.sock'
Так как это возвращает только путь и не требует ввода, вы можете использовать его в оболочке script.
MySQL должен быть запущен на вашем компьютере, чтобы это работало. Также работает для MariaDB.
Исходные вопросы, похоже, возникают из-за путаницы в отношении a) где находится файл, и b) где его ищут (и почему мы не можем найти его там, когда мы делаем locate или grep). Я думаю, что идея Алнитак заключалась в том, что вы хотите найти, с чем она связана, но grep не покажет вам ссылку, не так ли? Файл там не живет, так как это ссылка, это просто указатель. Вам все равно нужно знать, куда поместить ссылку.
Мой файл sock определенно находится в /tmp, и ERROR, который я получаю, ищет его в/var/lib/(не просто /var ). Я связался с /var и/var/lib сейчас, и я все еще получение ошибки "Невозможно подключиться к локальному серверу MySQL через сокет" var/lib/mysql.sock(2) ".
Обратите внимание на (2) после ошибки.... Я нашел в другом потоке, что это означает, что сокет действительно может быть использован, но что-то не так с самим сокетом - так, чтобы выключить машину - полностью - чтобы розетка закрывалась. Затем перезапуск должен исправить. Я пробовал это, но это не сработало для меня (теперь я сомневаюсь, если я перезапустил слишком быстро?) Может быть, это будет решение для кого-то другого.
Чтобы обновить базу данных локации, я запустил
/usr/libexec/locate.updatedb
$ mysqladmin variables | grep sock
Попробуйте это вместо этого, это выведет требуемый результат, избавившись от несвязанной информации.
(Q1) Как найти файл сокета?
Место для файла сокета по умолчанию -/tmp/mysql.sock, чтобы найти файл сокета для вашей системы.
mysqladmin variables | grep socket
Если вы только что установили MySql, файл mysql.sock не будет создан до запуска сервера. Используйте эту команду, чтобы запустить его.
sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
Если вам будет предложено ввести пароль, вы можете передать имя пользователя root или другое имя пользователя, как это. Терминал запросит пароль.
mysqladmin --user root --password variables | grep socket
(Q2) Как обновить индекс локации
Обновите локацию db с помощью этой команды.
sudo /usr/libexec/locate.updatedb
Я получаю ту же ошибку в Mac OS X 10.11.6:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
После многого мучения и копания в советах здесь и в связанных вопросах, ни одна из которых, казалось, не устранила проблему, я вернулся и удалил установленные папки, а просто сделал brew install mysql
.
По-прежнему возникает ошибка с большинством команд, но это работает:
/usr/local/bin/mysqld
и возвращает:
/usr/local/bin/mysqld: готов к подключению.
Версия: '5.7.12' socket: '/tmp/mysql.sock' порт: 3306 Homebrew
Я не мог найти сокет mysql вообще, поэтому переустановил сервер mysql (все таблицы и настройки phpmyadmin были сохранены). Вот команды:
1) Установите
sudo apt-get install mysql-server
2) Выполняйте шаги конфигурации терминала
sudo mysql_secure_installation
3) Проверить статус: (Должен вернуть "Активен: активен (работает)" )
systemctl status mysql.service
Я не могу ответить на вопрос №1, но обновить базу данных locate
, запустите:
updatedb