یادداشت حقوقی: کاربر حق ترجمه و بازنشر این اثر را برای پروژه تأیید کرده است.PAGE-121
© Peter A. Carter 2019 — P. A. Carter, Pro SQL Server 2019 Administration — doi.org/10.1007/978-1-4842-5089-1_4
فصل 4 — نصب روی سیستمعاملهای ناهمگون
دو نسخه اصلی اخیر SQL Server تمرکز زیادی بر فراهمکردن امکان نصب SQL Server در انواع محیطهای غیرسنتی داشتهاند. در این فصل بررسی میکنیم چگونه SQL Server را روی Linux نصب کنیم و چگونه Imageها و Containerهای Docker را که شامل SQL Server هستند بسازیم و اجرا کنیم.
نکته: فرمانهایی که برای نصب و پیکربندی SQL Server روی Linux استفاده میشوند بین Distributionهای مختلف اندکی تفاوت دارند. این فصل روی Ubuntu تمرکز دارد، زیرا برای DBAهایی که سابقه کار با Windows دارند احتمالاً سادهتر و آشناتر است و هدف فصل نیز آشناکردن شما با مفاهیم و فرایند است. Microsoft برای هر Distribution راهنمای Quick Start جداگانه ارائه میکند.
نصب SQL Server روی Linux
جدول 4-1 Distributionها و Versionهای Linux را که SQL Server روی آنها پشتیبانی میشود نشان میدهد. Version اهمیت دارد؛ برای مثال در زمان نگارش، نسخه جاری Ubuntu برابر 19.4.1 است، در حالی که SQL Server روی نسخه 16.4 پشتیبانی میشود. در آزمونهای شخصی نویسنده، SQL Server روی Ubuntu 19.4.1 با موفقیت نصب شد، اما Serviceهای Pacemaker و PCS در آن زمان روی این Version قابل نصب نبودند؛ بنابراین پیکربندی AlwaysOn Availability Groups برای HA/DR روی آن نسخه Ubuntu امکانپذیر نبود.
PAGE-122
در بخشهای بعدی ابتدا نصب دستی SQL Server روی Linux و سپس ایجاد نصب Unattended را بررسی میکنیم.
نصب دستی SQL Server
برخلاف نصب SQL Server روی Windows که پیش از Installation مشخص میکنید Instance چگونه پیکربندی شود، در Linux روند برعکس است. ابتدا نسخه پایه SQL Server را نصب میکنید و سپس بعد از Deployment، Instance را پیکربندی میکنید. در این بخش فرایند نصب دستی SQL Server روی Linux را مرور میکنیم. برای این مثال از Ubuntu 16.4 استفاده میشود.
اولین گام Import کردن Public GPG Keyهاست تا به Repository مربوط به SQL Server دسترسی پیدا کنیم. این کار با فرمان Bash در Listing 4-1 انجام میشود.
Listing 4-1 — Import کردن Public GPG Key
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
اگر این فرمان را تجزیه کنیم، از wget برای دریافت Keyها از وبسایت Microsoft استفاده میشود. wget فرمانی برای دریافت محتوای Web است. سپس Operator برابر |، Key را به فرمان apt-key میفرستد که ابزاری برای مدیریت Keyهاست. فرمان add، Key را به فهرست Trusted Keyها اضافه میکند. وقتی Package مربوط به SQL Server با Trusted Key احراز اصالت شود، Package نیز Trusted خواهد شد. استفاده از sudo مشابه مفهوم Run As Administrator در Windows است و Permissionهای User را تا سطح root بالا میبرد؛ root معادل Administrator ویندوز است.
جدول 4-1 — Distributionها و Versionهای پشتیبانیشده Linux| Distribution | Version پشتیبانیشده |
|---|
| Red Hat Enterprise | 7.3–7.6 |
| SUSE Enterprise Server | V12 SP2 |
| Ubuntu | 16.4 |
PAGE-123
گام بعدی Register کردن Repository مربوط به SQL Server است. این کار با فرمان Bash در Listing 4-2 انجام میشود. فرمان از Script به نام add-apt-repository برای افزودن Repository خارجی استفاده میکند و فرمان wget درون آن، Package را از وبسایت Microsoft دریافت میکند.
Listing 4-2 — Register کردن SQL Server Repository
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/
ubuntu/16.04/mssql-server-2019.list)"
سپس از apt-get که Package Manager در Linux است استفاده میکنیم تا فهرست Packageها را از Repositoryها دریافت و با جدیدترین Versionها بهروزرسانی کند. Listing 4-3 این کار را نشان میدهد.
Listing 4-3 — بهروزرسانی فهرست Packageهای Repository
در Listing 4-4 دوباره از apt-get استفاده میکنیم، این بار همراه فرمان install، تا Package مربوط به SQL Server نصب شود. Switch برابر -y برای پذیرش خودکار Promptهای User به کار میرود.
Listing 4-4 — نصب Package مربوط به SQL Server
sudo apt-get install -y mssql-server
پس از کاملشدن نصب Package، خروجی از شما میخواهد فرمان sudo /opt/mssql/bin/mssql-conf setup را اجرا کنید. این ابزار Configuration مربوط به SQL Server است و امکان پیکربندی Instance را میدهد. با اجرای mssql-conf setup از شما خواسته میشود Edition موردنظر SQL Server را انتخاب کنید؛ همانطور که در Figure 4-1 نشان داده شده است. برای انتخاب از عددهای 1 تا 8 استفاده میشود.
PAGE-124
در مرحله بعد باید SQL Server License Terms را بپذیرید؛ مطابق Figure 4-2. برای پذیرش، Yes تایپ میشود.
Figure 4-1 — انتخاب Edition.
Figure 4-2 — پذیرش License Terms.
سپس مطابق Figure 4-3 باید Language را با استفاده از اعداد 1 تا 11 انتخاب کنید.
Figure 4-3 — انتخاب Language.
Figure 4-2 — شکل/تصویر منبع، صفحه PDF 124Figure 4-1 — شکل/تصویر منبع، صفحه PDF 124Figure 4-3 — شکل/تصویر منبع، صفحه PDF 124
PAGE-125
نکته: Languageهایی که در Figure 4-3 بهدرستی Render نشدهاند، زبانهای Multicharacter مانند Chinese هستند.
اکنون از شما خواسته میشود Password حساب sa را وارد و تأیید کنید؛ همانطور که Figure 4-4 نشان میدهد.
Figure 4-4 — افزودن Password برای sa.
در این مرحله Instance پیکربندی شده و میتوانید به آن متصل شوید؛ یا با sqlcmd که بهعنوان بخشی از Package مربوط به SQL Server Tools روی Linux Server نصب میشود و در بخش «Unattended Installation» همین فصل توضیح داده خواهد شد، یا بهصورت Remote با SSMS یا SQL Server Management Studio.
پیکربندی SQL Server
اگرچه SQL Server اکنون نصب شده و Basic Configuration انجام شده است، برای اینکه Instance کاملاً متناسب با نیازهای شما قابل استفاده باشد ممکن است لازم باشد Configurationهای دیگری هم در سطح Operating System و هم در سطح Instance انجام شود. در این بخش برخی نیازمندیهای رایج Configuration در محیط Linux بررسی میشوند.
ابزار اصلی Configuration برای SQL Server Instance، همان mssql-conf است که هنگام Installation برای انتخاب Edition و Language و تعیین Password حساب sa استفاده شد. این ابزار Parameterهای متعدد دیگری نیز دارد که در جدول 4-2 آمدهاند.
Figure 4-4 — بازنمایی از صفحه اصلی PDF 125
PAGE-126
جدول 4-2 — Parameterهای mssql-conf| Parameter | شرح |
| Agent | SQL Server Agent را Enable یا Disable میکند. |
| Collation | Collation مربوط به Instance را تعیین میکند. |
| Customer feedback | مشخص میکند Customer Feedback به Microsoft ارسال شود یا خیر. بهصورت پیشفرض فعال است و در Editionهای رایگان نمیتوان آن را غیرفعال کرد. |
| Database Mail profile | Database Mail Profile مورد استفاده برای E-mail Alertها را تعیین میکند. |
| Default data directory | Directory پیشفرض Fileهای User Database را تعیین میکند. |
| Default log directory | Directory پیشفرض Transaction Log Fileهای User Database را تعیین میکند. |
| Default Master database directory | Directory مربوط به Data و Log Fileهای Master Database را تعیین میکند. |
| Default Master database file name | نام Database Fileهای Master Database را تغییر میدهد. |
| Default dump directory | Directory مورد استفاده برای Memory Dump Fileها را تعیین میکند. |
| Default error log directory | Directory مربوط به SQL Server Error Log جدید، Default Profiler Trace، System Health Session XE و Hekaton Session XE را تعیین میکند. |
| Default backup directory | Directory مورد استفاده برای Backupهای جدید را تعیین میکند. |
| Dump type | نوع Memory Dump قابل Capture را مشخص میکند. علاوه بر Mini Dump امکان Full Dump نیز وجود دارد و میتوان نوع Dump را از میان mini، miniplus، filtered و full انتخاب کرد. |
| High availability | AlwaysOn Availability Groups را Enable یا Disable میکند. |
| Local Audit directory | Directory مورد استفاده برای Local Audit Fileها را تعیین میکند. |
| Locale | Locale مربوط به SQL Server Instance را تعیین میکند. |
| Memory limit | مقدار Physical Memory در دسترس SQL Server Instance را تعیین میکند. |
| TCP port | Portی را که SQL Server برای Connectionها روی آن Listen میکند تعیین میکند. |
| TLS | برای پیکربندی جنبههای مختلف Network در SQL Server Instance به کار میرود، از جمله forceencryption، tlscert، tlskey، tlsprotocols، tlsciphers و kerberoskeytabfile. |
| Traceflags | Global Trace Flagها را روی Instance تعیین میکند. |
PAGE-127
احتمالاً رایجترین نیاز Configuration، Start کردن SQL Server Agent است. این کار با Parameter برابر Agent و مطابق Listing 4-5 انجام میشود.
Listing 4-5 — Start کردن Server Agent
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
نمونه خوب دیگر از کاربرد این Tool، Parameter مربوط به TCP Port است. درست مانند محیط Windows، TCP 1433 بهصورت پیشفرض Port مربوط به SQL Server است. بااینحال دلایلی برای تغییر آن وجود دارد؛ مثلاً در محیطهای High Security، برای اجتناب از Well-known Port Number که میتواند هدف Attack قرار گیرد.
فرمان Listing 4-6، SQL Server Instance را طوری پیکربندی میکند که روی Port 50001 Listen کند. نویسنده معمولاً از Range برابر 50001-500xx استفاده میکند، چون Reserved نیست.
Listing 4-6 — پیکربندی Port
sudo /opt/mssql/bin/mssql-conf set network.tcpport 50001
برای اعمال Setting باید ابتدا SQL Server Service را Restart کنیم. این کار با systemctl انجام میشود که Tool مدیریت Serviceها در Linux است. Listing 4-7 SQL Server Service را Restart میکند.
Listing 4-7 — Restart کردن SQL Server Service
sudo systemctl restart mssql-server
ابزار systemctl همچنین برای بررسی Running بودن Service قابل استفاده است؛ مطابق Listing 4-8.
Listing 4-8 — بررسی Running بودن Service
sudo systemctl status mssql-server
حالا که SQL Server برای Listen کردن روی Port 50001 تنظیم شده است، Local Firewall نیز باید طوری پیکربندی شود که Traffic این Port را عبور دهد. Local Firewall با Toolی به نام ufw یا Uncomplicated Firewall مدیریت میشود. Script موجود در Listing 4-9 نشان میدهد چگونه ufw نصب شود، Default Ruleها تنظیم شوند، Traffic روی Port 50001 مجاز شود و سپس برای اعمال Ruleها Reload انجام شود. در پایان Script، Ruleهای پیکربندیشده نمایش داده میشوند.
PAGE-128
Listing 4-9 — کار با ufw
#Install ufw
sudo apt-get install ufw
#Start ufw
sudo systemctl start ufw
#Enable ufw
sudo systemctl enable ufw
#Set default Firewall Rules
sudo ufw default allow outgoing
sudo ufw default deny incoming
#Add A Rule For SQL
sudo ufw allow 50001/tcp
#Restart ufw
sudo ufw reload
#Show ufw Status
sudo ufw status
نکته: در SQL Server 2019، TempDB بهطور خودکار با یک Data File به ازای هر Core تا حداکثر هشت File پیکربندی میشود. در Versionهای قبل، Setup فقط یک Data File ایجاد میکرد.
نصب Unattended
چون Bash یک Scripting Language است، Installation مربوط به SQL Server را میتوان Script کرد؛ مشابه استفاده از PowerShell برای Script کردن Installation در Windows. برای این کار ابتدا یک Text File با Editor به نام vi میسازیم. فرمان Listing 4-10 Fileی به نام sqlconfig.sh را ایجاد و باز میکند. پسوند .sh معمولاً برای Bash Scriptها به کار میرود.
PAGE-129
Listing 4-10 — ایجاد Bash Script با Vi
بحث کامل درباره فرمانهای vi خارج از دامنه این کتاب است. برای Insert کردن Text از فرمان i استفاده کنید. پس از اتمام، برای بازگشت به Command Mode کلید ESC را بزنید. فرمان :q! بدون Save کردن از vi خارج میشود و :wq File را Save کرده و خارج میشود.
Script موجود در Listing 4-11 را میتوان در Bash Script قرار داد. نخستین Line مشخص میکند File قابل اجراست. همچنین در این نمونه Full-text Indexing برای Instance نصب میشود و هم یک Trace Flag و هم Maximum Memory Limit برای SQL Server پیکربندی میشوند.
شاید مهمترین نکته این باشد که Package دیگری با نام mssql-tools نیز نصب میشود. این Package شامل Command-line Toolهای SQL Server روی Linux از جمله sqlcmd است. در پایان Script از این Tool برای ایجاد User جدید و افزودن آن به Fixed Server Role برابر sysadmin استفاده میشود.
نکته: Microsoft در حال کار روی Command-line Interface جدید و Multiplatform برای SQL Server با نام mssql-cli است. این Tool روی Linux، Windows و Mac قابل استفاده است. در زمان نگارش در حالت Preview قرار داشت.
Listing 4-11 — Scripted SQL Server Installation
#! /bin/bash
MSSQL_SA_PASSWORD='Pa££w0rd'
MSSQL_PID='developer'
SQL_USER='SQLAdmin'
SQL_USER_PASSWORD='Pa££w0rd'
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/
ubuntu/16.04/mssql-server-2019.list)"
PAGE-130
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/
ubuntu/16.04/prod.list)"
sudo apt-get update -y
sudo apt-get install -y mssql-server
sudo ACCEPT_EULA=Y apt-get install -y mssql-tools unixodbc-dev
sudo MSSQL_SA_PASSWORD=$MSSQL_SA_PASSWORD MSSQL_PID=$MSSQL_PID /opt/mssql/bin/mssql-conf -n setup accept-eula
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true
sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 2048
sudo /opt/mssql/bin/mssql-conf traceflag 3226 on
sudo apt-get install -y mssql-server-fts
sudo systemctl restart mssql-server
/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P $MSSQL_SA_PASSWORD -Q "CREATE LOGIN [$SQL_USER] WITH PASSWORD=N'$SQL_INSTALL_PASSWORD';
ALTER SERVER ROLE [sysadmin] ADD MEMBER [$SQL_USER]"
فرمان Listing 4-12 Permission مربوط به Execute را روی Script میدهد.
Listing 4-12 — اعطای Execute Permission
Script با فرمان Listing 4-13 اجرا میشود.
Listing 4-13 — اجرای Installation