Мне нужен столбец с несколькими значениями, он может быть реализован как поле xml
. Он может быть преобразован в запятую, если это необходимо
, запрашивающий список XML в sql-сервере, используя Xquery .
Будучи полем xml, некоторые проблемы могут быть устранены.
С CSV: не может гарантировать, что каждое значение является правильный тип данных: нет возможности предотвратить 1,2,3, банан, 5
С XML: значения в теге могут быть принудительно заданы для типа
С CSV: не удается использовать ограничения внешнего ключа для привязки значений к таблице поиска;
С XML: все еще проблема
С CSV: не может обеспечить уникальность: никакой возможности предотвратить 1,2,3,3 , 3,5
С XML: все еще проблема
С CSV: невозможно удалить значение из списка, не извлекая весь список.
С XML: отдельные элементы могут быть удалены
С CSV: трудно найти все объекты с заданным значением в списке; вам нужно использовать неэффективное сканирование таблицы.
С XML: поле xml можно индексировать
С CSV: трудно подсчитать элементы в списке или сделать другой агрегат запросы. **
С XML: не особо сложно
С CSV: трудно присоединить значения к справочной таблице, к которой они ссылаются. **
С XML: не особенно сложно
С CSV: трудно получить список в отсортированном порядке.
С XML: не особо сложно
С CSV: сохранение целых чисел в виде строк занимает в два раза больше места, чем сохранение двоичных целых чисел.
С XML: память еще хуже, чем csv
С CSV: Плюс много запятых.
С использованием XML: теги используются вместо запятых
Короче говоря, использование XML затрагивает некоторые проблемы с ограниченным списком И может быть при необходимости преобразуется в список с разделителями
Вы подключаетесь к «localhost» или «127.0.0.1»? Я заметил, что при подключении к «localhost» используется разъем сокета, но когда вы подключаетесь к «127.0.0.1», используется соединитель TCP / IP. Вы можете попробовать использовать «127.0.0.1», если разъем сокета не включен / работает.
Просто дождь в ту же проблему - и вот как я его обратился.
Предполагая, что mysqld запущен, проблема может быть просто клиентом mysql, не зная, где искать файл сокета.
Самый простой способ адресовать это состоит в том, чтобы добавить следующую строку в файл профиля .my.cnf вашего пользователя (в linux, который обычно находится в / home / myusername):
socket=<path to the mysql socket file>
Если у вас там нет файла .my.cnf, создайте его, содержащее следующее:
[mysql]
socket=<path to the mysql socket file>
В моем случае, поскольку я переместил папку данных по умолчанию mysql (/ var / lib / mysql ) в другом месте (/ data / mysql), я добавил к .my.cnf следующее:
[mysql]
socket=/data/mysql/mysql.sock
Надеюсь, это поможет.
Моя проблема заключалась в том, что я успешно установил mysql и работал нормально.
Но однажды произошла одна и та же ошибка.
Не удается подключиться к локальному серверу MySQL через socket '/var/lib/mysql/mysql.sock' (2)
И не существует файла mysql.sock.
Это решение разрешило мою проблему и mysql снова запущен и запущен:
Войдите в систему с правами root:
sudo su -
Run:
systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service
Проверьте как root:
mysql -u root -p
mysql теперь должен быть запущен.
Надеюсь, это тоже поможет кому-то другому.
Это проблема, если у вас заканчивается дисковое пространство. Решение состоит в том, чтобы освободить место на жестком диске.
Пожалуйста, прочитайте больше, чтобы получить объяснение:
Если вы используете MySQL в LINUX, проверьте свободное место на жестком диске с помощью свободного диска команды :
df
, если вы получаете что-то вроде этого:
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda2 5162828 4902260 0 100% /
udev 156676 84 156592 1% /dev
/dev/sda3 3107124 70844 2878444 3% /home
Тогда это проблема, и теперь у вас есть решение!
Так как mysql .sock хочет быть созданным в папке mysql, которая почти всегда находится под корневой папкой, не может быть достигнута из-за нехватки места.
Если вы периодически используете команду ls в каталоге mysql (в openSUSE 11.1 находится в / var / lib / mysql), вы получите что-то вроде:
hostname:/var/lib/mysql #
.protected IT files ibdata1 mysqld.log systemtemp
.tmp NEWS greekDB mysql mysqld.pid test
ARXEIO TEMP1 ib_logfile0 mysql.sock polis
DATING deisi ib_logfile1 mysql_upgrade_info restore
Файл mysql.sock часто появляется и исчезает (вы должны попробовать выделить с ls, чтобы попасть в экземпляр с помощью mysql .sock файл в папке).
Это вызвано нехваткой дискового пространства.
Надеюсь, что я помогу некоторым людям !!!! Спасибо!
Скорее всего, mysql.sock
не существует в /var/lib/mysql/
.
Если вы найдете тот же файл в другом месте, тогда symlink его:
Например: у меня это есть /data/mysql_datadir/mysql.sock
Переключить пользователя в mysql и выполнить, как указано ниже:
su mysql
ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock
Это решило мою проблему
Если вы находитесь в оболочке sf.net , попробуйте:
mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p
Измените {LETTER} и {GROUP ID}, как показано в вашей базе данных MySQL проекта admin profile.
Сервер MySQL не запущен, или это не местоположение его файла сокета (проверьте my.cnf).
В моем случае я переместил файл сокета в другое место внутри /etc/my.cnf
с /var/lib/mysql/mysql.sock
до /tmp/mysql.sock
Даже после перезапуска службы mysqld, я все еще вижу сообщение об ошибке, когда я пытаюсь подключения. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
Проблема заключается в том, что клиент настроен. Запуск диагностики фактически покажет правильный путь сокета. например ps aux | grep mysqld
Работы:
mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock
Не работает:
mysql -uroot -p
mysql -uroot -p -hlocalhost
Вы можете исправить эту проблему добавив одну и ту же строку сокета в разделе [client]
внутри конфигурации mysql.
Убедитесь, что вы запустили сервер:
mysql.server start
Затем подключитесь к пользователю root:
mysql -uroot
Если вы находитесь в недавнем RHEL, вам может понадобиться запустить mariadb (open source mysql db) вместо mysql db:
yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start
Затем вы должны иметь доступ к mysql в обычный способ:
mysql -u root -p
Обратите внимание, что в то время как mysql считывает информацию о местоположении файла сокета из файла my.cnf, программа mysql_secure_installation, похоже, делает это неправильно.
Итак, если вы похожи на меня и тасуете во время установки вы можете столкнуться с ситуацией, когда вы можете подключиться к базе данных с помощью mysql просто отлично, но вещь не может быть защищена (не используя этот сценарий в любом случае).
Чтобы исправить это предложение sreddy работает хорошо: сделайте softlink, откуда скрипт будет ожидать, что сокет будет там, где он есть на самом деле. Пример:
ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock
(я использую / tmp / в качестве местоположения по умолчанию для сокетов)
Один из способов воспроизвести эту ошибку: если вы хотите подключиться к иностранному серверу, но вместо этого подключиться к несуществующей локальной:
eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $
Итак, вы должны указать хост следующим образом:
eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+-------------------------+
| Database |
+-------------------------+
| information_schema |
| mysql |
| performance_schema |
+-------------------------+
3 rows in set (0.00 sec)
mysql> exit
Bye
eric@dev ~ $
MariaDB, разработанная сообществом разработчиков MySQL, стала стандартной версией MySQL во многих дистрибутивах.
Итак, сначала вы должны начать,
$ sudo systemctl start mariadb
Если это не так, try,
$ sudo systemctl start mysqld
Затем, чтобы запустить mysql,
$ mysql -u root -p
На сегодняшний день в Fedora пакет называется mariadb
, а в Ubuntu он называется mariadb-server
.
Поэтому вам может потребоваться установить его, если он еще не установлен в вашей системе.
Убедитесь, что в /var
осталось достаточно места. Если демон Mysql не может записать дополнительную информацию на диск, сервер mysql не запустится, и это приведет к ошибке Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
. Рассмотрим использование
expire_logs_days = 10
max_binlog_size = 100M
. Это будет поможет вам сократить использование диска.
innodb_buffer_pool_size
в my.cnf
. Установка его на небольшое значение, например innodb_buffer_pool_size = 50M
, является хорошим тестом, чтобы отбросить эту гипотезу;)
– Yeke
7 January 2015 в 16:26
Сначала введите «service mysqld start» и войдите в систему
столкнулся с этой проблемой при попытке подключиться к mysql в SSH-клиенте, нашел добавление пути сокета к команде, полезной при переключении между сокетами.
> mysql -u user -p --socket=/path/to/mysql5143.sock
Проверьте, работает ли еще одна служба mysql.
Убедитесь, что ваша служба mysql запущена
service mysqld start
Затем попробуйте выполнить одно из следующих действий:
(если вы не установили пароль для mysql)
mysql -u root
, если вы уже установили пароль
mysql -u root -p
service mariadb start
, потому что mariadb.org/debian-9-released-mariadb-mysql-variant
– r2d2oid
22 June 2017 в 22:01
Если ваш файл my.cnf (обычно в папке etc) правильно настроен с помощью
socket=/var/lib/mysql/mysql.sock
, вы можете проверить, работает ли mysql со следующей командой:
mysqladmin -u root -p status
попробуйте изменить свое разрешение на папку mysql. Если вы работаете локально, вы можете попробовать:
sudo chmod -R 777 /var/lib/mysql/
, которые решили его для меня
Он работал со мной со следующими изменениями:
Какой бы путь для сокета не упоминался в [mysqld] и тот же в [client] в my.cnf и не перезагружать mysql
[mysqld ] socket = / var / lib / mysql / mysql.sock
[client] socket = / var / lib / mysql / mysql.sock
, если вы меняете файлы в / var / lib / mysql [например, копируете или заменяете это], вы должны установить владельца файлов в mysql, это так важно, если перезапуск mariadb.service был неудачным
chown -R mysql: mysql / var / lib / mysql / *
chmod -R 700 / var / lib / mysql / *
blockquote>
Мне пришлось отключить explicit_defaults_for_timestamp
из my.cnf.
Попробуйте сначала 2, 3 решения. Ошибка - это всплывающее окно и amp; Если вы не можете найти /var/lib/mysql/mysql.sock
find /var/ -name mysql.sock
Проверить доступное пространство в / var /
df
Если каталог заполнен, удалите некоторые неиспользуемые файлы / каталоги
rm /var/cache/*
Вероятно, ваша проблема будет отсортирована сейчас.
Если ваш mysql ранее работал и внезапно остановился, просто «перезагрузите» сервер.
Столкнулся с этой проблемой на моем CentOS VPS .->
Постоянно получал
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)
Пробовал все методы, окончательно перезапустив сервер, исправил проблемы ->
shutdown -r now
Надеюсь, это поможет!
Это может быть глупое предложение, но на 100% убедитесь, что ваша БД все еще размещена на локальном хосте. Например, если сетевой администратор выбрал (или изменил) хостинг Amazon DB, вам понадобится это имя хоста!
Вот что сработало для меня:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Просто отредактируйте /etc/my.cnf
Добавьте следующие строки в my.cnf
[mysqld]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
Перезапустите mysql и снова подключитесь
mysql -u user -p база данных паролей -h host;
blockquote>
Убедитесь, что вы правильно установили сервер MySQL, я неоднократно встречал эту ошибку, и я думаю, что это сложно отлаживать из сокета, я имею в виду, что было бы проще переустановить его.
Если вы используете CentOS 7, вот правильный способ его установить:
Прежде всего, добавьте источник сообщества mysql yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
. Затем вы можете установить его на yum install mysql-community-server
Запустите его с помощью systemctl: systemctl start mysqld
Проверьте, работает ли ваша служба mysqld или нет, если она не запущена, запустите службу.
Если ваша проблема не решена, найдите /etc/my.cnf
и измените следующим образом: где вы видите строка, начинающаяся с socket
. Перед выполнением этого обновления сделайте резервную копию этого файла.
socket=/var/lib/mysql/mysql.sock
Изменить на
socket=/opt/lampp/var/mysql/mysql.sock -u root