Linux'ta SQL Server ilk açılışta kilitleniyor, hata yok ve yeni / güncellenmiş ErrorLog dosyası yok


11

Linux'ta SQL Server 2017, Release Candidate 2 (RC2) kullanıyorum (Ubuntu 16.04).

Sunucu başlatıldığında, SQL Server da genellikle başlar. Ancak bazı nedenlerden dolayı SQL Server artık başlamıyor. En azından sqlcmd kullanarak bağlanamıyorum . Şimdi her zaman bir ODBC zaman aşımı ( "Sqlcmd: Hata: SQL Server için Microsoft ODBC Sürücüsü 13 ") hatası alıyorum:

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..

Ancak, koştuğumda:

ps aux | grep mssql

mssqlKullanıcının sqlservrişlemi çalıştırdığını gösteren iki girdi döndürdüm .

Ayrıca, / var / opt / mssql / log / dizinindeki errorlog dosyasında , VM'yi başlattığımda (veya hizmeti yeniden başlattığımda) veya bu dosyada yeni girişler olmadığında zaman damgası eşleşmiyor.

AND, / var / log / messages dizininde görünen tek şey:

Bu bir değerlendirme sürümüdür. Değerlendirme döneminde [141] gün kaldı.

Eğer koşarsam systemctl status mssql-server, aşağıdakileri elde ederim:

● mssql-server.service - Microsoft SQL Server Veritabanı Altyapısı
Yüklendi: yüklendi (/lib/systemd/system/mssql-server.service; etkin; satıcı ön ayarı: etkin)
Etkin: başarısız (Sonuç: çıkış kodu) Pzt 2017- 09-04 20:01:56 BST; 36s önce
Dokümanlar: https://docs.microsoft.com/tr-tr/sql/linux
Süreç: 8009 ExecStart = / opt / mssql / bin / sqlservr (kod = çıkıldı, durum = 255)
Ana PID: 8009 (kod = çıkış, durum = 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'.  

Yanıtlar:


15

Bu, olarak çalışırken dikkatli olmama durumu olarak sona erdi root.

Linux'taki SQLCLR'nin app.Config dosyasına Windows'da olduğu gibi erişip erişemeyeceğini araştırıyordum (ne yazık ki öyle değil: Linux'ta SQL Server 2017, varsa uygulama yapılandırma dosyasını yoksayar veya bazen kilitlenirse) 't (SQLCLR) ) ve belirli koşullar altında SQL Server tamamen kilitlenir. Böyle olunca tek yol o yapmak oldu durdurmak için kill -9üzerine sqlservr. Tekrar hizmete başladığım zamanlardan biri, doğrudan / opt / mssql / bin / sqlservr'yi yürüterek yaptım veroot (yani sürecin kendisine ait olduğu gibi root) çalışırken .

Orada hemen bir hata veya çalışan kaynaklanan garip davranış idi sqlservrolarak root(yani olarak çalışan ANCAK VM yeniden ve SQL Server düzgün başlatmaya teşebbüs mssqlçok başında sıkışmış aldığımda yani kullanıcı).

/ Var / opt / mssql / log / errorlog dosyasının (ve SQL Server başlangıcında oluşturulan bazılarının) sahip olduğu sqlservrgibi çalışmasının doğrudan bir sonucu rootolduğunu (mantıklı) buldum .root

Ve sahip olunan dosyaların doğrudan bir sonucu root, işlem düzgün bir şekilde başlatıldığında (as mssql), mssqlkullanıcının dosyayı .1 ile bitecek şekilde yeniden adlandırma iznine sahip olmamasıdır (ve başka herhangi bir şeyle ne olması gerekiyorsa) varsayılan izleme gibi dosyalar). Ancak, bir izin hatası almak yerine, sonsuza kadar askıda kalıyor.

Birincil düzeltme sadece aşağıdaki gibi çalıştırmaktır root(Ben olarak çalıştırmayı denemedim mssql). Aşağıdaki komutların her ikisi için sudo, yalnızca şu anda işlem yapmadığı için, parolayı girmeniz istendikten sonra (veya belirttiğinizde başka bir kullanıcı olarak)root komutu çalıştırdığı için gereklidir . root-u usernameroot

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

İkincil düzeltme (bunun tekrarlanmadığından emin olmak için), SQL Server'ı düzgün bir şekilde başlatmaktır ;-):

sudo systemctl start mssql-server

1

İzinleri doğru almak ve akıllı hatalar almak için en azından aşağıdakilere ihtiyacınız var ...

# 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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.