Linux의 SQL Server는 초기 시작시 오류가 없으며 새 / 업데이트 된 ErrorLog 파일이 없습니다. / var / log

Linux (Ubuntu 16.04)에서 SQL Server 2017 릴리스 후보 2 (RC2)를 사용하고 있습니다.

서버가 시작되면 일반적으로 SQL Server도 시작됩니다. 그러나 어떤 이유로 든 SQL Server는 더 이상 시작되지 않습니다. 적어도 sqlcmd 사용하여 연결할 수 없습니다 . 매번 ODBC 시간 초과 ( “Sqlcmd : 오류 : SQL Server 용 Microsoft ODBC 드라이버 13 “) 오류가 발생합니다.

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 년 1 월부터 실패 함 (결과 : 종료 코드) 09-04 20:01:56 BST; 36 초 전
문서 : https://docs.microsoft.com/en-us/sql/linux
프로세스 : 8009 ExecStart = / opt / mssql / bin / sqlservr (code = exited, status = 255)
기본 PID : 8009 (code = 종료 됨, 상태 = 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'.  


답변

이것은로 작업 할 때주의하지 않는 경우로 끝났습니다 root.

Linux의 SQLCLR이 Windows에서와 같이 app.Config 파일에 액세스 할 수 있는지 연구하고 있었지만 슬프게도 그렇지 않습니다. 리눅스의 SQL Server 2017은 app 구성 파일이 있으면 무시하고 때로는 그렇지 않으면 잠 깁니다. ‘t (SQLCLR) ) 및 특정 상황에서 SQL Server가 완전히 잠 깁니다. 그 일이 발생했을 때, 그것을 막을 수있는 유일한 방법은 kill -9on을 하는 것 입니다 sqlservr. 서비스를 다시 시작한 시간 중 하나는 / opt / mssql / bin / sqlservr 을 직접 실행 하고 작업하는 동안 root프로세스 자체를 소유 한 것 root입니다.

이 즉각적인 오류 또는 실행 결과 이상한 행동 없었 sqlservr으로는 root(즉,이로 실행,하지만 VM을 다시 시작할 때 SQL 서버가 제대로 시작하려고 시도 mssql가 바로 그 시작 부분에 붙어있어 때 즉, 사용자).

나는 실행의 직접적인 결과 발견 sqlservr으로이 root되었다는 의 / var / 옵션 / MSSQL / 로그 / 오류 로그 파일 (및 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

답변

파마를 올바르게하고 똑똑한 오류를 얻으려면 최소한 다음이 필요합니다 …

# 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