Мои искренние извинения за вопрос, на который, очевидно, уже был дан ответ. Тот факт, что я публикую, заключается в том, что я хотел бы быть абсолютно уверенным, поскольку в настоящее время речь идет о реальном сервере.
Это то, что случилось. Я случайно сисадмин на выделенном сервере. На машине работает tomcat, использующий mysql в качестве базы данных. У меня в процессе установки OpenCart случается установка curl, gd and mysql
через
apt-get install curl libcurl3 libcurl3-dev php5-curl
restart apache2
apt-get install php5-gd
restart apache2
apt-get install libapache2-mod-auth-mysql php5-mysql
restart apache2
Я был связан раньше с mysql -u<username> -p
и все было просто отлично. Теперь это дает
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
Чтение онлайн и дальше ServerFault это факты:
#/var/lib# /etc/init.d/mysqld start
-bash: /etc/init.d/mysqld: No such file or directory
#/var/lib# netstat -lntp | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 29570/mysqld
#/var/lib# ps -ef | grep mysqld
root 13684 13580 0 09:25 pts/3 00:00:00 grep mysqld
root 29321 1 0 2011 ? 00:00:00 /bin/sh bin/mysqld_safe --user=mysql
mysql 29570 29321 0 2011 ? 03:58:46 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/server.host.com.err --pid-file=/usr/local/mysql/data/server.host.com.pid --socket=/tmp/mysql.sock --port=3306
Вот как /etc/mysql/my.cnf
выглядит как :
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
skip-external-locking
dpkg -l | grep mysql
rc libapache2-mod-auth-mysql 4.3.9-12ubuntu1 Apache 2 module for MySQL authentication
ii libmysqlclient16 5.1.63-0ubuntu0.10.04.1 MySQL database client library
ii mysql-common 5.1.63-0ubuntu0.10.04.1 MySQL database common files (e.g. /etc/mysql
ii php5-mysql 5.3.2-1ubuntu4.17 MySQL module for php5
[РЕДАКТИРОВАТЬ]
очевидно есть 2 файла my.cnf
# ls -al /etc/my.cnf
-rw-r--r-- 1 root root 4715 2011-11-30 12:52 /etc/my.cnf
# ls -al /etc/mysql/my.cnf
-rw-r--r-- 1 root root 3564 2012-06-11 14:11 /etc/mysql/my.cnf
ниже представлена конфигурация /etc/my.cnf
[client]
#password = your_password
port = 3306
socket = /tmp/mysql.sock
# The MySQL server
[mysqld]
datadir =/usr/local/mysql/data
port = 3306
socket = /tmp/mysql.sock
и содержимое `/ usr / local / mysql / находится ниже
/usr/local/mysql# ls -l
total 80
drwxr-xr-x 2 root root 4096 2011-11-30 07:56 bin
-rw-r--r-- 1 root root 17987 2011-10-12 12:10 COPYING
drwx------ 11 mysql root 4096 2012-08-21 07:43 data
-rw------- 1 root root 346 2011-11-30 13:09 DEADJOE
drwxr-xr-x 2 root root 4096 2011-11-30 07:55 docs
drwxr-xr-x 3 root root 4096 2011-11-30 07:55 include
-rw-r--r-- 1 root root 7604 2011-10-12 12:10 INSTALL-BINARY
drwxr-xr-x 3 root root 4096 2011-11-30 07:56 lib
drwxr-xr-x 4 root root 4096 2011-11-30 07:55 man
drwxr-xr-x 10 root root 4096 2011-11-30 07:56 mysql-test
-rw-r--r-- 1 root root 2552 2011-10-12 12:10 README
drwxr-xr-x 2 root root 4096 2011-11-30 07:56 scripts
drwxr-xr-x 27 root root 4096 2011-11-30 07:56 share
drwxr-xr-x 4 root root 4096 2011-11-30 07:56 sql-bench
drwxr-xr-x 2 root root 4096 2011-11-30 07:55 support-files
Нет mysqld.sock в /var/run/mysqld
и нет /var/lib/mysql
но есть /usr/local/mysql/data
содержащие данные mysql и /tmp/mysqld.sock
Итак, какие у меня здесь варианты?
Шаг 1 резервное копирование /etc/mysql/my.cnf
Шаг 2 удалять /etc/mysql/my.cnf
Шаг 4 вызовите /etc/init.d/mysql start (на самом деле mysql отсутствует в /etc/init.d/ от mysql.server, я полностью смущен этим)
Так что, если я хорошо понимаю. установка php5-mysql установила mysql-commons, который создал /etc/mysql/my.cnf
тем временем у меня уже есть /etc/my.cnf
Пожалуйста, сообщите об этом, так как я не хочу ошибаться и запускать команды исходя из собственных предположений. Спасибо, что прочитали это.
Хорошо, это беспорядок.
Чтобы ответить на некоторые из ваших проблем / вопросов:
Почему Tomcat все еще работает нормально?
Tomcat, возможно, подключается через сеть, а не через сокет.
Также mysqld не будет повторно читать my.cnf во время его работы.
Отсутствующий / перемещенный каталог данных будет проблемой при следующем перезапуске, а не во время выполнения.
Почему вы не можете войти через mysql -u ...
больше?
Теперь у вас есть 2 файла my.cnf.
Порядок файлов важен, mysql сначала прочитает /etc/my.cnf
а потом /etc/mysql/my.cnf
. Если параметры определены в обоих местах, победит последний (http://dev.mysql.com/doc/refman/5.1/en/option-files.html).
Какие у вас есть варианты сейчас?
Если вы удалите /etc/mysql/my.cnf
, или замените его содержимое на /etc/my.cnf
, вы будете вести себя так же, как и раньше.
На данный момент это сработает, но в будущем я бы посоветовал перейти на чистую установку из пакета.
Используйте следующую команду в терминале.
sudo ln -s {your current .sock location} {path in the error}
например
sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock
Это исправит ошибку.
Примечание: перед запуском этой команды необходимо проверить, существует ли папка mysqld. если не существует, создайте папку перед запуском команды.
Как сказал @faker, /etc/init.d/mysql.server и / usr / local / mysql указывает, что ваш сервер Mysql установлен из источников. Не стоит поддерживать скомпилированный экземпляр mysql, если у вас есть красивый двоичный файл mysql со сценариями, совместимыми с Ubuntu (например, сценарии запуска debian для обновлений, восстановления таблиц при загрузке и т. Д.).
Также - никогда не копируйте сокеты - лучше сделать символьную ссылку :)
Сервер MySQL еще не установлен согласно dpkg
, вам нужно установить его, используя apt-get install mysql-server