SQL Server บน Linux แฮงค์เมื่อเริ่มต้นครั้งแรกไม่มีข้อผิดพลาดและไม่มีไฟล์ ErrorLog ใหม่ที่อัพเดต


11

ฉันใช้ SQL Server 2017, Release Candidate 2 (RC2) บน Linux (Ubuntu 16.04)

เมื่อเซิร์ฟเวอร์เริ่มต้นขึ้น SQL Server มักจะเริ่มต้นเช่นกัน แต่ด้วยเหตุผลบางอย่าง SQL Server จะไม่เริ่มทำงานอีกต่อไป อย่างน้อยฉันไม่สามารถเชื่อมต่อโดยใช้sqlcmd ฉันได้รับการหมดเวลา ODBC ( "Sqlcmd: ข้อผิดพลาด: Microsoft ODBC Driver 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ดำเนินการอยู่

นอกจากนี้ไฟล์errorlogใน/ var / opt / mssql / log /ไม่มีการประทับเวลาที่ตรงกันเมื่อฉันเริ่มต้น VM (หรือเริ่มบริการใหม่) และไม่มีรายการใหม่ในไฟล์นั้น

และใน/ var / log / ข้อความทั้งหมดที่ปรากฏคือ:

นี่เป็นรุ่นทดลองใช้ เหลืออีก [141] วันในช่วงการประเมินผล

ถ้าฉันวิ่งsystemctl status mssql-serverฉันก็จะได้สิ่งต่อไปนี้

● mssql-server.service - โปรแกรมฐานข้อมูลเซิร์ฟเวอร์ Microsoft SQL
โหลดแล้ว: โหลด (/lib/systemd/system/mssql-server.service เปิดใช้งานตั้งค่าผู้จำหน่ายล่วงหน้า: เปิดใช้งาน)
ล้มเหลว (ผลลัพธ์: รหัสทางออก) ตั้งแต่จันทร์ 2017- 09-04 20:01:56 BST; 36 วินาทีที่ผ่านมา
เอกสาร: 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 จะไม่สนใจไฟล์ config ของแอพหากมีอยู่หรือบางครั้งก็ล็อคไม่ได้ '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

เพื่อให้ได้ perms ที่ถูกต้องและได้รับข้อผิดพลาดอย่างชาญฉลาดคุณต้องมีอย่างน้อยดังต่อไปนี้ ...

# 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.