SQL Server в Linux завис при первинному запуску, без помилок і жодного нового / оновленого файлу ErrorLog


11

Я використовую SQL Server 2017, випуск Candidate 2 (RC2) на Linux (Ubuntu 16.04).

Коли сервер запускається, зазвичай запускається і SQL Server. Але чомусь SQL Server більше не запускається. Принаймні я не можу підключитися до нього за допомогою sqlcmd . Я щоразу отримую помилку очікування ODBC ( "Sqlcmd: Помилка: драйвер Microsoft ODBC 13 для SQL Server "):

Login timeout expired.  
TCP Provider: Error code 0x2749.  
A network-related or instance-specific error has occurred while establishing a
connection to SQL Server. Server is not found or not accessible. Check if instance
name is correct and if SQL Server is configured to allow remote connections.
For more information see SQL Server Books Online..

Однак коли я бігаю:

ps aux | grep mssql

Я отримую дві записи, які показують, що mssqlкористувач виконує sqlservrпроцес.

Також у файлі журналу помилок в / var / opt / mssql / log / немає збігу часових позначок, коли я запускав VM (або перезапускав службу), а також немає нових записів у цьому файлі.

І, в / var / log / messages , все, що з’являється:

Це версія для оцінки. До періоду оцінювання залишилось [141] день.

Якщо я біжу systemctl status mssql-server, то отримую наступне:

● mssql-server.service -
завантажений двигун бази даних Microsoft SQL Server : завантажений (/lib/systemd/system/mssql-server.service; увімкнено; попередньо встановлений постачальник: увімкнено)
Активний: невдало (Результат: код виходу) з пн 2017- 09-04 20:01:56 BST; 36s тому
Документи: https://docs.microsoft.com/en-us/sql/linux
Процес: 8009 ExecStart = / opt / mssql / bin / sqlservr (код = вийшов, статус = 255)
Основний PID: 8009 (код = вийшов, статус = 255)

Started Microsoft SQL Server Database Engine.  
This is an evaluation version.  There are [141] days left in the evaluation period.  
Stopping Microsoft SQL Server Database Engine...  
mssql-server.service: Main process exited, code=exited, status=255/n/a  
Stopped Microsoft SQL Server Database Engine.  
mssql-server.service: Unit entered failed state.  
mssql-server.service: Failed with result 'exit-code'.  

Відповіді:


15

Це закінчилося як випадок не бути обережними при роботі root.

Я досліджував, чи отримає SQLCLR в Linux доступ до файлу app.Config, як це робиться в Windows (на жаль, це не так: SQL Server 2017 в Linux ігнорує конфігураційний файл програми, якщо він існує, або іноді блокується, якщо він не працює) 't (SQLCLR) ) і за певних обставин SQL Server повністю закриється . Коли це сталося, єдиний спосіб зупинити це - це зробити kill -9на sqlservr. Одного разу, коли я знову запускав службу, я робив це, безпосередньо виконуючи / opt / mssql / bin / sqlservr, і поки я працював root(отже, сам процес був власником root).

Не було негайних помилок або дивної поведінки внаслідок запуску sqlservrяк root, АЛЕ коли VM перезапустився і SQL Server намагався запуститися належним чином (тобто працює як mssqlкористувач), тобто коли він застряг на самому початку.

Я виявив, що прямим наслідком запуску sqlservrяк rootбуло те, що файл / var / opt / mssql / log / errorlog (та деякі інші, які створюються при запуску SQL Server) належав root(має сенс).

І прямим наслідком тих файлів, якими належить, rootє те, що, коли процес запускається належним чином (як mssql), mssqlкористувач не має дозволу перейменовувати файл, який закінчується .1 (і все, що ще має відбуватися з будь-яким іншим) файли, такі як трасування за замовчуванням тощо). Однак, замість того, щоб отримати помилку дозволу, вона просто зависає назавжди.

Основне виправлення полягає в тому, щоб просто запустити таке, як root(я не намагався запустити його як mssql). Для обох з наступних команд, sudoпотрібен тільки тоді , коли в даний час не діє , як , rootяк це буде працювати команда , яка слід за нею , як root (або який - то інший користувач , якщо ви вкажете -u username), після того , як буде запропоновано ввести rootпароль.

sudo chown -R  mssql:mssql /var/opt/mssql

Вторинне виправлення (щоб переконатися, що це не повториться) - це правильно запустити SQL Server ;-):

sudo systemctl start mssql-server

1

Щоб правильно отримати хімічні речовини та отримати розумні помилки, вам потрібно принаймні наступне ...

# make sure needed directories exist
sudo mkdir /var/opt/mssql /var/opt/mssql/.system /var/opt/mssql/data /var/opt/mssql/log

# this should be owned by mssql
sudo chown -R  mssql:mssql /var/opt/mssql
sudo chmod 770 /var/opt/mssql

# this should be owned by root
sudo chown -R root:root /opt/mssql
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.