MS SQL Server на машине
Как поставить MS SQL Server Express на VDS с Windows, ограничить ему память, безопасно открыть доступ и настроить резервные копии.
Обновлено 23 августа 2026 г.
MS SQL Server ставится на VDS с Windows Server как обычное приложение. Бесплатной редакции Express хватает многим: ограничения — 10 ГБ на базу, 1410 МБ памяти движку и до четырёх ядер.
Требования к ступени
Windows Server сам занимает около 2 ГБ памяти. Прибавьте к этому движок базы и своё приложение: VDS-1 и VDS-2 для связки Windows + MS SQL слишком тесны, рабочий минимум — VDS-3 (4 ядра / 8 ГБ / 120 ГБ), а для нагруженной базы берите VDS-4 и выше. Диск NVMe с полкой 240 МБ/с на запись у VDS-3 базу устраивает.
Установка
Скачайте установщик SQL Server Express с сайта Microsoft и запустите тихую установку:
.\SQLEXPR_x64_ENU.exe /q /ACTION=Install /FEATURES=SQLEngine /INSTANCENAME=SQLEXPRESS `
/SQLSVCACCOUNT="NT AUTHORITY\NETWORK SERVICE" /SQLSYSADMINACCOUNTS="BUILTIN\Administrators" `
/SECURITYMODE=SQL /SAPWD="ДлинныйПарольСюда" /TCPENABLED=1 /IACCEPTSQLSERVERLICENSETERMS
Отдельно поставьте средства командной строки (sqlcmd) и SQL Server Management Studio, если будете работать через интерфейс.
Проверка:
Get-Service MSSQL$SQLEXPRESS
sqlcmd -S .\SQLEXPRESS -Q "select @@version"
Память и ядра
По умолчанию движок забирает всю доступную память, и системе становится плохо. Ограничьте его явно, оставив Windows не меньше 2 ГБ:
EXEC sp_configure 'show advanced options', 1; RECONFIGURE;
EXEC sp_configure 'max server memory (MB)', 4096; RECONFIGURE;
Для VDS-3 (8 ГБ) разумное значение — 4096, для VDS-5 (24 ГБ) — 16384.
Доступ
Порт 1433 наружу открывать нельзя. Варианты:
- приложение работает на той же машине — оставьте базу на localhost и не создавайте правило в брандмауэре вообще;
- нужен доступ извне — откройте порт только своим адресам:
New-NetFirewallRule -DisplayName "MSSQL" -Direction Inbound -Protocol TCP -LocalPort 1433 `
-RemoteAddress 203.0.113.5 -Action Allow
Учётную запись sa лучше отключить, создав вместо неё именованного пользователя с правами только на свою базу:
CREATE LOGIN app WITH PASSWORD = 'ДлинныйПароль';
CREATE DATABASE shop;
USE shop; CREATE USER app FOR LOGIN app;
ALTER ROLE db_owner ADD MEMBER app;
ALTER LOGIN sa DISABLE;
Резервные копии
Автоматических копий машины у нас нет, снимков состояния в панели тоже — копии баз делаете вы сами. Задание в планировщике, раз в сутки:
sqlcmd -S .\SQLEXPRESS -Q "BACKUP DATABASE shop TO DISK='C:\backup\shop.bak' WITH INIT, COMPRESSION"
В Express сжатие недоступно — уберите COMPRESSION. Готовый файл обязательно увозите за пределы машины: копия рядом с базой не спасает при потере диска.
Проверяйте восстановление хотя бы раз в квартал: копия, которую ни разу не разворачивали, копией не считается.
Частые ошибки
- Не включён протокол TCP/IP. Express по умолчанию слушает только именованные каналы. Включается в SQL Server Configuration Manager, после чего служба перезапускается.
- Динамический порт у именованного экземпляра. Задайте 1433 явно, иначе правило брандмауэра будет промахиваться.
- База выросла до 10 ГБ и перестала принимать записи. Это лимит Express, дальше нужна другая редакция или чистка данных.
- Забытый журнал транзакций. В модели восстановления Full файл
.ldfрастёт, пока не съест диск. Либо делайте копии журнала, либо переключитесь на Simple.
Следите за свободным местом: переполненный диск останавливает базу целиком. Как чистить — в статье Диски и разделы.