How to Install and Use MS SQL Server on Linux

In the year 2016, Microsoft surprised the IT world with the announcement of their plans to bring MS SQL Server to Linux.

Under Satya Nadella’s leadership, the Redmond giant has made significant progress towards taking advantage of the areas where Linux dominates the industry (such as the technologies that power the cloud). The move to make SQL Server available in Linux is yet another indicative of this approach.

Whatever the company’s motivations behind this initiative, Linux system administrators are likely to need to learn how to install, maintain, and use MS SQL Server – especially considering that the preview version packages are already available for Red Hat Enterprise Linux 7.3+ (includes CentOS 7.3+ as well) and Ubuntu Server 16.04 bits (sorry – no 32-bit version available!).

The only “fancy” system requirement of the preview version is that the system where it is installed must have at least 2 GB of RAM.

Installing MS SQL Server on Linux

In this quickstart article, we will explain how to install SQL Server 2019 preview on RHEL/CentOS 7.3+ releases and Ubuntu 16.04.

Installing MS SQL Server on RHEL/CentOS 7.3+

1. To install SQL Server on RHEL/CentOS 7.3+ releases, download the Microsoft SQL Server 2019 preview Red Hat repository configuration files, which will install the mssql-server package and mssql-tools using the following curl commands.

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

2. Then install the SQL Server and mssql-tools with the unixODBC developer package using yum package manager, as shown.

# yum install -y mssql-server mssql-tools unixODBC-devel

3. When the installation is complete, you will be reminded to run the configuration script (/opt/mssql/bin/mssql-conf) to accept the license terms, set the password for the SA user, and choose your edition.

# /opt/mssql/bin/mssql-conf setup

4. Once the configuration is done, verify that the SQL Server service is running.

# systemctl status mssql-server

5. Open port 1433/tcp on your firewall in order to allow external clients to communicate with the database server:

If you’re using firewalld:

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

Otherwise (using iptables):

# iptables -A INPUT -p tcp --dport 1433 -j ACCEPT
# iptables-save > /etc/sysconfig/iptables

Installing MS SQL Server on Ubuntu 16.04

1. In order for Ubuntu to trust the packages from the MS SQL Server repositories, import the GPG keys using the following wget command.

$ wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

2. Add the Microsoft SQL Server Ubuntu repository for SQL Server 2019 preview.

$ sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-preview.list)"
$ curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list

3. Resynchronize the package index files and update the core package and additional tools:

$ sudo apt-get update
$ sudo apt-get install mssql-server mssql-tools unixodbc-dev -y

4. Run the configuration script as in the previous case:

$ sudo /opt/mssql/bin/mssql-conf setup
SQL Server Setup on Linux

SQL Server Setup on Linux

5. Choose “Yes” when prompted to accept the license terms for MS SQL Tools:

Configuring MSSQL Tools on Linux

Configuring MSSQL Tools on Linux

Testing MS SQL Server on Linux

We will login to the server and create a database named Fabrics. The -P switch must be followed by the password you chose when you installed the package previously:

$ sqlcmd -S localhost -U SA -P 'YourPasswordHere'
CREATE DATABASE Fabrics
exit
Create MSSQL Database on Linux

Create MSSQL Database on Linux

If you’re using Linux, you can continue using the command-line as shown above. Otherwise, install SQL Server Management Studio Express if you’re on Windows.

Once done, enter the IP of the database server (192.168.0.200 in this case) and the login credentials (username=sa, password=YourPasswordHere):

Connect to MSSQL Server

Connect to MSSQL Server

Upon successful login, the Fabrics database should appear at the left-hand side:

Confirm MSSQL Database

Confirm MSSQL Database

Next, click New Query to open a new query window where you’ll insert the contents of the Fabrics script from Codeproject.com, then click Execute.

If successful, you will see the script created 5 tables and the number of records in each:

Create a Sample SQL Database

Create a Sample SQL Database

To wrap up, run the following query to retrieve the first 5 records from the Clients table:

USE Fabrics
SELECT TOP 5 FirstName, LastName,
DateOfBirth FROM Client
GO

The results should be identical to the output in the following image:

Run MSSQL Database Queries on Linux

