Когда я только начинал знакомиться с WSL 1.0, сетевое взаимодействие было более простым. Но поскольку WSL2 использует динамический виртуальный IP-адрес для каждой виртуальной машины, теперь все стало немного сложнее. Здесь мы научимся устанавливать сервер и клиент Postgres и MariaDB как в Windows, так и в WSL2 Linux и получать к ним доступ через виртуальное Ethernet-соединение. Под термином используя взаимозаменяемо
мы подразумеваем доступ к базе данных в Windows из WSL2 Linux и наоборот.
ПОСТАНОВКА ЗАДАЧИ: WSL2 IPv4 имеет доступ к PostgreSQL с localhost в Linux, но не в Windows. Для связи между ними требуется назначенный IP-адрес виртуального Ethernet-адаптера, а также требуется брандмауэр.
ТРЕБОВАНИЯ: Клиенты баз данных должны иметь возможность доступа к серверам баз данных как в одной, так и в другой ОС. Клиент WSL должен иметь доступ к серверу в Windows, а клиенты Windows должны иметь доступ к базе данных в WSL2.
Для начала работы необходимо установить на машину дистрибутив на базе Windows и WSL2.
- Взаимозаменяемая работа с базами данных
- Серверы баз данных
- Серверы баз данных в Windows
- Серверы баз данных в Linux
- Сервер PostgreSQL в WSL
- Сервер MariaDB в WSL
- Клиенты базы данных
- Клиенты базы данных в Windows получают доступ к базе данных как в Windows & WSL
- Клиенты базы данных в WSL получают доступ к базе данных как в Windows, так и в WSL
- Советы
- Полное удаление Postgres
- Обходной путь для ошибки в phpmyadmin
- Ссылки
Взаимозаменяемая работа с базами данных
Источник: https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202
Обратите внимание, что вам необходимо определить IP-адрес виртуальной машины (WSL) и хост-машины, с которой вы работаете, который может отличаться от IP-адреса вашей локальной физической машины. Вы можете найти IP-адрес с помощью диспетчера задач, а также с помощью этой команды в WSL:
ip route # or
ip addr | grep eth0
Возможно, вам также потребуется включить брандмауэр на порту 3306 для MariaDB и 5432 для Postgres для обеспечения взаимосвязи.
Если вам по каким-то причинам требуется перенаправление портов в WSL, в этой статье все подробно описано. Для сравнения Postgres и MySQL вы можете посмотреть этот блог EDB, чтобы выбрать систему баз данных в соответствии с вашими потребностями.
Серверы баз данных
Серверы баз данных в Windows
Для Windows вы можете получить PostgreSQL от EDB и pgAdmin 4 с их страницы загрузки. Просто установите их и при необходимости добавьте их каталоги bin
в папку path.
Для MariaDB я рекомендую использовать XAMPP, так как он надежен и прост для начинающих. Но если вы хотите установить автономную версию, вы можете скачать и установить ее с официального сайта MariaDB. Вы можете использовать как MySQL Workbench, так и phpmyadmin для доступа к ним в качестве клиента.
Вы должны иметь возможность нормального доступа в Windows с помощью команд psql
и mysql
.
Включение/отключение серверов баз данных в Windows осуществляется через «Службы Windows». Доступ к ней можно получить, введя
service.msc
в «Выполнить» Windows (Win+R
).
Серверы баз данных в Linux
Сервер PostgreSQL в WSL
Большинство дистрибутивов Linux уже имеют исходники для установки пакетов Postgres.
sudo apt update
sudo apt install postgresql postgresql-client postgresql-client-common postgresql-common postgresql-contrib -y
psql --version # to confirm installation
sudo service postgresql start # replace ending by stop to stop server, restart to restart server
sudo -u postgres psql # to access Postges via command line (both in Linux)
СОВЕТ: вы можете проверить статус ваших служб в Linux, используя sudo service --status-all
в оболочке.
Это ожидаемый результат после правильной установки.
Чтобы решить проблему отказа в подключении, вот обходной путь:
sudo -u postgres psql -c 'SHOW config_file' # to locate config file
Как только вы найдете файл, измените listen_addresses
на *
в postgresql.conf
, перезапустите Postgres командой sudo service postgresql restart
.
Также обновите это в pg_hba.conf
, чтобы разрешить удаленный аутентификатор с хоста Windows.
...
host all all 0.0.0.0/0 scram-sha-256
host all all ::/0 scram-sha-256
Это менее рекомендуемый метод (для безопасности), который вы можете попробовать в случае, если вышеуказанные методы не позволяют вам подключиться в Windows:
#newline
host all all all trust
Вот подробная статья, если вы хотите углубиться в этот вопрос. Также ознакомьтесь с этой статьей для лучшего понимания.
Сервер MariaDB в WSL
Вот команды, достаточные для настройки сервера MariaDB в WSL:
sudo apt install mariadb-server
sudo service mariadb start
sudo mysql # to access the database CLI
Чтобы изменить порт, отредактируйте конфигурационный файл /etc/mysql/my.cnf
, который соответствует вашим потребностям.
В этом потоке StackOverflow предлагается отредактировать файл /etc/mysql/mariadb.conf.d/50-server.cnf
, заменив bind-address = 127.0.0.1
(localhost) на bind-address = 0.0.0.0
или *
(all). После перезапуска сервера с помощью $ sudo service mariadb restart
, вы сможете войти в сервер баз данных Linux в клиенте Windows также с правильной конфигурацией учетных данных (имя пользователя, пароль).
Клиенты базы данных
Клиенты базы данных в Windows получают доступ к базе данных как в Windows & WSL
Нам нужно включить брандмауэр для входящих и исходящих соединений в Windows (для работы между ними). Чтобы получить доступ, нам нужно найти IP виртуальной машины, на которой активен сервер базы данных, и мы можем получить доступ, указав хост, порт, пользователя и пароль от любого клиента базы данных. Этого процесса достаточно для хорошо настроенного сервера.
Вот пример команды psql
для входа в систему для пользователя dev
, чтобы избежать конфликта:
psql -U dev -d postgres -h 192.168.176.181 -p 5432 # server host IP
В pgAdmin укажите IP-адрес хоста из ip route
и добавьте другие учетные данные для доступа к серверу Postgres на базе WSL.
Чтобы получить доступ к MariaDB в Windows с помощью XAMPP phpmyadmin
, создайте пользователя на сервере WSL MariaDB (скажем, wsl_user
без пароля) и предоставьте ALL PRIVELEDGES
. Теперь, вы можете перейти на портал входа phpmyadmin
и найти Debian
в версии сервера.
Здесь mysql
получает доступ к серверу в Windows в первом случае, а во втором случае, сервер изначально установлен в WSL. Поэтому доступ осуществляется с обеих сторон.
В phpMyAdmin вам также нужно изменить config.inc.php
на $cfg['Servers'][$i]['auth_type'] = 'config';
на cookie
, чтобы получить страницу входа.
Вот пример, показывающий доступ в командной строке (сервер базы данных находится в Windows):
Клиенты базы данных в WSL получают доступ к базе данных как в Windows, так и в WSL
Чтобы psql в WSL получил доступ к базе данных Windows, необходимо найти IP хоста (например, с помощью ip route
), а затем выполнить следующую команду:
psql -h [HOST ADDRESS] -U [USER NAME]
Для клиентского доступа к MariaDB все просто, как mysql
, например mysql -u wsl_root -p -h 172.24.xxx.xxx
:
Чтобы упростить ситуацию, просто создайте нового пользователя и получайте доступ через него:
CREATE USER 'wsl_root'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'wsl_root'@'localhost' WITH GRANT OPTION;
CREATE USER 'wsl_root'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'wsl_root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
Более подробную информацию вы можете получить в этих блогах: https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202 и https://dev.to/qviper/connecting-mysql-server-in-windows-machine-from-wsl-4pf1.
Советы
Полное удаление Postgres
Вот подробное решение этого процесса:
- Удалите Postgres из apt (или из другой установки, если таковая имеется):
sudo apt-get --purge remove postgresql postgresql-*
- Проверьте, удалены ли пакеты:
dpkg -l | grep postgres
Вот подробное описание процесса:
- Удалите Postgres из apt (или из другой установки, если таковая имеется):
sudo apt-get --purge remove postgresql postgresql-*
- Проверьте, удалены ли пакеты:
dpkg -l | grep postgres
Здесь вы должны обнаружить, что пакеты пусты. Если нет, удалите их вручную.
- Удалите папки конфигурации, указанные ниже:
sudo rm -rf /var/lib/postgresql/
sudo rm -rf /var/log/postgresql/
sudo rm -rf /etc/postgresql/
- Наконец, удалите пользователя
postgres
:
sudo deluser postgres
Обходной путь для ошибки в phpmyadmin
Предоставьте все права доступа к root
и pma
и удалите пароль:
CREATE USER 'pma'@'localhost' IDENTIFIED BY '';
SET PASSWORD FOR root@localhost='';
Ссылки
- https://docs.microsoft.com/en-us/windows/wsl/networking
- https://www.enterprisedb.com/postgres-tutorials/how-use-postgresql-django
- https://www.enterprisedb.com/blog/how-to-secure-postgresql-security-hardening-best-practices-checklist-tips-encryption-authentication-vulnerabilities
- https://www.enterprisedb.com/postgresql-tutorial-resources-training
- https://dev.to/hymanzhan/setting-up-wsl-2-for-web-development-3202#install-database-in-wsl
- https://stackoverflow.com/questions/56824788/how-to-connect-to-windows-postgres-database-from-wsl