Изменение каталога данных в mariadb
Я пытаюсь изменить каталог данных в mariadb, после изменения пути к каталогу данных в INI-файле, затем попробуйте перезапустить службу, она не может запуститься!!! Показать предупреждение как:
> Error 1067: The process terminated unexpectedly
В MySQL смена каталога данных работает отлично. Но я не знаю, почему то же самое не работает с mariadb
,
Работает только путь по умолчанию...
2 ответа
Я должен упомянуть замечательные инструменты внутренних систем (например, procmon), которые были бы очень полезны не только в этой ситуации, но и во многих других. Журнал ошибок Windows - это второй инструмент, который действительно очень полезен, если вы посмотрите на него. Знайте свои инструменты
Теперь конкретный совет для этого случая - пользователь, который запускает сервис MariaDB, должен иметь возможность создавать файл в каталоге datadir. По умолчанию MariaDB использует Network Service, в то время как MySQL использует Local System (самый мощный пользователь Windows).
Это изменение делает MariaDB более безопасным (меньшее влияние, если сервис взломан), однако не следует ожидать, что NetworkService имеет доступ для чтения и записи к любому каталогу, как LocalSystem.
Таким образом, чтобы решить вашу проблему, вы должны либо сделать каталог доступным для записи для NetworkService, либо изменить пользователя службы на пользователя, который имеет доступ для чтения и записи к каталогу.
Недавно кто-то спросил это, и я пришел с другим ответом, включающим символические ссылки. Я чувствую, что это решение может быть самым простым, не нужно путаться в my.ini или конфигурации сервиса.
Как переместить каталог данных после установки (если, например, диск C:\ переполнен).
К сожалению, это невозможно сделать из MSI, поэтому это нужно сделать вручную.
Вам нужно
- Остановить службу
- Переместить каталог данных на новое место (с сохранением прав)
- Создать символическую ссылку из старого местоположения в новое местоположение
- Предоставить учетной записи службы (NetworkService) полные разрешения для символической ссылки
- Запустите сервис снова
Вот иллюстрация, как сделать это из скрипта (который должен запускаться с полными привилегиями администратора, например, в командной строке с повышенными правами). я использую robocopy
скопировать файлы, mklink
создать ссылку на каталог, icacls
для установки разрешений на ссылку, и net
запустить / остановить сервис
set SERVICE=MySQL
set SRCDIR="C:\Program Files\MariaDB 10.1\data"
set DESTDIR="D:\data"
net stop %SERVICE%
robocopy %SRCDIR% %DESTDIR% /MIR /SEC /MOVE
mklink /d %SRCDIR% %DESTDIR%
icacls %SRCDIR% /grant "NT AUTHORITY\NetworkService":F
net start %SERVICE%
В настоящее время это не приведет к удалению нового каталога данных при удалении, даже если вы выбрали "Удалить данные" в MSI.