Run MSSQL Database Queries on Linux

Congratulations! You have successfully installed and tested MS SQL Server on Linux!

Summary

In this article, we have explained how to install MS SQL Server on RHEL / CentOS and Ubuntu Server.

Due to the newfound closeness of Microsoft and Linux, Linux system administrators will need to be knowledgeable on MS SQL Server if they want to stay at the top of their game.

By mid-2017, the same SQL Server editions will be offered on Linux as today on Windows: Enterprise, Standard, Web, Express, and Developer. The last two are free but only the Express edition will be licensed for production use (but with resource limits).

As always, feel free to use the comment form below to drop us a note if you have any questions. We look forward to hearing from you!

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Gabriel Cánepa

Gabriel Cánepa is a GNU/Linux sysadmin and web developer from Villa Mercedes, San Luis, Argentina. He works for a worldwide leading consumer product company and takes great pleasure in using FOSS tools to increase productivity in all areas of his daily work.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide

You may also like...

43 Responses

  1. Travis Banger says:

    First of all, many thanks to Gabriel for providing this important resource. I have been unable to obtain any help in the Microsoft forums OR in the Linux forums. This situation is like the Capulets vs. the Montagues, or the Hatfields vs. the McCoys. :-)

    This has been quite an ordeal, not easy by any stretch. The installation was the only part that worked flawlessly. The server does not seem to be running and I cannot locate a proper version of the client (SSMS: SQL Server Management Studio Express).

  2. Guido Rolon says:

    Excellent article, very clear installation instructions..

  3. kalpesh says:

    i am not able to create table from SSMS 2016 it gives error about “the backend version is not supported to design database diagram or table” which is correct version of SSMS to use with Linux

  4. Ashvin says:

    Please don’t get me wrong. It’s pointless imho. It’s like using a Toyota engine in a Lamborghini, when the default engine is already available.

  5. Samir Kazi says:

    Does it support installation for multiple instances. I tried installing second instance but its showing me

    Loaded plugins: langpacks, ulninfo
    Package mssql-server-14.0.1.246-6.x86_64 already installed and latest version
    Package mssql-tools-14.0.1.246-1.x86_64 already installed and latest version
    Nothing to do.
    

    Is this a limitation of having one instance per Linux Server?

  6. Ramon F Herrera says:

    I have a comment and question. I have never used MS SQL Server (or client, nothing). However, I became enthusiastic with the possibility of running a Linux version.

    I downloaded “SQL Server Management Studio Express 2016” but it is too new! It filled my hard disk with too many packages. The SSMS version shown on the picture (2008 R2) seems perfect for me.

  7. Ramon F Herrera says:

    “I will not promote Microsoft product to Linux users”
    ================
    That is because you are not a professional. You MUST take into account the needs of the users, not YOURS.

  8. Ramon F Herrera says:

    Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : Login timeout expired.
    Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : TCP Provider: Error code 0x102.
    Sqlcmd: Error: Microsoft ODBC Driver 13 for SQL Server : A network-related or instance-specific error has occurred while e
    stablishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQ
    L Server is configured to allow remote connections. For more information see SQL Server Books Online..

    • Ramon F Herrera says:

      I would like to make an important comment about my post. I found the reason for the ODBC Driver errors, and they have nothing to do with Microsoft. I rented a CentOS 7 server with the main purpose of experimenting and learning SQL Server on Linux. It turns out that a lot of ports are blocked. BTW: This was a way to learn that every time the sqlcmd program runs, it attempts to “call home”.

      • Gabriel A. Canepa says:

        Ramon,
        CentOS 7 comes with firewalld installed and running out of the box. That is why I advised to open port 1433/tcp in that case. Thank you for your comments!

  9. Ramon F Herrera says:

    “1. Insert the following lines into /etc/yum.repos.d/sql-server.repo”
    ============================
    Gabriel: it is not clear whether the user should CREATE an inexistent file or MODIFY an existent one.

    • Gabriel A. Canepa says:

      What difference does it make? Either way, invoking a text editor with the filename as argument will bring up the file – regardless of whether it exists or not.

  10. Xiao Guoan says:

    I will not promote Microsoft product to Linux users

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.