SQL Server sous Linux pour les NUL(L)S

Vous n'ignorez pas que Microsoft a sorti sa dernière version 2017 de SQL Server sous Linux ?

Vous faites peut-être partie des allergiques à la ligne de commande, heureusement pour vous SQL Server existe aussi sous Windows... Mais vous avez peut-être tout de même envie d'installer et de tester cette nouveauté : il va donc falloir se mettre (ou se remettre) à Linux.

Si vous faites partie de ceux qui débutent sous Linux ou qui ont tout oublié (c'est un peu mon cas), ce tutoriel d'installation Linux+SQL Server est fait pour vous !

Nous allons ici parcourir pas à pas les étapes d'installation de Linux (Ubuntu Server) et SQL Server 2017.

Télécharger Linux

Tout d'abord, il nous faut Linux !

Le téléchargement d'Ubuntu 16.04.3 LTS c'est ici : https://www.ubuntu.com/download/server

Eh oui, contrairement à Windows, c'est gratuit... Et on nous dit même merci !

Installer Linux

  • Choix de la langue d'installation : si vous aimez l'aventure, vous pouvez choisir Polski, Khmer, Uyghur ou Hrvatski. Restons simples : French.
  • Ecran d'accueil : "Installer Ubuntu Server"

  • Choix de la situation géographique, puis choix du clavier : vous pouvez laisser l'installateur identifier votre clavier, ou choisir directement dans la liste. French (alternative) est le bon choix pour un clavier français standard.
  • Après la configuration du réseau, vous devrez entrer le nom de machine (attention, 15 caractères maximum !), puis un nom d'utilisateur. Vous devrez ensuite entrer le login et le mot de passe de l'utilisateur. A part l'interface (très moche) en mode texte, on se croirait presque sous Windows 10...
  • Je vous passe toutes les boîtes de dialogue dans lesquelles il n'y a qu'à répondre à des questions simples : chiffrer le dossier personnel (pas utile), configurer l'horloge et le fuseau horaire...
  • Nous arrivons maintenant au partitionnement des disques. Pour ma part, j'ai choisi la méthode "Assisté - utiliser un disque entier".

  • L'installateur nous présente les disques qu'il a détecté. Comme j'ai bien fait les choses, il y a 4 disques (un disque système, un disque pour les datas, un disque pour les logs, un pour tempdb). J'en ai même ajouté un 5ème plus tard pour les backups... Il n'y a qu'à choisir le premier disque comme disque système : linux créera une partition n°1 sur laquelle il installera le système et une partition n°5 pour le swap.

  • Quelques questions subsidiaires : configuration d'un proxy internet, configuration des mises à jour : c'est un serveur, pas de mises à jour automatiques...
  • Pour la sélection des composants à installer, en plus des Standard System Utilities, sélectionner "Samba" et "OpenSSH", cela permettra de communiquer avec notre serveur.

  • Dernier point, installation du programme de démarrage, sur le disque système (premier disque).

  • L'installation va se terminer et on va pouvoir continuer...

Configurer Linux

Notre système a démarré et nous sommes positionnés sur l'invite : il n'y a plus qu'à indiquer notre login puis son mot de passe.

On peut noter un petit détail intéressant sur ce premier écran d'accueil : "Ubuntu comes with ABSOLUTELY NO WARRANTY". En bon utilisateur de produits Microsoft, nous changeons de monde : plus d'éditeur et vous êtes désormais à vos risques et périls... Mais bon, puisqu'on aime ça...

  • Vérifions d'abord la configuration réseau. Pour l'afficher la commande est : ifconfig
  • L'adressage IP a été configuré par défaut en DHCP : nous allons maintenant configurer une adresse fixe. Il faut pour cela éditer le fichier de configuration /etc/network/interfaces (eh non, pas d'interface graphique !). Pour modifier le fichier avec l'éditeur de texte, la commande est : sudo nano /etc/network/interfaces   
  • Profitons en pour détailler les commandes : sudo permet d'élever notre niveau de permissions à celui de super utilisateur. Un peu comme l'UAC sous Windows, ou l'exécution en tant qu'administrateur. L'éditeur de texte nano, bien qu'en mode texte, reste très simple d'emploi...

Dans le fichier /etc/network/interfaces, localisons notre interface et changeons sa configuration :

