Install Microsoft SQL Server 2019 on CentOS 7 / Fedora

Posted on 94 views

SQL Server runs on Linux starting with SQL Server 2017. This SQL Server is the same SQL Server database engine running on Microsoft Operating systems, with many similar features and services.

This guide will take you through the steps to install Microsoft SQL Server 2019 on CentOS 7 | Fedora 36/35/34/33/32 Linux system. As of this writing, SQL Server 2019 is available for Production use on Ubuntu / CentOS and RHEL Linux.

Step 1: Install Microsoft SQL Server 2019 on CentOS 7 / Fedora

Microsoft SQL Server 2019 is available for the general use. Add the repository to your CentOS 7 / Fedora by running the following commands on your terminal.

sudo curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/7/mssql-server-2019.repo

This will download  SQL Server 2019 repository to /etc/yum.repos.d/mssql-server.repo

Update your system cache:

### CentOS 7 ###
sudo yum makecache

### Fedora ###
sudo dnf makecache

Then install SQL server 2019 on CentOS 7:

sudo yum install -y mssql-server

For Fedora, you can use also use dnf command;

sudo dnf install -y mssql-server

To get info about the installed package, run:

$ rpm -qi mssql-server
Name        : mssql-server
Version     : 15.0.4223.1
Release     : 2
Architecture: x86_64
Install Date: Tue May 17 08:22:16 2022
Group       : Unspecified
Size        : 1297034956
License     : Commercial
Signature   : RSA/SHA256, Mon Apr 18 20:46:17 2022, Key ID eb3e94adbe1229cf
Source RPM  : mssql-server-15.0.4223.1-2.src.rpm
Build Date  : Mon Apr 18 20:05:17 2022
Build Host  : 17a94b24c000000.qzwxqe3wa2kubparrevzc0ivhc.xx.internal.cloudapp.net
...

Step 2: Initialize MS SQL Database Engine

After the package installation finishes, run mssql-conf setup and follow the prompts to set the SA password and choose your edition.

sudo /opt/mssql/bin/mssql-conf setup

1. Select an edition you’d like to use

Choose an edition of SQL Server:
  1) Evaluation (free, no production use rights, 180-day limit)
  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.

For me. I’ll go with 2 – Developer (free, no production use rights).

Details about editions can be found at
https://go.microsoft.com/fwlink/?LinkId=2109348

Use of PAID editions of this software requires separate licensing through a
Microsoft Volume Licensing program.
By choosing a PAID edition, you are verifying that you have the appropriate
number of licenses in place to install and run this software.

Enter your edition(1-8): 2

2. Accept the license terms

The license terms for this product can be found in
/usr/share/doc/mssql-server or downloaded from:
https://go.microsoft.com/fwlink/?LinkId=855862&clcid=0x409

The privacy statement can be viewed at:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x409

Do you accept the license terms? [Yes/No]: Yes

3. Set SQL Server system administrator password

Enter the SQL Server system administrator password: 
Confirm the SQL Server system administrator password: 
Configuring SQL Server...

ForceFlush is enabled for this instance.
ForceFlush feature is enabled for log durability.
Created symlink from /etc/systemd/system/multi-user.target.wants/mssql-server.service to /usr/lib/systemd/system/mssql-server.service.
Setup has completed successfully. SQL Server is now starting.

Step 3: Install SQL Server command-line tools

Then install mssql-tools with the unixODBC developer package. Add the repository containing required packages using the next command:

sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/7/prod.repo

With the repository added, we can proceed to install the tools

sudo yum -y install mssql-tools unixODBC-devel

Accept license terms as directed during installation:

The license terms for this product can be downloaded from
https://aka.ms/odbc17eula and found in
/usr/share/doc/msodbcsql17/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
YES
  Installing : msodbcsql17-17.9.1.1-1.x86_64                                                                                                                                                      2/4
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746949 and found in
/usr/share/doc/mssql-tools/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
YES

Step 4: Start and enable mssql-server  service

Start mssql-server  service

sudo systemctl start mssql-server

Enable it to start on system boot:

sudo systemctl enable mssql-server

Add /opt/mssql/bin/ to your $PATH variable:

echo 'export PATH=$PATH:/opt/mssql/bin:/opt/mssql-tools/bin' | sudo tee /etc/profile.d/mssql.sh

Source the file to start using MS SQL executable binaries in your current shell session:

source /etc/profile.d/mssql.sh

If you have an active Firewalld service, allow SQL Server ports for remote hosts to connect:

sudo  firewall-cmd --add-port=1433/tcp --permanent
sudo  firewall-cmd --reload

Step 4: Test SQL Server

Connect to the SQL Server and verify it is working.

$ sqlcmd -S localhost -U SA
Password: 

Authenticate with the password set in Step 2.

Show Database users:

1> select name from sysusers;
2> go
name
--------------------------------------------------------------------------------------------------------------------------------
##MS_AgentSigningCertificate##
##MS_PolicyEventProcessingLogin##
db_accessadmin
db_backupoperator
db_datareader
db_datawriter
db_ddladmin
db_denydatareader
db_denydatawriter
db_owner
db_securityadmin
dbo
guest
INFORMATION_SCHEMA
public
sys

(16 rows affected)

Create a test database:

# Create new
CREATE DATABASE mytestDB
SELECT Name from sys.Databases
GO
USE mytestDB
CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
GO
SELECT * FROM Inventory LIMIT 1;

Show databases on the SQL Server.

1> select name,database_id from sys.databases;
2> go

Drop a database:

1> drop database mytestDB;
2> go

For other Linux distros check out below guides:

coffee

Gravatar Image
A systems engineer with excellent skills in systems administration, cloud computing, systems deployment, virtualization, containers, and a certified ethical hacker.