ติดตั้ง Microsoft SQL Server 2017 บน Red Hat Linux แบบ Offline

ติดตั้ง Microsoft SQL Server 2017 บน Red Hat Linux แบบ Offline
ผู้เขียนได้เขียนเกี่ยวกับการติดตั้ง Microsoft SQL Server vNext หรือก็คือ Microsoft SQL Server 2017 ในปัจจุบันบน Linux แบบ Online เอาไว้ตั้งแต่เดือนมกราคมปี 2560 ผ่านไปปีกว่า
ซึ่ง สามารถหาอ่านการติดตั้งแบบ Online ลงบน Ubuntu Linux ได้จากบทความชื่อ “Microsoft SQL Server VNext ติดตั้งบน Linux ง่ายแสนง่าย”
https://www.9experttraining.com/articles/การติดตั้ง-microsoft-sql-server-vnext-บน-linux
ผู้เขียนเริ่มมีการติดตั้งเพื่อใช้งานจริงให้กับลูกค้าหลายราย และพบว่าลูกค้าบางรายมีความจำเป็นต้องติดตั้งแบบ offline เท่านั้นด้วยเหตุผลด้าน Security
ผู้เขียนจึงได้นำวิธีการติดตั้งแบบ offline ดังกล่าวมาเล่าสู่กันฟัง
โดยครั้งนี้ผู้เขียนเลือกที่จะติดตั้งลงบน Red Hat Enterprise Linux ซึ่งเป็น Commercial Linux Distribution เจ้าหลักที่ลูกค้าของผู้เขียนมักเลือกใช้
การเตรียม Packages สำหรับติดตั้ง
Microsoft ได้เตรียม Package Repositories สำหรับติดตั้งลงบน Linux Distros ต่างๆ เอาไว้
ผู้อ่านสามารถเข้าถึงได้โดยตรงผ่าน URL ต่อไปนี้
Distribution | URL |
---|---|
Red Hat Enterprise Linux | |
SUSE Enterprise Linux | |
Ubuntu | |
Debian | |
OpenSUSE |
- เลือกไปที่ URL ของ Red Hat Enterprise Linux จะพบโครงสร้าง Path ดังต่อไปนี้
- ผู้เขียนเลือกติดตั้ง Red Hat Enterprise Linux 7.4 จึงแนะนำให้ดาวน์โหลด Packages จาก Path ต่อไปนี้ มาเก็บไว้ ไฟล์ Packages ของ Red Hat จะมีนามสกุล .rpm
URL | หมายเหตุ |
---|---|
DB Engine, Agent Service, Full Text, SSIS | |
Client Tools | |
Client Tools (Updated) |
หมายเหตุ Packages ที่จำเป็นบางส่วนอยู่ในแผ่นติดตั้งของ Red Hat Enterprise Linux
การเตรียมแผ่นติดตั้ง และการติดตั้ง Linux
เนื่องจาก Red Hat Enterprise Linux เป็น Commercial Linux Distribution ไปแล้ว
การที่จะ Download ISO Image มาติดตั้งนั้นจำเป็นที่จะมี Red Hat account
ผู้อ่านสามารถลงทะเบียนได้ที่ https://www.redhat.com/wapps/ugc/register.html
เมื่อลงทะเบียนเสร็จแล้วให้ทำการร้องขอ Evaluation Subscription ถึงจะสามารถ Download ISO Image มาติดตั้งได้ Subscription มีอายุ 30 วัน
เมื่อได้ ISO Image มาแล้ว ให้นำไปติดตั้ง ผู้เขียนจะไม่ขอลงรายละเอียดทุกขั้นตอน แต่จะเลือกบางขั้นตอนที่จำเป็นมาเล่าสู่กันฟังดังนี้
- เมื่อมาถึงหน้า Installation Summary ให้เลือกไปที่ Software Selection เพื่อเลือกลง Packages ที่เกี่ยวข้อง
- เมื่อปรากฎหน้า Software Selection ให้เปลี่ยน Base Environment จาก Minimal Install ไปเป็น Infrastructure Server แทน
ทำให้ขณะติดตั้ง Packages ของ Microsoft SQL Server จะติดปัญหา Packages Dependencies หรือขาด Packages ที่ต้องมีอยู่ก่อนหน้า
- ตั้งค่า Disk และแบ่งพาร์ติชั่นตามความจำเป็น จากนั้นกดปุ่ม Begin Installation
- ในขณะติดตั้งจะมีกรอบโต้ตอบให้ตั้งรหัสผ่านสำหรับ root และเพิ่ม user
แต่ถึงแม้จะใช้สิทธิ์ของ root ในการติดตั้งก็จะไม่ส่งผลกระทบด้าน Security ซึ่งผู้เขียนได้อธิบายไว้ในลำดับต่อไป
- เมื่อติดตั้งสำเร็จ หลังจากบูตเสร็จ ทำการล๊อกอินเป็น root จากนั้นทำการตั้งค่า IP Addressให้กับ Red Hat
ip addr add 192.168.55.9/28 dev eth0
ผู้เขียนใช้ Ethernet Adapter Card เพียงใบเดียวจึงมี Device name เป็น eth0
แต่หากผู้อ่านใช้ Wifi สามารถหา Device name ได้จากคำสั่ง ifconfig และค่า IP Address ที่ปรากฎอยู่ในตัวอย่างคำสั่ง ใช้ในวงแลนของผู้เขียน
ผู้อ่านควรตั้งค่าให้เหมาะกับสภาพแวดล้อมของตน
- เมื่อตั้งค่า IP Address แล้ว ผู้เขียนทดสอบเชื่อมต่อผ่าน SSH Client (Putty) จากเครื่อง Microsoft Windows
ปกติแล้ว Red Hat Enterprise Linux จะติดตั้ง Firewall และเปิดใช้งานไว้แล้ว
แต่สำหรับ SSH Protocol นั้นมักจะมี Rule ที่อนุญาตเอาไว้แล้ว จึงไม่น่าประสบปัญหาการเชื่อมต่อ
ควรจะปรากฎ Console ของ Putty ดังแสดง
อัพโหลด Packages ติดตั้ง Microsoft SQL Server 2017 ไปยัง Red Hat Enterprise Linux
- เชื่อมต่อไปยัง Red Hat ด้วย Puttyโดย Login เป็น root
เพราะเมื่อติดตั้งเสร็จเจ้าของไฟล์และไดเร็กทอรี่ จะไม่ใช่ root
แต่จะมีการสร้าง user และ group ชื่อ mssql ขึ้นมาเป็นเจ้าของไฟล์และไดเร็กทอรี่แทนโดยอัตโนมัติ
ตรวจสอบให้แน่ใจว่าอยู่ใน home Directory ของ root ด้วยคำสั่ง pwd
pwd
home Directory ของ root คือ /root
ทำการสร้างไดเร็กทอรี่สำหรับอัพโหลด Packages ติดตั้ง ในที่นี้ให้ชื่อไดเร็กทอรี่ว่า sql-server
mkdir sql-server
ย้ายไปอยู่ในไดเร็กทอรี่ที่สร้างขึ้น
cd sql-server
ตรวจสอบให้แน่ใจว่าอยู่ในไดเร็กทอรี่ที่สร้างขึ้นแล้ว ด้วยคำสั่ง pwd
pwd
ควรจะแสดงตำแหน่งเป็น /root/sql-server
- ติดตั้งและเรียกใช้ SFTP Client (WinSCP) เชื่อมต่อไปยัง Red Hat และตรวจสอบให้แน่ใจว่าได้เลือกไดเร็กทอรี่ /root/sql-server ที่สร้างขึ้นเป็นไดเร็กทอรี่ปลายทาง
- อัพโหลด Packages ในส่วนของ DB Engine, Agent Service, Full Text และ SSIS ที่ดาวน์โหลดไว้ ไปยังไดเร็กทอรี่ /root/sql-server
การติดตั้ง Microsoft SQL Server 2017
การติดตั้ง Packages แบบ Offline สามารถทำผ่านคำสั่ง yum หรือ rpm ก็ได้
สำหรับบทความนี้ ผู้เขียนได้แสดงไว้ทั้งสองคำสั่ง ผู้อ่านสามารถเลือกใช้ได้ตามอัธยาศัย
- ตรวจสอบให้แน่ใจว่าอยู่ในไดเร็กทอรี่ที่สร้างขึ้นแล้ว ด้วยคำสั่ง pwd
- ติดตั้ง Package ของ Database Engine ด้วยคำสั่ง yum
- ติดตั้ง Package ของ SQL Server Agent
ผู้เขียนเลือกติดตั้งเวอร์ชั่น 14.0.3023.8 (CU5) ซึ่งมี SQL Server Agent มาพร้อมกับ Database Engine เลยจึงไม่ต้องติดตั้งเพิ่ม
รายละเอียดของ Release สามารถติดตามได้จาก https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes
- ติดตั้ง Package ของ SQL Server Full-Text Search (ถ้าจำเป็นต้องใช้) ด้วยคำสั่ง yum
หรือเลือกใช้คำสั่ง rpm แทน
rpm -ivh mssql-server-fts-14.0.3023.8-5.x86_64.rpm
- ติดตั้ง Package ของ SQL Server Integration Service (ถ้าจำเป็นต้องใช้) ด้วยคำสั่ง yum
การตั้งค่า Microsoft SQL Server 2017
หากเรียกใช้ Shell Script ชื่อ mssql-conf สามารถกำหนดพารามิเตอร์เป็น setup จะเป็นการตั้งค่าสำหรับเริ่มต้นใช้งาน
โดยต้อง
- เลือก Edition ของ Microsoft SQL Server 2017
- ตั้งรหัสผ่านสำหรับ Login แบบ SQL Authentication
เมื่อตั้งค่าสำเร็จ สคริปท์ก็จะทำการ Start Daemon (Service) ของ Database Engine ทันทีดังรูป
ขั้นตอนการตั้งค่ามีดังนี้
- ย้ายไปอยู่ในไดเร็กทอรี่ /opt/mssql/bin
ตรวจสอบให้แน่ใจว่าอยู่ในไดเร็กทอรี่ /opt/mssql/bin ด้วยคำสั่ง pwd
pwd
ควรจะแสดงตำแหน่งเป็น /opt/mssql/bin
- เรียกใช้ Shell Script ชื่อ mssql-conf โดยกำหนดพารามิเตอร์เป็น setup
จะปรากฏตัวเลือกดังต่อไปนี้
2) Developer (free, no production use rights)
3) Express (free)
4) Web (PAID)
5) Standard (PAID)
6) Enterprise (PAID)
7) Enterprise Core (PAID)
8) I bought a license through a retail sales channel and have a product key to enter.
หากเป็นการติดตั้งเพื่อใช้งานจริงให้เลือกตาม License ที่ได้ซื้อไว้
- จะปรากฏลิงค์ให้ตามไปอ่านเกี่ยวกับข้อตกลงและนโยบายความเป็นส่วนตัว จากนั้นจะมีคำถามความยินยอมตามข้อตกลงให้ พิมพ์ Yes เป็นการยืนยัน
- ตั้งรหัสผ่านสำหรับ sa ซึ่งเป็น Login แบบ SQL Authentication ที่ถือครองบทบาท Sysadmin ในระดับ Instance
แม้จะติดตั้งผ่าน root แต่เจ้าของไฟล์ และไดเร็กทอรี่ของ Database Engine จะเป็น Linux User และ Group ชื่อ mssql ซึ่งถูกสร้างขึ้นมาใหม่ขณะติดตั้ง
ส่วนเจ้าของไฟล์ และไดเร็กทอรี่ของ SQL Server Integration Service จะใช้ Linux User และ Group ชื่อ SSIS ดังแสดง
- ผู้เขียนได้บอกเอาไว้ตอนต้นว่า Database Engine เวอร์ชั่น 14.0.3023.8 (CU5) ได้รวมเอา SQL Server Agent เอาไว้ด้วย เพียงแต่ต้องทำการ Start Daemon (Service) ขึ้นมา
จากนั้นทำการ Restart Daemon (Service) ของ Database Engine อีกครั้ง
systemctl restart mssql-server.service
- Microsoft SQL Server จะใช้ TCP Port หมายเลข 1433 เป็นค่าตั้งต้นสำหรับ Default Instance
พบว่า Port 1433 นั้น Listening อยู่ทั้ง IPv6 และ IPv4
แต่จากที่พูดไว้ตอนต้นว่า Red Hat Enterprise Linux มีการติดตั้งและเปิดใช้ Firewall พร้อมใช้งานเลย
ผู้เขียนจึงตรวจสอบว่ามี Rule ที่อนุญาตให้เข้าถึง Port 1433/TCP แล้วหรือไม่ ผ่านคำสั่ง firewall-cmd
โดยกำหนดพารามิเตอร์ --list-ports เพื่อแสดงเลขพอร์ตที่อนุญาต
จึงต้องเพิ่ม Rule ด้วยคำสั่งต่อไปนี้
firewall-cmd --zone=public --add-port=1433/tcp --permanent
จากนั้นทำการ Reload
firewall-cmd --reload
การเชื่อมต่อไปยัง SQL Server บน Linux ด้วย SQL Server Management Studio (SSMS)
- หากยังไม่มี SSMS ติดตั้งอยู่บน Microsoft Windows (วงแลนเดียวกันกับ SQL Server บน Linux หรือสามารถ Route ถึงกันได้)
- เมื่อติดตั้งเรียบร้อยแล้วให้ทดลองเชื่อมต่อไปยัง Database Engine โดยใช้ล๊อคอิน sa และรหัสผ่านที่กำหนดไว้ตอนตั้งค่า
หากเชื่อมต่อสำเร็จก็จะพบทั้ง Data Engine และ SQL Server Agent พร้อมให้บริการ ดังแสดง
แต่ปัญหา Packages Dependencies ก็ไม่ค่อยปรากฏให้เห็นมากเหมือนกับ Release แรก ๆ ทำให้คนที่ไม่ค่อยถนัด
Unix/Linux สามารถติดตั้งได้ไม่ยากเย็นนัก
แต่ถึงอย่างนั้นผู้อ่านก็ควรมีความรู้ และเข้าใจสภาพแวดล้อมของ Linux ไว้บ้าง เพราะการจัดการบางอย่าง ก็ต้องจัดการสไตล์ Linux
การตั้งค่าเพิ่มเติมหลังติดตั้ง
หากเป็น Microsoft SQL Server ที่ติดตั้งอยู่บน Microsoft Windows ก็ไม่ได้ยุ่งยากอะไร เพียงเชื่อมต่อไปยัง SQL Server ผ่าน SSMS
จากนั้นเปิด Server Properties ขึ้นมา เลือกไปที่เพจ Database Settings
ก็สามารถย้ายโฟลเดอร์ตั้งต้นของ Data File, Transaction Log File หรือแม้กระทั้ง Backup Files
โดยการ Browse ไปยังโฟลเดอร์ใหม่ที่เตรียมไว้ได้เลย
หากเชื่อมต่อไปยัง SQL Server บน Linux ผ่าน SSMS เมื่อเปิด Server Properties แล้ว
เลือกที่เพจ Database Settings
สังเกตว่าในส่วนของ Database Default Locations ไม่สามารถแก้ไขได้ ต่างจาก SQL Server บน Windows
หากต้องการแก้ไขจะต้องเรียกใช้ Shell Script ชื่อ mssql-conf โดยกำหนดพารามิเตอร์เป็น set
สำหรับโครงสร้าง File System บน Linux นั้นจะเป็น Single root คือ / (ต่างจาก File System ของ Windows ที่เป็น Multiple Root คือ C: D: E: …)
ดังนั้น Disk Volume จะถูกแม็บเป็นไดเร็คทอรี่เรียกว่า Mount Point
ในบทความนี้ผู้เขียนสมมติว่าได้สร้าง Mount Point ดังนี้
(รายละเอียดการสร้าง Mount Point สามารถค้นหาได้จาก Search Engines ทั่วไป)
- /opt/data/datafiles เพื่อแม็บไปยังชุดดิสก์ที่ออกแบบไว้รองรับ Data Files
- /opt/data/logfiles เพื่อแม็บไปยังชุดดิสก์ที่ออกแบบไว้รองรับ Log Files
- /opt/data/tempdb เพื่อแม็บไปยังชุดดิสก์ที่ออกแบบไว้รองรับ Data Files และ Log File ของฐานข้อมูล tempdb
- กำหนดสิทธิ์บนไดเร็กทอรี่ภายใต้ /opt/data ให้กับ Linux User และ Group ชื่อ mssql
chown mssql:mssql /opt/data/logfiles/
chown mssql:mssql /opt/data/tempdb/
- ย้ายไดเร็กทอรี่ตั้งต้นของ Data File และ Transaction Log File ด้วย Shell Script ชื่อ mssql-conf
cd /opt/mssql/bin/
ตรวจสอบให้แน่ใจว่าอยู่ในไดเร็กทอรี่ /opt/mssql/bin ด้วยคำสั่ง pwd
pwd
ควรจะแสดงตำแหน่งเป็น /opt/mssql/bin
เรียกใช้ Shell Script ชื่อ mssql-conf โดยกำหนดพารามิเตอร์เป็น set
กรณีย้ายไดเร็กทอรี่ตั้งต้นของ Data Files ให้ตามด้วย filelocation.defaultdatadir <ไดเร็กทอรี่ ใหม่>
./mssql-conf set filelocation.defaultdatadir /opt/data/datafiles/
กรณีย้ายไดเร็กทอรี่ตั้งต้นของ Log Files ให้ตามด้วย filelocation.defaultlogdir <ไดเร็กทอรี่ ใหม่>
./mssql-conf set filelocation.defaultlogdir /opt/data/logfiles/
จากนั้นให้ทำการ Restart Daemon (Service) อีกครั้ง
systemctl restart mssql-server
เราสามารถใช้ SSMS เชื่อมต่อไปยัง SQL Server บน Linux และเมื่อเปิด Server Properties แล้ว เลือกที่เพจ Database Settings
จะพบว่าตำแหน่งไดเร็คทอรี่ได้เปลี่ยนไปจากเดิมแล้ว ดังแสดง
ผู้อ่านสามารถศึกษา Shell Script ชื่อ mssql-conf ว่าสามารถส่งพารามิเตอร์อะไรได้อีก
จากลิงก์ https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-configure-mssql-conf
- ผู้เขียนจะขอพูดถึงการย้ายไฟล์ของฐานข้อมูล tempdb ไปยังไดเร็คทอรี่ (Mount ไปยัง Disk ที่มีประสิทธิภาพสูง
เพียงแค่ใช้คำสั่ง ALTER DATABASE เพื่อย้ายไปยังตำแหน่งที่เหมาะสม แล้ว Restart Service เพียงแค่นั้น
ใช้ SSMS เชื่อมต่อไปยัง SQL Server บน Linux แล้วรันสคริปท์ T-SQL ต่อไปนี้
USE Master;
GO
ALTER DATABASE tempdb
MODIFY FILE
(
NAME=tempdev
, FILENAME='/opt/data/tempdb/tempdb.mdf'
);
GO
ALTER DATABASE tempdb
MODIFY FILE
(
NAME=templog
, FILENAME='/opt/data/tempdb/templog.ldf'
);
GO
ทำการ Restart Daemon (Service) ผ่านทาง Putty
systemctl restart mssql-server
เราสามารถใช้ SSMS เชื่อมต่อไปยัง SQL Server บน Linux อีกครั้ง แล้วเปิด Database Properties ของฐานข้อมูล tempdb
หลังจากนั้นเลือกที่เพจ Files จะพบว่าตำแหน่งไดเร็คทอรี่ได้เปลี่ยนไปจากเดิมแล้ว ดังแสดง
สรุปผลการทดสอบ
หากเป็นไปได้ผู้เขียนยังคงแนะนำให้ติดตั้งแบบ Online เพราะจะไร้ปัญหาเรื่องของ Packages Dependencies
เพราะหากขาด Packages ใดไปโปรแกรมติดตั้งก็จะไปตามหา Packages ที่ขาดมาติดตั้งให้ หรือหากมี Packages ใด Conflict กันก็จะ Resolve ให้โดยอัตโนมัติ
แต่การลงแบบ Offline ในปัจจุบันก็ไม่ถือว่ามีอุปสรรคอะไรมากมายนัก จากที่ได้แสดงให้เห็นในบทความ ก็แทบจะเรียกได้ว่าราบรื่นตั้งแต่ต้นจนจบ
เพียงแต่ผู้อ่านควรมีทักษะการใช้ Command Line Interface อยู่บ้างก็เพียงพอแล้ว
แต่ไม่ว่าจะเป็นการลงแบบ Online หรือ Offline ก็ตามจะต้องมีงานตั้งค่าเพิ่มเติมผ่าน Shell Script ชื่อ mssql-conf ตามมาอยู่ดี
ผู้เขียนแนะนำให้ทำความเข้าใจพารามิเตอร์ต่าง ๆ ของ Shell Script นี้ผ่านไม่ผ่านมือเอาไว้บ้างจะเป็นการดี
- วิทยากรผู้ดูแลและออกแบบหลักสูตร
- กลุ่มวิชา SQL Server/Window Server
- Microsoft SQL Server Specialist
- Microsoft Certified Trainer (2002-Present)
- Co-Founder at Data Meccanica Co., Ltd.