Вопрос или проблема
У меня есть Synology NAS DS923+ с 32 ГБ ОЗУ и 16 ТБ хранилища (Raid 5; осталось 10,9 ТБ).
Я хочу использовать его как сервер для обмена файлами для клиентского программного обеспечения. Это программное обеспечение также использует MSSQL Server 2022 Express в качестве базы данных.
Мой план состоял в том, чтобы разместить как файлы, так и базу данных на NAS.
Я использовал изображение MS Docker для MSSQL Server 2022 и установил его в контейнере Docker, следуя этому руководству: https://learn.microsoft.com/en-us/sql/linux/quickstart-install-connect-docker?view=sql-server-ver16&preserve-view=true&tabs=cli&pivots=cs1-bash
Чтобы сохранить данные после перезапуска контейнера, я смонтировал том, например, “/volume7/sqlserver/storage:/var/opt/mssql”. Я установил разрешения, следуя этому руководству: https://learn.microsoft.com/de-de/sql/linux/sql-server-linux-docker-container-security?view=sql-server-ver16
root@NAS-Syn:~# cd /volume7/
root@NAS-Syn:/volume7# chgrp -R 0 sqlserver/
root@NAS-Syn:/volume7# chmod -R g=u sqlserver/
root@NAS-Syn:/volume7# chown -R 10001:0 sqlserver/
Контейнер работает и остается активным в течение многих дней без ошибок. Когда я пытаюсь подключиться через SSH
sudo docker exec -it sqlserver bash
и войти в SQLCMD
mssql@CONTAINER:/$ /opt/mssql-tools18/bin/sqlcmd -S localhost -No -U SA -P "$MSSQL_SA_PASSWORD"
это заканчивается тем, что консоль ждет ввода
1>
Я мог выбрать все существующие базы данных и т. д., но для любого изменения ввод больше не отображает реакцию, как
1> CREATE DATABASE TestDB;
2> SELECT Name from sys.databases;
3> GO
Это остается так, и через некоторое время я могу остановить это с помощью CTRL+C. То же самое для любых других изменений, таких как действия ALTER и т. д.
Кажется, не хватает разрешений и невозможно записывать в эту папку “/var/opt/mssql” – я даже установил chmod -R 777 без какого-либо результата. Может ли идея о разрешениях быть верной или я что-то упускаю?
Я также попробовал другой том как для Container Manager (docker), так и для его контейнеров, используя файловую систему ext4 вместо bfrs – без результата.
Ответ или решение
Вопрос о невозможности создать базы данных и подключиться через Azure Data Studio к MSSQL Server 2022, установленному на Synology NAS DS923+, требует комплексного подхода для решения проблемы. В этой ситуации мы имеем дело с несколькими потенциальными причинами, связанными с настройками разрешений, использования Docker-контейнера, а также взаимодействием с SQL Server на Linux.
Теория
Проблемы создания баз данных и работы с ними в данном контексте могут быть вызваны несколькими основными факторами:
-
Разрешения файловой системы: SQL Server, установленный в контейнере, должен иметь надлежащие уровни доступа к директориям, где хранятся базовые файлы данных. Недостаточные разрешения могут приводить к невозможности выполнения операций над базами данных.
-
Настройки Docker-контейнера: Некорректная конфигурация контейнера может ограничивать SQL Server в доступе к файловой системе NAS. Это также может включать вопросы с монтированием томов или настройками безопасности Docker.
-
Версии и совместимость платформ: В некоторых случаях может возникнуть несовместимость между версиями используемого программного обеспечения на Docker и SQL Server, что также может вызывать проблемы.
Пример
На практике было осуществлено следующее:
- Установлен Docker-контейнер с SQL Server 2022 на Synology NAS.
- Настроено монтирование файловой системы NAS в контейнере, чтобы обеспечить сохранность данных после перезапуска контейнера.
- Использованы рекомендуемые команды для установки разрешений на каталоги, где хранятся данные SQL Server.
Несмотря на проделанные шаги, наблюдаются проблемы с проведением изменений в базах данных (например, создание или изменение баз данных), что свидетельствует о проблеме на одном из этапов конфигурации.
Применение
Для решения этой проблемы, предлагаем выполнить следующие шаги и проверки:
-
Проверка разрешений: Убеднитесь, что каталог
/var/opt/mssql
, смонтированный в контейнере, действительно имеет необходимые права доступа. Выполните команду проверки разрешений и убедитесь, что пользователь, под которым запускается SQL Server, имеет полные права.ls -l /volume7/sqlserver/storage
-
Перепроверка конфигурации Docker и монтирования: Убедитесь в правильности файлов конфигурации Docker и параметрах монтирования. Для этого можно проверить файл
docker-compose.yml
или команды Docker, использованные для запуска контейнера, убедиться, что параметры монтирования указаны корректно. -
Журналы SQL Server и Docker: Проверьте журналы ошибок SQL Server и Docker на наличие сообщений об ошибках, которые могут указывать на конкретную проблему. Это можно сделать с помощью следующих команд:
docker logs <container_id> sudo less /var/opt/mssql/log/errorlog
-
Обновление Docker и SQL Server: Убедитесь, что вы используете последнюю версию Docker и контейнеров SQL Server. Инсталлирование последних обновлений может решить некоторые несовместимости и баги.
-
Тестирование сети: Убедитесь, что сеть между вашей рабочей станцией и Docker настроена правильно, и коммуникации не блокируются сетевыми политиками или FW. Проверьте порты, которые использует SQL Server, обычно это 1433.
-
Альтернативные интернет-ресурсы и поддержка: Если проблема не решена, рекомендуется обратиться к сообществу Synology и Docker, а также технической поддержке Microsoft.
Каждый из этих шагов должен выполняться последовательно и тщательно, чтобы диагностировать и устранить настоящую причину проблемы. Надеюсь, они помогут разрешить вашу ситуацию и позволят успешно работать с базами данных SQL Server на Synology NAS.