MySQL CLI-клиент изменить местоположение сокета - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть один сервер приложений и несколько серверов БД. На серверах БД я установил весь серверный пакет MySQL, но на сервере приложений я установил только клиентский пакет MySQL, чтобы он мог подключаться к серверу MySQL, который находится на серверах БД. Поскольку я использую кластер InnoDB, на моем сервере приложений я установил и bootstrap -ed маршрутизатор MySQL.

Теперь я хочу подключиться к MySQL серверу через MySQL роутер. Мне нужно выполнить одну из следующих команд MySQL:
mysql -uroot -p'password' -h127.0.0.1 -P6446
mysql -uroot -p'password' -P6446 --protocol=tcp

Я должен указать порт, что нормально в этом случае, поскольку маршрутизатор MySQL настроен другой порт для доступа к разным БД (чтение-запись БД или чтение-только БД). Я имею в виду, что мне нужно указать -h127.0.0.1 или --protocol=tcp, чтобы заставить его использовать TCP-соединение вместо сокета. Если я не укажу это, я получу следующую ошибку:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Моя цель - избавиться от указания хоста / протокола в каждом соединении. Откуда взялся /var/lib/mysql/mysql.sock? Это MySQL расположение сокета по умолчанию? фактическое расположение сокета, которое я настраиваю в my.cnf на сервере БД для группы [client], равно /opt/mysql/mysql.sock. И местоположение сокета, настроенное в маршрутизаторе, socket=/etc/mysqlrouter/mysql.sock. Я проверил, если я указываю расположение сокета с --socket для настроенного в маршрутизаторе, он будет работать без указания хоста и протокола в качестве TCP, мне даже не нужно указывать хост, так как на основе другого сокета маршрутизатор знает к какой БД вы подключаетесь (есть еще один сокет mysqlro.sock, предназначенный только для чтения БД). Как изменить расположение сокета по умолчанию, поскольку MySQL клиентский пакет не поставляется с my.cnf (или на самом деле?). Если вышеуказанное невозможно, могу ли я принудительно установить MySQL клиентское соединение по TCP?

1 Ответ

2 голосов
/ 13 апреля 2020

Чтобы настроить конфигурации для клиентской программы (на клиентском хосте, в вашем случае, скорее всего, на сервере приложений), вам нужно создать новый файл в каталоге пользователей с именем ~/.my.cnf, как описано в 4.2.2.2 Использование файлов опций . Используйте этот файл, чтобы добавить настройки по умолчанию для приложения mysql, добавив раздел [mysql]. Например, при запуске

$ mysql --print-defaults

будет отображаться следующий (пример) вывод:

mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4 

(добавлены новые строки для удобства чтения)

Добавьте следующие строки в ваш новый ~/.my.cnf файл:

[mysql]
socket=/tmp/example

С этого момента будут использоваться следующие настройки по умолчанию:

$ mysql --print-defaults
mysql would have been started with the following arguments:
--loose-default-auth=mysql_native_password
--socket=/var/run/mysqld/mysqld.sock
--character-sets-dir=/usr/share/mysql/charsets
--loose-default-character-set=utf8mb4
--socket=/tmp/example

Для целей тестирования, когда позвонив по номеру mysql, вы получите следующее сообщение об ошибке (как и ожидалось):

$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/example' (2)

В вашем случае вы можете добавить строку host=127.0.0.1, чтобы она использовала указанное имя хоста так же, как при использовании -h127.0.0.1. Вы также можете добавить параметр port в этот файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...