Red Hat 8, Alma Linux 8 : Installer et utiliser SQL Server
Table des matières
Dans cet article, nous allons voir comment installer Microsoft SQL Server 2019 Express sur CentOS 8.
Testé, cela fonctionne très bien et permet d'économiser des licences Windows Server, Anrtivirus et le système est plus stable avec CentOS qu'avec Windows Server.
Il existe d'autres éditions que Express, toutes les infos sur les licences sont ici : https://www.microsoft.com/fr-fr/sql-server/sql-server-2019-pricing
A noter que le dépôts PowerTools et EPEL ne sont pas nécessaires.
Dans un premier temps, on va ajouter les dépôts de Microsoft sur notre CentOS 8 :
On installe ensuite le moteur de base de données, les outils et le connecteur ODBC :
Après acceptation de la clé GPG de Microsoft, au moment de l'install, il faut valider à deux reprises les termes de la licence sur les paquets msodbcsql17 et mssql-server en saisissant YES :
Et voilà, c'est installé, maintenant il faut configurer.
Si sudo n'est pas installé, il faut l'installer (si vous avez installé comme moi une CentOS très très minimale) :
Pour lancer l'assistant de configuration, on va lancer la commande suivante :
Nous sommes invités à sélectionner une édition de SQL Server :
On choisi 3 ici pour la version Express
On doit encore valider les termes de la licence :
On choisi la langue de SQL Server (4 pour le Français) :
On est invité à saisir le mot de passe du compte admin (sa) :
La configuration se poursuit.
La gestion du service se fait avec systemd :
On vérifie que c'est démarré et bien activé au reboot.
Les commandes se situent dans /opt/mssql-tools/bin. On va donc ajouter ce chemin dans notre variable $PATH :
Et on charge la modif :
On n'oublie pas d'ouvrir le port 1433 si des applications externes doivent se connecter à notre serveur MS SQL :
On va utiliser l'outil sqlcmd :
On va lister les bases de données pour vérifier que tout fonctionne bien (avec MS SQL, GO permet d'exécuter les requêtes) :
On peut aussi afficher les utilisateurs :
Je ne rentrerai pas dans la syntaxe de création de tables, ou de requetes CRUD.
Je vous mets juste ici des requêtes pour créer une base "linuxtricks" , une table et y insérer des infos :
Pour se connecter depuis un client Windows, on téléchargera SSMS : https://docs.microsoft.com/fr-fr/sql/ssms/download-sql-server-management-studio-ssms
Ensuite on se connecte à la base :
Et on peut utiliser les requêtes SQL propre à MS SQL :
Pour sauvegarder une base de données avec sqlcmd (ici base nommée linuxtricks) :
Exemple de sortie :
Pour restaurer la base :
Exemple de sortie :
Pour automatiser le processus dans un script, on pourra utiliser l'option -P suivi du mot de passe :
Sur le serveur CentOS, on va installer PHP et causer avec notre base MS SQL.
Je n’aborderai pas tous les connecteurs MS SQL, c'est juste pour vérifier que ça fonctionne. Laissons le développement aux développeurs.
J'utilise la même base que celle créée précédemment dans l'exemple (linuxtricks).
L'exemple de page PHP est adaptée de https://www.php.net/manual/fr/function.sqlsrv-fetch-array.php avec la table créée précédemment.
Il sera nécessaire de désactiver SELinux (ou le passer en permissive). Je n'utilise pas cela professionnellement parlant, donc je n'ai pas approfondi le sujet.
En plus du serveur Apache + PHP installé (voir https://www.linuxtricks.fr/wiki/centos-installer-et-configurer-un-serveur-lamp-7-et-8 ) installer des outils supplémentaires pour compiler le module :
Grâce à PECL, on va compiler les modules concernés :
Et on créé les fichiers de config pour indiquer à PHP de les utiliser :
On redémarre php-fpm et httpd pour que PHP prenne en compte les modules :
On créé une page de test :
Introduction
Dans cet article, nous allons voir comment installer Microsoft SQL Server 2019 Express sur CentOS 8.
Testé, cela fonctionne très bien et permet d'économiser des licences Windows Server, Anrtivirus et le système est plus stable avec CentOS qu'avec Windows Server.
Il existe d'autres éditions que Express, toutes les infos sur les licences sont ici : https://www.microsoft.com/fr-fr/sql-server/sql-server-2019-pricing
A noter que le dépôts PowerTools et EPEL ne sont pas nécessaires.
Installation de SQL Server 2019
Dans un premier temps, on va ajouter les dépôts de Microsoft sur notre CentOS 8 :
Code BASH :
curl https://packages.microsoft.com/config/rhel/8/mssql-server-2019.repo -o /etc/yum.repos.d/mssql-server-2019.repo curl https://packages.microsoft.com/config/rhel/8/prod.repo -o /etc/yum.repos.d/msprod.repo
On installe ensuite le moteur de base de données, les outils et le connecteur ODBC :
Code BASH :
dnf install mssql-server mssql-tools unixODBC-devel
Après acceptation de la clé GPG de Microsoft, au moment de l'install, il faut valider à deux reprises les termes de la licence sur les paquets msodbcsql17 et mssql-server en saisissant YES :
Code TEXT :
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)
Et voilà, c'est installé, maintenant il faut configurer.
Si sudo n'est pas installé, il faut l'installer (si vous avez installé comme moi une CentOS très très minimale) :
Code BASH :
dnf install sudo
Configurer MSSQL Server et le système
Configurer MSSQL Server
Pour lancer l'assistant de configuration, on va lancer la commande suivante :
Code BASH :
/opt/mssql/bin/mssql-conf setup
Nous sommes invités à sélectionner une édition de SQL Server :
Code TEXT :
Choisissez une édition de SQL Server : 1) Evaluation (gratuit, aucun droit d'utilisation en production, 180 jours) 2) Developer (gratuit, aucun droit d'utilisation en production) 3) Express (gratuit) 4) Web (PAYANT) 5) Standard (PAYANT) 6) Enterprise (PAYANT) - Utilisation du cœur de processeur limitée à 20 cœurs physiques/40 cœurs hyperthread 7) Enterprise Core (PAYANT) - Utilisation du cœur de processeur jusqu'au maximum du système d'exploitation 8) J'ai acheté une licence chez un détaillant et je dois entrer une clé de produit. Vous trouverez des détails sur les éditions sur https://go.microsoft.com/fwlink/?LinkId=2109348&clcid=0x40c L'utilisation d'éditions PAYANTES de ce logiciel nécessite l'achat d'une licence distincte dans un programme de licence en volume Microsoft. Si vous choisissez une édition PAYANTE, vérifiez que vous avez le nombre approprié de licences en place pour installer et exécuter ce logiciel. Entrer votre édition(1-8):
On choisi 3 ici pour la version Express
On doit encore valider les termes de la licence :
Code TEXT :
Vous trouverez les termes du contrat de licence de ce produit dans /usr/share/doc/mssql-server ou vous pouvez les télécharger à partir de : https://go.microsoft.com/fwlink/?LinkId=2104294&clcid=0x40c Vous pouvez consulter la déclaration de confidentialité à l'adresse : https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x40c Acceptez-vous les termes du contrat de licence ? [Yes/No]: Yes
On choisi la langue de SQL Server (4 pour le Français) :
Code :
Choisissez la langue de SQL Server :
(1) English
(2) Deutsch
(3) Español
(4) Français
(5) Italiano
(6) 日本語
(7) 한국어
(8) Português
(9) Русский
(10) 中文 – 简体
(11) 中文 (繁体)
Entrez l'option 1-11 :
On est invité à saisir le mot de passe du compte admin (sa) :
Code TEXT :
Entrez le mot de passe de l'administrateur système de SQL Server : Confirmez le mot de passe de l'administrateur système de SQL Server :
La configuration se poursuit.
La gestion du service se fait avec systemd :
Code BASH :
systemctl status mssql-server
On vérifie que c'est démarré et bien activé au reboot.
Ajouter les commandes MSSQL dans le PATH
Les commandes se situent dans /opt/mssql-tools/bin. On va donc ajouter ce chemin dans notre variable $PATH :
Code BASH :
echo 'export PATH=$PATH:/opt/mssql-tools/bin' > /etc/profile.d/mssql.sh
Et on charge la modif :
Code BASH :
source /etc/profile.d/mssql.sh
Ouvrir le pare-feu
On n'oublie pas d'ouvrir le port 1433 si des applications externes doivent se connecter à notre serveur MS SQL :
Code BASH :
firewall-cmd --add-port=1433/tcp --permanent firewall-cmd --reload
Utiliser MSSQL Server
Se connecter depuis Linux
On va utiliser l'outil sqlcmd :
Code BASH :
sqlcmd -S localhost -U sa
On va lister les bases de données pour vérifier que tout fonctionne bien (avec MS SQL, GO permet d'exécuter les requêtes) :
Code SQL :
SELECT name, database_id, create_date FROM sys.DATABASES; GO
Code TEXT :
name database_id create_date ------------- ----------- ----------------------- master 1 2003-04-08 09:13:36.390 tempdb 2 2020-07-23 17:34:13.040 model 3 2003-04-08 09:13:36.390 msdb 4 2020-06-10 19:01:05.513 (4 rows affected)
On peut aussi afficher les utilisateurs :
Code SQL :
SELECT name FROM sysusers; GO
Code TEXT :
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)
Quelques commandes SQL pour créer une base, table et jeu de test
Je ne rentrerai pas dans la syntaxe de création de tables, ou de requetes CRUD.
Je vous mets juste ici des requêtes pour créer une base "linuxtricks" , une table et y insérer des infos :
Code SQL :
USE [master] GO CREATE DATABASE [linuxtricks] GO USE [linuxtricks] GO CREATE TABLE messages ( ID INT NOT NULL PRIMARY KEY, texte VARCHAR(100) NOT NULL, dte DATETIME NOT NULL DEFAULT getdate() ); GO INSERT INTO messages (ID, texte) VALUES (1, 'Bonjour message 1'); INSERT INTO messages (ID, texte) VALUES (2, 'Comment ça va message 2'); INSERT INTO messages (ID, texte) VALUES (3, 'Ceci est un message 3'); INSERT INTO messages (ID, texte) VALUES (4, 'Et là un quatrième message'); INSERT INTO messages (ID, texte) VALUES (5, 'Au revoir 5'); GO SELECT * FROM messages; GO
Se connecter depuis un client Windows
Pour se connecter depuis un client Windows, on téléchargera SSMS : https://docs.microsoft.com/fr-fr/sql/ssms/download-sql-server-management-studio-ssms
Ensuite on se connecte à la base :
Et on peut utiliser les requêtes SQL propre à MS SQL :
Sauvegarder et restaurer des bases
Pour sauvegarder une base de données avec sqlcmd (ici base nommée linuxtricks) :
Code BASH :
sqlcmd -S localhost -U SA -Q "BACKUP DATABASE [linuxtricks] TO DISK = N'/var/opt/mssql/data/linuxtricks.bak' WITH NOFORMAT, NOINIT, NAME = 'linuxtricks-full', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
Exemple de sortie :
Code TEXT :
11 pour cent traités. 22 pour cent traités. 30 pour cent traités. 41 pour cent traités. 50 pour cent traités. 61 pour cent traités. 70 pour cent traités. 81 pour cent traités. 90 pour cent traités. 100 pour cent traités. 376 pages traitées pour la base de données 'linuxtricks', fichier 'linuxtricks' dans le fichier 1. 2 pages traitées pour la base de données 'linuxtricks', fichier 'linuxtricks_log' dans le fichier 1. BACKUP DATABASE a traité avec succès 378 pages en 0.044 secondes (67.027 Mo/s).
Pour restaurer la base :
Code BASH :
sqlcmd -S localhost -U SA -Q "RESTORE DATABASE [linuxtricks] FROM DISK = N'/var/opt/mssql/data/linuxtricks.bak' WITH FILE = 1, NOUNLOAD, REPLACE, NORECOVERY, STATS = 10"
Exemple de sortie :
Code TEXT :
11 pour cent traités. 22 pour cent traités. 30 pour cent traités. 41 pour cent traités. 50 pour cent traités. 61 pour cent traités. 70 pour cent traités. 81 pour cent traités. 90 pour cent traités. 100 pour cent traités. 376 pages traitées pour la base de données 'linuxtricks', fichier 'linuxtricks' dans le fichier 1. 2 pages traitées pour la base de données 'linuxtricks', fichier 'linuxtricks_log' dans le fichier 1. RESTORE DATABASE a traité avec succès 378 pages en 0.018 secondes (163.845 Mo/s).
Pour automatiser le processus dans un script, on pourra utiliser l'option -P suivi du mot de passe :
Code BASH :
sqlcmd -S localhost -U sa -P sasupermotdepasse
Juste pour le fun, utiliser SQL Server avec PHP
Sur le serveur CentOS, on va installer PHP et causer avec notre base MS SQL.
Je n’aborderai pas tous les connecteurs MS SQL, c'est juste pour vérifier que ça fonctionne. Laissons le développement aux développeurs.
J'utilise la même base que celle créée précédemment dans l'exemple (linuxtricks).
L'exemple de page PHP est adaptée de https://www.php.net/manual/fr/function.sqlsrv-fetch-array.php avec la table créée précédemment.
Il sera nécessaire de désactiver SELinux (ou le passer en permissive). Je n'utilise pas cela professionnellement parlant, donc je n'ai pas approfondi le sujet.
En plus du serveur Apache + PHP installé (voir https://www.linuxtricks.fr/wiki/centos-installer-et-configurer-un-serveur-lamp-7-et-8 ) installer des outils supplémentaires pour compiler le module :
Code BASH :
dnf install gcc make php-pear php-pdo php-devel
Grâce à PECL, on va compiler les modules concernés :
Code BASH :
pecl install sqlsrv pdo_sqlsrv
Et on créé les fichiers de config pour indiquer à PHP de les utiliser :
Code BASH :
echo 'extension=pdo_sqlsrv.so' > /etc/php.d/30-pdo_sqlsrv.ini echo 'extension=sqlsrv.so' > /etc/php.d/30-sqlsrv.ini
On redémarre php-fpm et httpd pour que PHP prenne en compte les modules :
Code BASH :
systemctl restart php-fpm systemctl restart httpd
On créé une page de test :
Code BASH :
vi /var/www/html/test_mssql.php
Code PHP :
<?php $serverName = "localhost"; $connectionInfo = array( "Database"=>"linuxtricks", "UID"=>"sa", "PWD"=>"sasupermotdepasse"); $conn = sqlsrv_connect( $serverName, $connectionInfo ); if( $conn === false ) { die( print_r( sqlsrv_errors(), true)); } $sql = "SELECT * FROM messages"; $stmt = sqlsrv_query( $conn, $sql ); if( $stmt === false) { die( print_r( sqlsrv_errors(), true) ); } while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) { echo "Id : ".$row['ID']."<br />Texte : ".$row['texte']."<br />Date : ".$row['dte']->format('Y-m-d H:i:s')."<hr />"; } sqlsrv_free_stmt( $stmt); ?>