Remplacer dhcp par static
Ajouter address xxx.xxx.xxx.xxx (remplacer par l'adress fixe de l'ordinateur)
Ajouter mask xxx.xxx.xxx.xxx (remplacer par le masque de sous-réseau)
Ajouter gateway xxx.xxx.xxx.xxx (ici, la passerelle)
Ajouter dns-nameservers xxx.xxx.xxx.xxx (ici, le ou les serveurs dns)

Sauvegardez le fichier (control+O et quitter control+Q). Pour redémarrer l'interface réseau (ce qui va nous déconnecter au passage) on peut utiliser la commande sudo ip addr flush interface-name && sudo systemctl restart networking

Etape suivant : faisons tout d'abord un petit update de notre système d'exploitation, avec la commande sudo apt-get update && sudo apt-get dist-upgrade

Nous pouvons maintenant installer SQL Server 2017, c'est très simple :

  • Importer les clés GPG du référentiel public : curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
  • Enregistrer le référentiel : sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/mssql-server-2017.list)"
  • Installer SQL Server : sudo apt-get update  puis  sudo apt-get install -y mssql-server

Pour la configuration, lancer la commande sudo /opt/mssql/bin/mssql-conf setup et renseignez les options dans l'interface de configuration : choix de l'édition, langue, mot de passe du sa (entrez un mot de passe fort). Normalement, notre service sql server doit démarrer à l'issue de la configuration. Vérifions avec systemctl status mssql-server

SQL Server est maintenant installé et fonctionne. Il nous reste à installer le minimum d'outillage (en ligne de commande, bien sûr, mais on aime...). Quelques commandes à lancer successivement :

curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add –
sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list)"
sudo apt-get update
sudo apt-get install -y mssql-tools unixodbc-dev

A l'issue de l'installation, vous devriez arriver sur l'écran d'accord de licence (à valider pour mssqal-tools puis unixodbc).

Trois dernières commandes pour configurer la variable d'environnement PATH : ce sera plus simple pour lancer notre utilitaire sqlcmd sans préciser le chemin :

echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc

Je vous laisse avec la documentation Microsoft pour l'installation des autres composants : il est possible d'installer l'agent SQL Server, la recherche plain texte (full text) et Integration Services.

Petite configuration supplémentaire, ouvrir un partage pour copier nos backups de bases de données depuis windows. Vu que nous avions installé samba, il n'y a que la configuration à faire :

  • Créer d'abord un mot de passe pour notre utilisateur. En effet, samba dispose de sa propre base de mots de passe. Lancer la commande sudo smbpasswd -a <user_name> (user_name est le nom de notre utilisateur créé au départ de l'installation).
  • Créer un nouveau répertoire pour les backups : sudo mkdir /var/opt/mssql/backups
  • Modifier les permissions de ce répertoire (777 full access), ainsi que du répertoire parent (771 permission d'exécution pour pouvoir accéder au partage) : sudo chmod 777 /var/opt/mssql/backups  et  sudo chmod 771 /var/opt/mssql
  • Editer ensuite le fichier /etc/samba/smb.conf : sudo nano /etc/samba/smb.conf
  • Ajouter la section suivante en fin de fichier : 

[sqlbackups]
path = /var/opt/mssql/backups
valid users = <user_name>       #remplacez par le nom de votre utilisateur
read only = no

Sauvegardez vos modifications, puis redémarrez le service samba : sudo service smbd restart

Voilà ! Votre SQL Server 2017 est installé (vous pouvez y accéder avec SSMS sous Windows ou avec sqlcmd sous Windows ou Linux), et vous disposez d'un partage sqlbackup sur votre server linux pour y déposer vos sauvegardes.

Se connecter avec sqlcmd : sqlcmd -S nom_du_serveur -U sa -P mot_de_passe_sa

N'oubliez pas que dans sqlcmd, l'exécution d'un lot d'instruction est initié par la commande GO.

Exemple de commande de restoration : RESTORE DATABASE AdventureWorks2014 FROM DISK = '/var/opt/mssql/backups/adventureworks2014.bak' WITH MOVE 'AdventureWorks2014_Data' to '/var/opt/mssql/data/adventureworks2014.mdf', MOVE 'AdventureWorks2014_Log' to '/var/opt/mssql/data/AdventureWorks2014.ldf', RECOVERY

Bonne installation Linux...