Ceci est une ancienne révision du document !
Table des matières
Version : 2022.01
Dernière mise-à-jour : 2022/11/07 14:34
SER401 - Présentation, Installation et Configuration
Présentation de MySQL
MySQL comprend les outils suivants :
- Un Serveur SQL
- Un moteur qui permet d'accéder aux bases de données.
- Les programmes clients pour accéder aux serveurs
- Un programme interactif permet de saisir directement les requêtes et d'afficher les résultats
- Plusieurs utilitaires et outils d'administration vous permettent de gérer votre site.
- Une bibliothèque client pour écrire vos propres programmes
- Les programmes clients peuvent être écrits en C, car la bibliothèque est elle-même écrite en C.
- Elle intègre également toutes les bases nécessaires pour supporter d'autres langages.
Développement
Le développement de MySQL depuis son rachat par la société Oracle en 2009 produit des versions différentes selon le cycle suivant :
- Création de une ou plusieurs versions successives dites DMR (Development Milestone Release) destinée(s) à être testée(s) par des personnes intéressées par des nouvelles fonctionnalités,
- La sortie d'une ou de plusieurs versions successives dites RC (Release Candidate) qui sont des versions qui deviendront stables,
- La sortie d'une version dite GA 1)
1)
Generally Available) qui correspond à la version stable actuelle.
NB : la fonction \c n’a aucun effet dans les chaînes de caractères( “” ou ' ').
Notez aussi que MariaDB se souvient des dernières commandes grâce aux touches flèche vers le haut et flèche vers le bas.
====LAB #1 - Configuration de Base====
Saisissez donc la commande mysql :
Copyright © 2021 Hugh Norris
Important - A noter que MySQL existe en version 32 bits et 64 bits.
MySQL existe en deux versions, la version communautaire qui est disponible sous la licence GNU GPL v2 et la version Enterprise qui :
- bénéficie du support d'Oracle,
- contient des outils tels Enterprise Monitor, Query Analyzer et Enterprise Backup.
Important - A noter qu'à un instant t, la version communautaire et la version Entreprise sont indentique.
Ce cours se concentre sur la version communautaire.
====Protocoles de Communication====
MySQL propose 4 protocoles de communication :
Protocole | Connexion | OS | Commentaire |
---|---|---|---|
TCP | Local et distant | Unix, Windows | Seul protocole de connexion à distance |
Socket Unix | Local | Unix | Protocole par défaut pour les connexions locales |
Shared Memory | Local | Windows | Zone de mémoire partagée entre le serveur et le client |
Named Pipes | Local | Windows | Fichier permettant deux processus sans lien de parenté de communiquer |
Important - Le port TCP par défaut de MySQL est le 3306. Il est possible de changer le port de communication de MySQL en éditant le fichier my.cnf. Pour se connecter sur un serveur distant il convient d'utiliser la commande suivante mysql -u root -p -h nom_serveur - -protocol=tcp.
====Architecture====
L'architecture est la suivante :
- Le serveur reçoit une requête du client,
- Le serveur regarde dans le cache des requêtes, si activé,
- Si la requête s'y trouve, le serveur renvoie le résultat du requête stocké dans le cache,
- Si la requête ne s'y trouve pas, le serveur analyse et optimise la requête avant de l'exécuter en utilisant le moteur d’exécution des requêtes, le met dans le cache et retourne le résultat au client.
MariaDB [(none)]> SHOW VARIABLES LIKE 'datadir'; +---------------+-----------------+ | Variable_name | Value | +---------------+-----------------+ | datadir | /var/lib/mysql/ | +---------------+-----------------+ 1 row in set (0.001 sec) MariaDB [(none)]>L’examen de ce répertoire montre la présence des répertoires des schémas :
[root@centos8 ~]# ls -l /var/lib/mysql total 122936 -rw-rw----. 1 mysql mysql 16384 Nov 7 08:18 aria_log.00000001 -rw-rw----. 1 mysql mysql 52 Nov 7 08:18 aria_log_control -rw-rw----. 1 mysql mysql 976 Nov 7 08:18 ib_buffer_pool -rw-rw----. 1 mysql mysql 12582912 Nov 7 08:18 ibdata1 -rw-rw----. 1 mysql mysql 50331648 Nov 7 08:19 ib_logfile0 -rw-rw----. 1 mysql mysql 50331648 Nov 7 05:59 ib_logfile1 -rw-rw----. 1 mysql mysql 12582912 Nov 7 08:19 ibtmp1 -rw-rw----. 1 mysql mysql 0 Nov 7 06:02 multi-master.info drwx------. 2 mysql mysql 4096 Nov 7 06:02 mysql srwxrwxrwx. 1 mysql mysql 0 Nov 7 08:19 mysql.sock -rw-rw----. 1 mysql mysql 16 Nov 7 06:02 mysql_upgrade_info drwx------. 2 mysql mysql 20 Nov 7 06:02 performance_schema -rw-rw----. 1 mysql mysql 24576 Nov 7 08:19 tc.log
Important - Il est possible de configurer MariaDB pour utiliser plusieurs supports différents pour stocker les journaux, fichiers temporaires, binaires etc.
====Utilisation de la Mémoire====
L'allocation de la mémoire est de deux types différentes :
===Allocation par Instance===
C'est la mémoire allouée par le serveur au démarrage de celui-ci. Elle est partagée par le serveur mariadb et les threads (connexions). Elle comprend, entre autre :
- le key_buffer_size : le cache d'index des tables MyISAM,
- le innodb_buffer_pool_size : le cache de données InnoDB,
- le table_definition_cache et le table_open_cache : le cache des tables,
- le query_cache : le cache des requêtes.
- le sort_buffer_size : le buffer de tri,
- le read_buffer_size : le buffer de lecture,
- le tmp_table_size : l'espace mémoire des tables temporaires,
- le max_heap_table_size : l'espace mémoire des tables Memory.
[root@centos8 ~]# dnf install mariadb mariadb-server -y
Important Vous pouvez également installer MariaDB à partir des sources disponibles sur le site https://downloads.mariadb.org/.
=====Démarrage du Serveur=====
Le serveur MariaDB peut être démarré par l'utilisation d'une de deux méthodes différentes.
====Le Service MariaDB====
Pour activer le service mariadb il convient d'utiliser la commande systemctl :
[root@centos8 ~]# systemctl enable mariadb Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service. Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service. Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.Le démarrage se fait également avec systemctl :
[root@centos8 ~]# systemctl start mariadb [root@centos8 ~]# systemctl status mariadb ● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled) Active: active (running) since Mon 2022-11-07 13:21:28 CET; 34s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 19370 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 18390 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS) Process: 18366 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Main PID: 18428 (mysqld) Status: "Taking your SQL requests now..." Tasks: 30 (limit: 23535) Memory: 84.7M CGroup: /system.slice/mariadb.service └─18428 /usr/libexec/mysqld --basedir=/usr Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: mysql> show tables; Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: Try 'mysqld --help' if you have problems with paths. Using Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: --general-log gives you a log in /var/lib/mysql that may be helpful. Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: The latest information about mysql_install_db is available at Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: https://mariadb.com/kb/en/installing-system-tables-mysql_install_db Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: You can find the latest source at https://downloads.mariadb.org and Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: the maria-discuss email list at https://launchpad.net/~maria-discuss Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: Please check all of the above before submitting a bug report Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: at http://mariadb.org/jira Nov 07 13:21:28 centos8.ittraining.loc systemd[1]: Started MariaDB 10.3 database server.Le service mariadb appel un script appelé mysqld_safe qui lance le serveur et crée un journal d'erreur. Il relance le serveur en cas d'arrêt intempestif. ====Invocation Directe==== Il est aussi possible d'invoquer directement le binaire mysqld en spécifiant manuellement le fichier de configuration de MariaDB, le fichier d'erreurs ainsi que le nom de l'utilisateur. Par exemple :
# /usr/libexec/mysqld --defaults-file=/chemin/my.cnf --log-error=/chemin/nom_log --user=mysql &=====Arrêt du Serveur===== ====Le Service MariaDB==== Il est possible d'arrêter le service mariadb avec la commande stop :
[root@centos8 ~]# systemctl stop mariadb [root@centos8 ~]# systemctl status mariadb ● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: d> Active: inactive (dead) since Mon 2022-11-07 14:06:21 CET; 7s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 19370 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=> Process: 18428 ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NE> Process: 18390 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code> Process: 18366 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/> Main PID: 18428 (code=exited, status=0/SUCCESS) Status: "MariaDB server is down" Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: The latest inform> Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: https://mariadb.c> Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: You can find the > Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: the maria-discuss> Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: Please check all > Nov 07 13:21:24 centos8.ittraining.loc mysql-prepare-db-dir[16116]: at http://mariadb> Nov 07 13:21:28 centos8.ittraining.loc systemd[1]: Started MariaDB 10.3 database serv> Nov 07 14:06:19 centos8.ittraining.loc systemd[1]: Stopping MariaDB 10.3 database ser> Nov 07 14:06:21 centos8.ittraining.loc systemd[1]: mariadb.service: Succeeded. Nov 07 14:06:21 centos8.ittraining.loc systemd[1]: Stopped MariaDB 10.3 database serv> [root@centos8 ~]# systemctl start mariadb [root@centos8 ~]# systemctl status mariadb ● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: d> Active: active (running) since Mon 2022-11-07 14:06:41 CET; 2s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 33977 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=> Process: 33906 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code> Process: 33881 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/> Main PID: 33945 (mysqld) Status: "Taking your SQL requests now..." Tasks: 30 (limit: 23535) Memory: 72.2M CGroup: /system.slice/mariadb.service └─33945 /usr/libexec/mysqld --basedir=/usr Nov 07 14:06:41 centos8.ittraining.loc mysql-prepare-db-dir[33906]: Database MariaDB > Nov 07 14:06:41 centos8.ittraining.loc mysql-prepare-db-dir[33906]: If this is not th> Nov 07 14:06:41 centos8.ittraining.loc mysqld[33945]: 2022-11-07 14:06:41 0 [Note] /u> Nov 07 14:06:41 centos8.ittraining.loc mysql-check-upgrade[33977]: The datadir locate> Nov 07 14:06:41 centos8.ittraining.loc mysql-check-upgrade[33977]: 1. Back-up your > Nov 07 14:06:41 centos8.ittraining.loc mysql-check-upgrade[33977]: 2. Start the dat> Nov 07 14:06:41 centos8.ittraining.loc mysql-check-upgrade[33977]: 3. Run 'mysql_up> Nov 07 14:06:41 centos8.ittraining.loc mysql-check-upgrade[33977]: Read more about 'm>====La Commande mysqladmin==== La comande mysqladmin peut aussi être utilisée pour arrêter le serveur à condition que l'utilisateur qui l'invoque possède le privilège shutdown. Par exemple :
[root@centos8 ~]# /bin/mysqladmin -uroot -p shutdown Enter password: fenestros [root@centos8 ~]# systemctl status mariadb ● mariadb.service - MariaDB 10.3 database server Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: d> Active: inactive (dead) since Mon 2022-11-07 08:18:39 EST; 15s ago Docs: man:mysqld(8) https://mariadb.com/kb/en/library/systemd/ Process: 3197 ExecStartPost=/usr/libexec/mysql-check-upgrade (code=exited, status=0> Process: 3165 ExecStart=/usr/libexec/mysqld --basedir=/usr $MYSQLD_OPTS $_WSREP_NEW> Process: 3127 ExecStartPre=/usr/libexec/mysql-prepare-db-dir mariadb.service (code=> Process: 3098 ExecStartPre=/usr/libexec/mysql-check-socket (code=exited, status=0/S> Main PID: 3165 (code=exited, status=0/SUCCESS) Status: "MariaDB server is down" Nov 07 08:17:18 centos8.ittraining.loc systemd[1]: Starting MariaDB 10.3 database ser> Nov 07 08:17:18 centos8.ittraining.loc mysql-check-socket[3098]: Socket file /var/lib> Nov 07 08:17:19 centos8.ittraining.loc mysql-check-socket[3098]: No process is using > Nov 07 08:17:19 centos8.ittraining.loc mysql-prepare-db-dir[3127]: Database MariaDB i> Nov 07 08:17:19 centos8.ittraining.loc mysql-prepare-db-dir[3127]: If this is not the> Nov 07 08:17:19 centos8.ittraining.loc mysqld[3165]: 2022-11-07 8:17:19 0 [Note] /us> Nov 07 08:17:21 centos8.ittraining.loc systemd[1]: Started MariaDB 10.3 database serv> Nov 07 08:18:39 centos8.ittraining.loc systemd[1]: mariadb.service: Succeeded.
Important - Le nom d'utilisateur peut être accoler ou non à l'option -u. Par exemple -uroot et -u root sont tous les deux correctes. Par contre, si vous souhaitez spécifier le mot de passe de l'utilisateur dans la ligne de commande, celui-ci doit être accoler à l'option -p.
=====Configuration=====
Votre première prise en mains de MariaDB doit débuter par la commande mysql :
====Le Client MySQL====
===Utilisation===
MariaDB dispose d’un outil client permettant de se connecter et d’envoyer des commandes SQL au serveur.
Pour démarrer une connexion au serveur MariaDB nous pouvons utiliser un C.L.I. sous Linux.
Les paramètres les plus courants sont :
$ mysql –u root –p Databasename [Entrée]Où :
- -u
- donne le nom de l’utilisateur. Si vous renoncez à l’option –u , le nom de login sera utilisé sous Unix/Linux et le nom ODBC sous Windows.
- -p
- permet de saisir le mot de passe de MariaDB, cette option est obligatoire lorsque les utilisateurs MariaDB sont sécurisés, c’est-à-dire qu’ils ont un mot de passe.
- -h
- permet de préciser le nom de l’hôte qui héberge MariaDB. Par défaut le port de communication est 3306 il est possible de changer ce port soit en configurant l’instance MariaDB soit en configurant le fichier My.ini sous Windows™ ou my.cnf sous Unix/Linux. (Attention: vérifiez qu’un par feu ne bloque pas ce port). Enfin vous devez vous assurer que le serveur MariaDB est configuré de sorte à autoriser les accès depuis votre ordinateur local.
- - -protocol = name
- cette option permet de spécifier le protocole de communication à utiliser. Il est rarement nécessaire d’indiquer cette option, puisque MariaDB choisit le bon protocole par défaut. Lorsque le client mysql et le serveur MariaDB ne tournent pas sur le même ordinateur, le seul protocole réseau possible est le TCP, dans ce cas n’oubliez pas de préciser le paramètre –h.
- -P n
- permet de préciser le port de communication utilisée pour se connecter à MariaDB. Cette option est effective que lorsque la communication passe par TCP/IP.
- - -default-character-set = nom
- cette option indique le jeu de caractères utilisés dans le cadre de communication entre mysql et le serveur MariaDB. En théorie, il s’agit du même jeu de caractères que celui utilisé par défaut dans la vie de commandes sous Windows ou la console sous Linux. Les jeux de caractères pris en charge par MariaDB sont notamment Latin 1 (ISO-8559-1), latin 2 (ISO-8559-2), UTF-8 (unicode) et cp850 (le jeu de caractères DOS pour l’Europe occidentale).
- Databasename
- ce dernier paramètre indique à MariaDB le nom d’une base de données, ce qui permet de l’utiliser directement dès l’ouverture de MariaDB. Si vous désirez changer ici de base de données après sa connexion vous pouvez utiliser la commande SQL USE <NOM_DB>. Exemple : $ mysql -u root -p -h server –protocol=tcp [Entrée] $ Password : [Entrée]
Abréviation | Commande | Signification |
---|---|---|
\c | clear | Annule une commande en cours de saisie |
\h | help | Affiche la liste des commandes |
\q | exit ou quit | Ferme la connexion à MariaDB. Sous Unix/Linux, il est possible utilisé le raccourci ctrl+D |
\s | status | Affiche les informations de statut du serveur MariaDB |
\T[f] | tee[filename] | Enregistre tous ce qui apparaît dans la fenêtre de commandes dans le fichier indiqué |
L | notee | Ferme tee. Le protocole doit être repris à tout instant avec tee ou \T. Il n’est pas nécessaire de saisir de nouveau le nom de fichier. |
\u db | use database | La base de données saisie devient la base de données par défaut |
\. Fn | source file name | exécute les commandes SQL contenues dans le fichier spécifié. Les commandes doivent à séparer par des pointsvirgules. |
[root@centos8 ~]# systemctl start mariadb [root@centos7 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 2 Server version: 5.5.56-MariaDB MariaDB Server Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>pour visualiser la liste des bases de données par défaut :
MariaDB [(none)]> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | +--------------------+ 3 rows in set (0.035 sec) MariaDB [(none)]>Ensuite changez de base de données avec la commande :
MariaDB [(none)]> USE mysql; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [mysql]>Afin de consulter les tables présentes dans la base, utilisez la commande :
MariaDB [mysql]> SHOW TABLES; +---------------------------+ | Tables_in_mysql | +---------------------------+ | column_stats | | columns_priv | | db | | event | | func | | general_log | | gtid_slave_pos | | help_category | | help_keyword | | help_relation | | help_topic | | host | | index_stats | | innodb_index_stats | | innodb_table_stats | | plugin | | proc | | procs_priv | | proxies_priv | | roles_mapping | | servers | | slow_log | | table_stats | | tables_priv | | time_zone | | time_zone_leap_second | | time_zone_name | | time_zone_transition | | time_zone_transition_type | | transaction_registry | | user | +---------------------------+ 31 rows in set (0.000 sec) MariaDB [mysql]>Pour consulter une table spécifique, utilisez la commande DESCRIBE :
MariaDB [mysql]> DESCRIBE user; +------------------------+-----------------------------------+------+-----+----------+-------+ | Field | Type | Null | Key | Default | Extra | +------------------------+-----------------------------------+------+-----+----------+-------+ | Host | char(60) | NO | PRI | | | | User | char(80) | NO | PRI | | | | Password | char(41) | NO | | | | | Select_priv | enum('N','Y') | NO | | N | | | Insert_priv | enum('N','Y') | NO | | N | | | Update_priv | enum('N','Y') | NO | | N | | | Delete_priv | enum('N','Y') | NO | | N | | | Create_priv | enum('N','Y') | NO | | N | | | Drop_priv | enum('N','Y') | NO | | N | | | Reload_priv | enum('N','Y') | NO | | N | | | Shutdown_priv | enum('N','Y') | NO | | N | | | Process_priv | enum('N','Y') | NO | | N | | | File_priv | enum('N','Y') | NO | | N | | | Grant_priv | enum('N','Y') | NO | | N | | | References_priv | enum('N','Y') | NO | | N | | | Index_priv | enum('N','Y') | NO | | N | | | Alter_priv | enum('N','Y') | NO | | N | | | Show_db_priv | enum('N','Y') | NO | | N | | | Super_priv | enum('N','Y') | NO | | N | | | Create_tmp_table_priv | enum('N','Y') | NO | | N | | | Lock_tables_priv | enum('N','Y') | NO | | N | | | Execute_priv | enum('N','Y') | NO | | N | | | Repl_slave_priv | enum('N','Y') | NO | | N | | | Repl_client_priv | enum('N','Y') | NO | | N | | | Create_view_priv | enum('N','Y') | NO | | N | | | Show_view_priv | enum('N','Y') | NO | | N | | | Create_routine_priv | enum('N','Y') | NO | | N | | | Alter_routine_priv | enum('N','Y') | NO | | N | | | Create_user_priv | enum('N','Y') | NO | | N | | | Event_priv | enum('N','Y') | NO | | N | | | Trigger_priv | enum('N','Y') | NO | | N | | | Create_tablespace_priv | enum('N','Y') | NO | | N | | | Delete_history_priv | enum('N','Y') | NO | | N | | | ssl_type | enum('','ANY','X509','SPECIFIED') | NO | | | | | ssl_cipher | blob | NO | | NULL | | | x509_issuer | blob | NO | | NULL | | | x509_subject | blob | NO | | NULL | | | max_questions | int(11) unsigned | NO | | 0 | | | max_updates | int(11) unsigned | NO | | 0 | | | max_connections | int(11) unsigned | NO | | 0 | | | max_user_connections | int(11) | NO | | 0 | | | plugin | char(64) | NO | | | | | authentication_string | text | NO | | NULL | | | password_expired | enum('N','Y') | NO | | N | | | is_role | enum('N','Y') | NO | | N | | | default_role | char(80) | NO | | | | | max_statement_time | decimal(12,6) | NO | | 0.000000 | | +------------------------+-----------------------------------+------+-----+----------+-------+ 47 rows in set (0.001 sec) MariaDB [mysql]>Pour visualiser la liste des utilisateurs autorisés pour MariaDB, utilisez la commande suivante :
MariaDB [mysql]> SELECT host, user, password FROM user; +------------------------+-------+-----------+ | host | user | password | +------------------------+-------+-----------+ | localhost | root | | | centos8.ittraining.loc | root | | | 127.0.0.1 | root | | | ::1 | root | | +------------------------+-------+-----------+ 7 rows in set (0.00 sec) MariaDB [mysql]>Vous noterez que l'utilisateur root, l'administrateur de MariaDB, n'a pas de mot de passe ! Il faut par conséquence en définir un en urgence ! Pour sortir de l'administration de MariaDB, utilisez la commande exit :
MariaDB [mysql]> exit Bye [root@centos8 ~]#Pour définir le mot de passe fenestros pour root, il convient de saisir la commande suivante :
[root@centos8 ~]# mysqladmin -u root password fenestrosLors de la prochaine tentative de connexion, vous obtiendrez un message d'erreur car le mot de passe est maintenant non-null :
[root@centos8 ~]# mysql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)Pour vous connecter en tant que l'administrateur de la base il faut maintenant utiliser la commande suivante :
[root@centos8 ~]# mysql -uroot -p Enter password: fenestros Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 11 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]>
Important - Notez l'utilisation de l'option -p qui indique à MariaDB que vous souhaitez saisir un mot de passe. Le mot de passe n'est pas mysql mais fenestros, comme démontre l'exemple ci-dessus. Bien entendu le mot de passe fenestros n'apparaît pas réellement en clair. L'utilisation de l'option mysql dans la ligne de commande indique simplement que nous souhaitons se connecter à la base mysql dès la connexion.
Saisissez la commande suivante pour vérifier la table des utilisateurs :
MariaDB [mysql]> SELECT host, user, password FROM user; +------------------------+------+-------------------------------------------+ | host | user | password | +------------------------+------+-------------------------------------------+ | localhost | root | *00269BA49BEC800F9CCF34C20C1FD83E0236B89A | | centos8.ittraining.loc | root | | | 127.0.0.1 | root | | | ::1 | root | | +------------------------+------+-------------------------------------------+ 4 rows in set (0.000 sec) MariaDB [mysql]>
Important - Notez que non seulement le mot de passe de root est présent mais qu'il a été crypté. Vous avez aussi la possibilité de sécuriser votre installation de MariaDB en utilisant le script /usr/bin/mysql_secure_installation.
====LAB #2 - Configuration Avancée====
La configuration avancée du serveur MariaDB se fait soit :
- en éditant le fichier /etc/my.cnf,
- en passant des paramètres à l'exécutable mysqld,
- en paramétrant le serveur dynamiquement.
[root@centos8 ~]# cat /etc/my.cnf # # This group is read both both by the client and the server # use it for options that affect everything # [client-server] # # include all files from the config directory # !includedir /etc/my.cnf.dCe fichier n'est pas cependant le seul endroit où est configuré le serveur. En effet, le serveur lit des directives des fichiers /etc/my.cnf et ~/.my.cnf dans l'ordre, comme démontre la sortie de la commande /usr/libexec/mysqld - -help - -verbose :
[root@centos8 ~]# /usr/libexec/mysqld --help --verbose | grep my.cnf 2022-11-07 8:28:24 0 [Note] Plugin 'FEEDBACK' is disabled. /etc/my.cnf ~/.my.cnf my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default my.cnf files
Important : En cas de duplicité de directives, c'est la dernière lue qui l'emporte. Si vous avez un autre fichier de configuration qui n'est pas un de ceux mentionné, vous pouvez l'utiliser ainsi : /usr/libexec/mysqld –defaults-file=/chemin/votre_fichier.
Le fichier my.cnf est organisé en sections, aussi appelées des groupes. Ces sections font référence au programme concerné par la configuration. Par exemple la section [mysqld] fait référence au serveur, tandis qu'une section [mysql] ferait référence au client en mode texte. Il est aussi possible de trouver les sections suivantes :
- [mysqldump],
- [mysqladmin],
- [mysqlhotcopy],
- [myisamchk],
- [client],
- etc.
Important - [client] est une section qui configure tous les clients. [mysqld] peut être remplacé par [server]. Toute ligne commençant par le caractère # ou ; est un commentaire.
Le fichier de configuration peut aussi contenir des lignes !include qui référencent des fichiers tiers de configuration ainsi que des lignes !includedir qui référencent des répertoires contenant plusieurs fichiers de configuration. Attention, dans ce dernier cas, l'administrateur n'a aucun contrôle sur l'ordre de lecture des fichiers par le serveur :
[root@centos8 ~]# ls -l /etc/my.cnf.d total 20 -rw-r--r--. 1 root root 41 Apr 19 2021 auth_gssapi.cnf -rw-r--r--. 1 root root 295 Dec 17 2020 client.cnf -rw-r--r--. 1 root root 763 Feb 18 2021 enable_encryption.preset -rw-r--r--. 1 root root 1458 Apr 19 2021 mariadb-server.cnf -rw-r--r--. 1 root root 232 Feb 18 2021 mysql-clients.cnf
[root@centos8 ~]# cat /etc/my.cnf.d/client.cnf # # These two groups are read by the client library # Use it for options that affect all clients, but not the server # [client] # This group is not read by mysql client library, # If you use the same .cnf file for MySQL and MariaDB, # use it for MariaDB-only client options [client-mariadb] [root@centos8 ~]# cat /etc/my.cnf.d/mysql-clients.cnf # # These groups are read by MariaDB command-line tools # Use it for options that affect only one utility # [mysql] [mysql_upgrade] [mysqladmin] [mysqlbinlog] [mysqlcheck] [mysqldump] [mysqlimport] [mysqlshow] [mysqlslap] [root@centos8 ~]# cat /etc/my.cnf.d/mariadb-server.cnf # # These groups are read by MariaDB server. # Use it for options that only the server (but not clients) should see # # See the examples of server my.cnf files in /usr/share/mysql/ # # this is read by the standalone daemon and embedded servers [server] # this is only for the mysqld standalone daemon # Settings user and group are ignored when systemd is used. # If you need to run mysqld under a different user or group, # customize your systemd unit file for mysqld/mariadb according to the # instructions in http://fedoraproject.org/wiki/Systemd [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mariadb/mariadb.log pid-file=/run/mariadb/mariadb.pid # # * Galera-related settings # [galera] # Mandatory settings #wsrep_on=ON #wsrep_provider= #wsrep_cluster_address= #binlog_format=row #default_storage_engine=InnoDB #innodb_autoinc_lock_mode=2 # # Allow server to accept connections on all interfaces. # #bind-address=0.0.0.0 # # Optional setting #wsrep_slave_threads=1 #innodb_flush_log_at_trx_commit=0 # this is only for embedded server [embedded] # This group is only read by MariaDB servers, not by MySQL. # If you use the same .cnf file for MySQL and MariaDB, # you can put MariaDB-only options here [mariadb] # This group is only read by MariaDB-10.3 servers. # If you use the same .cnf file for MariaDB of different versions, # use this group for options that older servers don't understand [mariadb-10.3]Chaque section contient des directives au format option=valeur ou au format binaire, par exemple enable-federated. Pour connaître toutes les options valides pour le serveur, il convient de saisir la commande suivante :
[root@centos8 ~]# /usr/libexec/mysqld --help --verbose | more 2022-11-07 8:36:15 0 [Note] Plugin 'FEEDBACK' is disabled. /usr/libexec/mysqld Ver 10.3.28-MariaDB for Linux on x86_64 (MariaDB Server) Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Starts the MariaDB database server. Usage: /usr/libexec/mysqld [OPTIONS] Default options are read from the following files in the given order: /etc/my.cnf ~/.my.cnf The following groups are read: mysqld server mysqld-10.3 mariadb mariadb-10.3 client-server galera The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file. The following specify which files/extra groups are read (specified before remaining options): --defaults-file=# Only read default options from the given file #. --defaults-extra-file=# Read this file after the global files are read. --defaults-group-suffix=# Additionally read default groups with # appended as a suffix. --allow-suspicious-udfs Allows use of UDFs consisting of only one symbol xxx() without corresponding xxx_init() or xxx_deinit(). That also means that one can load any function from any library, for example exit() from libc.so --alter-algorithm[=name] Specify the alter table algorithm. One of: DEFAULT, COPY, INPLACE, NOCOPY, INSTANT -a, --ansi Use ANSI SQL syntax instead of MySQL syntax. This mode will also set transaction isolation level 'serializable'. --archive[=name] Enable or disable ARCHIVE plugin. One of: ON, OFF, FORCE (don't start if the plugin fails to load), FORCE_PLUS_PERMANENT (like FORCE, but the plugin can not be uninstalled). --aria[=name] Enable or disable Aria plugin. One of: ON, OFF, FORCE (don't start if the plugin fails to load), FORCE_PLUS_PERMANENT (like FORCE, but the plugin can not be uninstalled). --aria-block-size=# Block size to be used for Aria index pages. --aria-checkpoint-interval=# Interval between tries to do an automatic checkpoints. In seconds; 0 means 'no automatic checkpoints' which makes sense only for testing. --aria-checkpoint-log-activity=# Number of bytes that the transaction log has to grow between checkpoints before a new checkpoint is written to the log. --aria-encrypt-tables Encrypt tables (only for tables with ROW_FORMAT=PAGE (default) and not FIXED/DYNAMIC) --aria-force-start-after-recovery-failures=# Number of consecutive log recovery failures after which logs will be automatically deleted to cure the problem; 0 (the default) disables the feature. --aria-group-commit=name Specifies Aria group commit mode. Possible values are "none" (no group commit), "hard" (with waiting to actual commit), "soft" (no wait for commit (DANGEROUS!!!)) --aria-group-commit-interval=# Interval between commite in microseconds (1/1000000c). 0 --More--Pour connaître les options valides pour le client mysql, l'option de la ligne de commande –verbose n'est pas requise :
[root@centos8 ~]# mysql --help | more mysql Ver 15.1 Distrib 10.3.28-MariaDB, for Linux (x86_64) using readline 5.1 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Usage: mysql [OPTIONS] [database] Default options are read from the following files in the given order: /etc/my.cnf ~/.my.cnf The following groups are read: mysql client client-server client-mariadb The following options may be given as the first argument: --print-defaults Print the program argument list and exit. --no-defaults Don't read default options from any option file. The following specify which files/extra groups are read (specified before remaining options): --defaults-file=# Only read default options from the given file #. --defaults-extra-file=# Read this file after the global files are read. --defaults-group-suffix=# Additionally read default groups with # appended as a suffix. -?, --help Display this help and exit. -I, --help Synonym for -? --abort-source-on-error Abort 'source filename' operations in case of errors --auto-rehash Enable automatic rehashing. One doesn't need to use 'rehash' to get table and field completion, but startup and reconnecting may take a longer time. Disable with --disable-auto-rehash. (Defaults to on; use --skip-auto-rehash to disable.) -A, --no-auto-rehash No automatic rehashing. One has to use 'rehash' to get table and field completion. This gives a quicker start of mysql and disables rehashing on reconnect. --auto-vertical-output Automatically switch to vertical output mode if the result is wider than the terminal width. -B, --batch Don't use history file. Disable interactive behavior. (Enables --silent.) --binary-as-hex Print binary data as hex --character-sets-dir=name Directory for character set files. --column-type-info Display column type information. -c, --comments Preserve comments. Send comments to the server. The default is --skip-comments (discard comments), enable with --comments. -C, --compress Use compression in server/client protocol. -#, --debug[=#] This is a non-debug version. Catch this and exit. --debug-check Check memory and open file usage at exit. -T, --debug-info Print some debug info at exit. -D, --database=name Database to use. --default-character-set=name Set the default character set. --delimiter=name Delimiter to be used. -e, --execute=name Execute command and quit. (Disables --force and history file.) -E, --vertical Print the output of a query (rows) vertically. -f, --force Continue even if we get an SQL error. Sets abort-source-on-error to 0 -G, --named-commands Enable named commands. Named commands mean this program's internal commands; see mysql> help . When enabled, the named commands can be used from any line of the query, --More--Pour connaître avec exactitude la configuration actuelle utilisez la commande mysqladmin :
[root@centos8 ~]# mysqladmin -uroot -p variables | more Enter password: fenestros +--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +--------------------------------------------------------+-------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------------------------------------------------------------------------------------------------------+ | alter_algorithm | DEFAULT | | aria_block_size | 8192 | | aria_checkpoint_interval | 30 | | aria_checkpoint_log_activity | 1048576 | | aria_encrypt_tables | OFF | | aria_force_start_after_recovery_failures | 0 | | aria_group_commit | none | | aria_group_commit_interval | 0 | | aria_log_file_size | 1073741824 | | aria_log_purge_type | immediate | | aria_max_sort_file_size | 9223372036853727232 | | aria_page_checksum | ON --More--===Passer des Paramètres à l'Exécutable mysqld=== Le serveur mysqld peut être paramétrer en passant des options à l'exécutable lors de son lancement. Dans ce cas, les options sont les mêmes que celles dans le fichier my.cnf, précédées par deux tirés. ===Paramétrer le Serveur Dynamiquement=== Pour paramétrer le serveur à chaud, il convient d'utiliser la commande SET. Pour utiliser la commande SET, il faut posséder le privilège SUPER. La portée des options peut être SESSION, c'est-à-dire pour la session en cours, ou GLOBAL pour toutes le sessions. ==SESSION== Prenant l'example de l'option tmp_table_size :
[root@centos8 ~]# mysql -uroot -p Enter password: fenestros Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 14 Server version: 10.3.28-MariaDB MariaDB Server Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'tmp_table_size'; +----------------+----------+ | Variable_name | Value | +----------------+----------+ | tmp_table_size | 16777216 | +----------------+----------+ 1 row in set (0.001 sec) MariaDB [(none)]> SHOW SESSION VARIABLES LIKE 'tmp_table_size'; +----------------+----------+ | Variable_name | Value | +----------------+----------+ | tmp_table_size | 16777216 | +----------------+----------+ 1 row in set (0.000 sec) MariaDB [(none)]> SET SESSION tmp_table_size=8388608; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'tmp_table_size'; +----------------+----------+ | Variable_name | Value | +----------------+----------+ | tmp_table_size | 16777216 | +----------------+----------+ 1 row in set (0.000 sec) MariaDB [(none)]> SHOW SESSION VARIABLES LIKE 'tmp_table_size'; +----------------+---------+ | Variable_name | Value | +----------------+---------+ | tmp_table_size | 8388608 | +----------------+---------+ 1 row in set (0.001 sec) MariaDB [(none)]>
Important - Notez que la modification est immédiate.
==GLOBAL==
En utilisant la même option :
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'tmp_table_size'; +----------------+----------+ | Variable_name | Value | +----------------+----------+ | tmp_table_size | 16777216 | +----------------+----------+ 1 row in set (0.000 sec) MariaDB [(none)]> SET GLOBAL tmp_table_size=8388608; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'tmp_table_size'; +----------------+---------+ | Variable_name | Value | +----------------+---------+ | tmp_table_size | 8388608 | +----------------+---------+ 1 row in set (0.000 sec) MariaDB [(none)]> SHOW SESSION VARIABLES LIKE 'tmp_table_size'; +----------------+---------+ | Variable_name | Value | +----------------+---------+ | tmp_table_size | 8388608 | +----------------+---------+ 1 row in set (0.000 sec) MariaDB [(none)]>Prenons maintenant le cas d'une option qui n'a qu'une portée globale :
MariaDB [(none)]> SHOW VARIABLES LIKE 'query_cache_size'; +------------------+---------+ | Variable_name | Value | +------------------+---------+ | query_cache_size | 1048576 | +------------------+---------+ 1 row in set (0.001 sec) MariaDB [(none)]> SET SESSION query_cache_size=122880; ERROR 1229 (HY000): Variable 'query_cache_size' is a GLOBAL variable and should be set with SET GLOBAL MariaDB [(none)]>
Important - Notez que pour une option ayant uniquement une portée globale, la modification de la valeur globale est prise en compte dans la session active. Notez aussi que les modifications à chaud ne sont pas persistants.
====LAB #3 - Le Mode SQL====
Le mode SQL est utilisé principalement pour empêcher l'insertion de données invalides. La valeur par défaut du mode SQL peut être visualisée avec la commande suivante :
MariaDB [(none)]> SHOW SESSION VARIABLES LIKE 'sql_mode'; +---------------+-------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+-------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+-------------------------------------------------------------------------------------------+ 1 row in set (0.001 sec) MariaDB [(none)]>Les valeurs de l'option sql_mode peuvent être combinées. Pour aider l'administrateur, MariaDB propose un mode sql appelé TRADITIONAL :
MariaDB [(none)]> SET SESSION sql_mode='TRADITIONAL'; Query OK, 0 rows affected (0.000 sec) MariaDB [(none)]> SHOW SESSION VARIABLES LIKE 'sql_mode'; +---------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ | Variable_name | Value | +---------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ | sql_mode | STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION | +---------------+------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.000 sec) MariaDB [(none)]>
Copyright © 2021 Hugh Norris