Difference between revisions of "MySQL/fr"

From SME Server
Jump to navigationJump to search
 
(14 intermediate revisions by the same user not shown)
Line 64: Line 64:
 
  sv u .
 
  sv u .
  
Pour le serveur SME 7.2 et les versions précédantes, exécuter ce qui suit (on utilise la commande runsvctrl à la place de la commande sv ) :
+
Pour le serveur SME 7.2 et les versions précédantes, exécuter ce qui suit (on utilise la commande runsvctrl à la place de la commande sv) :
  
 
  cd /var/service/mysqld
 
  cd /var/service/mysqld
Line 86: Line 86:
 
  sv u .
 
  sv u .
  
==Accès à MariaDB/MySQL using port from the localhost and local network==
+
==MariaDB/MySQL ne démarre pas==
MariaDB/MySQL on SME Server runs on a socket instead of on a port.
+
Vous devez rechercher la cause en inspectant deux journaux :
MariaDB/MySQL on SME Server is by default configured to allow only localhost connections to improve security, this means that it is only accessible from the server itself and not from the local network nor from the internet.
+
* le journal du service
If you wish to enable local network access, execute the following commands on a SME Server shell as root (note access private is not needed as this is the default, and TCPPort 3306 neither as all ports are open to the LAN by default):
+
journalctl -u mariadb
 +
* le journal de mariadb
 +
tail -f  /var/log/mariadb/mariadb.log
  
{{Warning box|Keep in mind that by default MariaDB/MySQL is not using any kind of encryption unless you did work on that yourself, so any access to the port from the LAN will be as clear text and anyone on the LAN will be able to access to the password and all the data transferred between your server and the client. Refers to the manual of your database version.}}
+
===Table utilisateur corrompue===
 +
Votre erreur dans le journal mariadb inclura :
 +
ERROR: 130  Incorrect file format 'user'
  
For SME 10:
+
Cela peut se produire principalement après une panne de courant. La table mysql.user est un type MYSIAM.
 +
# ll /var/lib/mysql/mysql/user.*
 +
-rw-rw---- 1 mysql mysql 10630  3 jui 21:08 /var/lib/mysql/mysql/user.frm
 +
-rw-rw---- 1 mysql mysql  488  3 jui 21:08 /var/lib/mysql/mysql/user.MYD
 +
-rw-rw---- 1 mysql mysql  2048  3 jui 21:08 /var/lib/mysql/mysql/user.MYI
 +
Dans ce cas, vous pouvez voir user.MYD ou user.MYI avec une taille de 0 octet. Si le problème est sur MYI, c'est l'index que vous devriez pouvoir reconstruire, s'il est sur le MYD, ce sont les données, vous aurez besoin d'une sauvegarde à partir de laquelle restaurer.
 +
 
 +
En tant que root, commencez par démarrer mariadb sans authentification (« grant table ») :
 +
systemctl stop mariadb
 +
/usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --skip-grant-tables
 +
{{warning box|type=Attention : |faites attention que mariadb fonctionnera sans aucune authentification d'utilisateur, s'il est ouvert à l'extérieur de votre serveur, vous voudrez peut-être d'abord fermer cet accès et garder cette session aussi courte que possible.}}
 +
Puis utiliser la ligne de commande mysql :
 +
mysqlcheck mysql
 +
Si une erreur s'affiche, essayer :
 +
mysqlcheck mysql --repair
 +
Si cela échoue, vous devez effectuer une restauration. Vous pourriez avoir un « dump » dans /home/e-smith/db/mysql/mysql.dump. En espèrant qu'il soit à jour. Je vous suggère de le copier et d'extraire simplement la partie du tableau qui vous manque.
 +
Vous avez besoin de ce qui est ci-dessous :
 +
--
 +
-- Table structure for table `user`
 +
--
 +
et
 +
--
 +
-- Dumping data for table `user`
 +
--
 +
En considerant que votre table « dump » est maintenant dans un fichier dénommé /home/e-smith/db/mysql/mysql.user.dump, faites :
 +
mysql mysql < /home/e-smith/db/mysql/mysql.user.dump
 +
expand-template /var/lib/mysql/set.password
 +
mysql mysql < /var/lib/mysql/set.password
 +
mysqladmin shutdown
 +
systemctl start mariadb
 +
 
 +
{{warning box|type=Attention : |la ligne de « dump » de la table mysql.user sur le serveur mariadb supprimera toutes les entrées existantes dans la table si vous utilisez le « dump » SME par défaut car il comporte une ligne DROP TABLE IF EXISTS. Ne faites donc cela que si vous savez ce que vous faites.}}
 +
 
 +
==Accès à MariaDB/MySQL en utilisant le port de localhost et à partir du réseau local==
 +
MariaDB/MySQL sur le serveur SME fonctionne sur un socket (une interface de connexion) au lieu d'un port.
 +
MariaDB/MySQL sur le serveur SME est, par défaut, configuré pour n'autoriser que les connexions de localhost pour garantir la sécurité, ceci signifie que l'accessibilité n'est possible que du serveur lui-même et pas depuis le réseau local, ni depuis l'internet.
 +
Si vous souhaitez activer l'accès depuis le réseau local, exécutez les commandes suivantes sur un shell du serveur SME en tant que root (notez que l'accès privé n'est pas nécessaire car il s'agit de la valeur par défaut, et le port TCP 3306 non plus car tous les ports sont ouverts sur le LAN par défaut) :
 +
 
 +
{{Warning box|type=Attention : |gardez à l'esprit que par défaut MariaDB/MySQL n'utilise aucun type de cryptage à moins que vous n'ayez travaillé dessus vous-même, donc tout accès au port depuis le LAN sera en texte clair et toute personne sur le LAN sera capable d'accéder au mot de passe et à toutes les données transférées entre votre serveur et le client. Se référer au manuel de la version de votre base de données.}}
 +
 
 +
Pour SME 10 :
 
  config setprop mariadb LocalNetworkingOnly no
 
  config setprop mariadb LocalNetworkingOnly no
 
  expand-template /etc/my.cnf
 
  expand-template /etc/my.cnf
 
  sv t /service/mysqld
 
  sv t /service/mysqld
For SME 9 and below:
+
Pour SME 9 et avant :
 
  config setprop mysqld LocalNetworkingOnly no
 
  config setprop mysqld LocalNetworkingOnly no
 
  expand-template /etc/my.cnf
 
  expand-template /etc/my.cnf
 
  sv t /service/mysqld
 
  sv t /service/mysqld
  
==Access MySQL from a remote network==
+
==Accès à MySQL depuis un réseau distant==
If you wish to enable access to MariaDB/MySQL databases from remote networks, then in addition to the LocalNetworkingOnly db setting mentioned above, you will need to execute the following commands:
+
Si vous souhaitez activer l'accès aux bases de données MariaDB/MySQL à partir de réseaux distants, en plus du paramètre db LocalNetworkingOnly mentionné ci-dessus, vous devrez exécuter les commandes suivantes :
  
For SME 10
+
Pour SME 10
 
  config set mariadb service access public status enabled TCPPort 3306  
 
  config set mariadb service access public status enabled TCPPort 3306  
 
  signal-event remoteaccess-update  
 
  signal-event remoteaccess-update  
 
  signal-event reboot
 
  signal-event reboot
For SME9 and below
+
Pour SME9 et avant
 
  config set mysqld service access public status enabled TCPPort 3306  
 
  config set mysqld service access public status enabled TCPPort 3306  
 
  signal-event remoteaccess-update  
 
  signal-event remoteaccess-update  
 
  signal-event reboot
 
  signal-event reboot
  
Keep in mind this enables access to your MariaDB/MySQL database for ANYONE, so make sure you have strong passwords on ALL your MariaDB/MySQL databases.
+
Gardez à l'esprit que cela permet à TOUT LE MONDE d'accéder à votre base de données MariaDB/MySQL, alors assurez-vous d'avoir des mots de passe forts sur TOUTES vos bases de données MariaDB/MySQL.
Alternatively it would be a more secure approach to require external (remote) users to establish a VPN connection and effectively become part of the local network. In that case do not change the mysql access to public status using the above command.
+
Il serait également plus sûr d'exiger des utilisateurs externes (distants) qu'ils établissent une connexion VPN et fassent effectivement partie du réseau local. Dans ce cas, ne modifiez pas l'accès mysql au statut public à l'aide de la commande ci-dessus.
 
 
{{Warning box|Keep in mind that by default MariaDB/MySQL is not using any kind of encryption unless you did work on that yourself, so any access to the port from the WAN will be as clear text and anyone on the Internet will be able to access to the password and all the data transferred between your server and the client. Refers to the manual of your database version.}}
 
  
==Create MariaDB/MySQL user(s) with access from other computers==
+
{{Warning box|type=Attention : |gardez à l'esprit que, par défaut, MariaDB/MySQL n'utilise aucun type de cryptage à moins que vous n'ayez travaillé là-dessus vous-même, donc tout accès au port depuis le WAN sera en texte clair et n'importe qui sur Internet sera capable d'accéder au mot de passe et à toutes les données transférées entre votre serveur et le client. Se référer au manuel de la version de votre base de données.}}
SME Server's default MariaDB/MySQL database users, and most of the database examples in the wiki, allow login only from ''localhost''.
 
  
If you want to access a MariaDB/MySQL database on your SME server from other computers, you must not only make the configuration changes described above, you must also create a user who is allowed to login from those systems (see [http://dev.mysql.com/doc/refman/4.1/en/connection-access.html 5.5.4. Access Control, Stage 1: Connection Verification] for more detail).
+
==Créer un (des) utilisateur(s) MariaDB/MySQL avec accès depuis d'autres ordinateurs==
 +
Les utilisateurs de la base de données MariaDB/MySQL par défaut du serveur SME, et la plupart des exemples de bases de données du wiki, autorisent la connexion uniquement à partir de ''localhost''.
  
===Allow mysql login from any LAN workstation===
+
Si vous souhaitez accéder à une base de données MariaDB/MySQL sur votre serveur SME à partir d'autres ordinateurs, vous devez non seulement effectuer les modifications de configuration décrites ci-dessus, mais également créer un utilisateur autorisé à se connecter à partir de ces systèmes (voir [http:// dev.mysql.com/doc/refman/4.1/en/connection-access.html 5.5.4. Contrôle d'accès, étape 1 : vérification de la connexion] pour plus de détails).
Assuming your local network is 192.168.1.0, you can create a user with MariaDB/MySQL access from any LAN workstation (or VPN client) using the command shown below (courtesy of [http://forums.contribs.org/index.php/topic,32270.msg136322.html#msg136322 DarkMirage]).
 
{{Tip box|The suggestion here is to assign privileges based on IP number (using a wild card if desired), the same can also be done for hostnames. In some cases, like dynamicaly assgned IP addresses, this might be a more suitable and robust solution.}}
 
You probably want to change:
 
  
*the database name ('''MyDB''')
+
===Autoriser les connexions à MariaDB/MySQL depuis toutes les stations de travail du LAN===
*the user name ('''MyUser''')
+
En supposant que votre réseau local est 192.168.1.0, vous pouvez créer un utilisateur avec un accès MariaDB/MySQL à partir de n'importe quel poste de travail LAN (ou client VPN) en utilisant la commande ci-dessous (avec l'aimable autorisation de [http://forums.contribs.org/index.php/topic,32270.msg136322.html#msg136322 DarkMirage]).
*the password ('''MyPW''') and
+
{{Tip box|type=Astuce : |la suggestion ici est d'attribuer des privilèges en fonction du numéro IP (en utilisant un caractère générique si vous le souhaitez), la même chose peut également être faite pour les noms d'hôte. Dans certains cas, comme les adresses IP attribuées dynamiquement, cela peut être une solution plus appropriée et plus robuste.}}
*the allowed computers ('''192.168.1.%''')
+
Vous souhaitez probablement modifier :
 +
*le nom de la base de données ('''MyDB''')
 +
*le nom de l'utilisateur ('''MyUser''')
 +
*le mot de passe ('''MyPW''') et
 +
*les ordinateurs autorisés ('''192.168.1.%''')
  
  ## In the command below, \ escapes a linebreak.
+
  ## Dans la commande ci-dessous, \ permet de poursuivre la commande sur la ligne suivante.
     ## Either include them, or place the entire command on one line
+
     ## Soit inclure les barres obliques inverses, soit placer la commande entière sur une seule ligne :
 
     mysql -e "\
 
     mysql -e "\
 
     create database MyDB; \
 
     create database MyDB; \
Line 144: Line 187:
 
     FLUSH PRIVILEGES;"
 
     FLUSH PRIVILEGES;"
  
===Security Implications of allowing remote MariaDB/MySQL login===
+
===Conséquences pour la sécurité d'autoriser la connexion à MariaDB/MySQL à distance===
It is technically possible to combine the above techniques to allow remote MariaDB/MySQL login from any host on the Internet (allow network login, open the firewall, then set the network address to '%'). This would be a bad idea.
+
Il est techniquement possible de combiner les techniques ci-dessus pour autoriser la connexion à MariaDB/MySQL à distance depuis n'importe quel hôte sur Internet (autoriser la connexion réseau, ouvrir le pare-feu, puis définir l'adresse réseau sur '%'). Ce serait une mauvaise idée.
  
If you have remote users who need access to your MariaDB/MySQL database(s), encourage them to use a VPN connection, or an SSH tunnel, or (at a minimum), restrict the allowed login hosts to their internet IP address. On top of that, you are encouraged to enforce encrypted connection at the level of  you MariaDB/MySQL service to avoid any clear text exchange on the LAN or worse on the Internet.
+
Si vous avez des utilisateurs distants qui ont besoin d'accéder à votre ou vos bases de données MariaDB/MySQL, encouragez-les à utiliser une connexion VPN ou un tunnel SSH, ou (au minimum), limitez les hôtes de connexion autorisés à leur adresse IP Internet. En plus de cela, vous êtes encouragé(e) à appliquer une connexion cryptée au niveau de votre service MariaDB/MySQL pour éviter tout échange de texte en clair sur le LAN ou, pire, sur Internet.
  
==Enable InnoDB engine==
+
==Activer le moteur InnoDB==
  
{{warning box|Version 10 MySQL is provided by MariaDB which already has InnoDB as its default database engine}}
+
{{warning box|type=Attention : |la version 10 de MySQL est fournie par MariaDB qui a déjà InnoDB comme moteur de base de données par défaut.}}
  
To enable the InnoDB engine, run the following commands:
+
Pour activer le moteur InnoDB, exécutez les commandes suivantes :
  
 
  db configuration setprop mysqld InnoDB enabled
 
  db configuration setprop mysqld InnoDB enabled
Line 159: Line 202:
 
  sv t /service/mysqld
 
  sv t /service/mysqld
  
To disable the InnoDB engine, run the following commands:
+
Pour désactiver le moteur InnoDB, exécutez les commandes suivantes :
  
 
  db configuration setprop mysqld InnoDB disabled
 
  db configuration setprop mysqld InnoDB disabled
Line 166: Line 209:
  
 
==Administration==
 
==Administration==
Information about user managament can be found in the [http://dev.mysql.com/doc/refman/4.1/en/user-account-management.html MySQL User Account Management section] of the [http://dev.mysql.com/doc/refman/4.1/en/ MySQL manual], which holds a lot of useful information, a small section is listed here for convenience.
+
Des informations sur la gestion des utilisateurs peuvent être trouvées dans la [http://dev.mysql.com/doc/refman/4.1/en/user-account-management.html section MySQL User Account Management] du [http://dev. mysql.com/doc/refman/4.1/en/ MySQL manual], qui contient de nombreuses informations utiles, une petite section est répertoriée ici pour plus de commodité.
  
===Create a new database===
+
===Créer une nouvelle base de données===
  
*See the developers guide if you wish to automate the creation of a database within an rpm
+
*Voir le guide pour les développeurs si vous souhaitez automatiser la création d'une base de données au sein d'un paquet
  
or
+
ou
  
*Get access to the SME Server shell and issue the following commands:
+
*Accédez au shell du serveur SME et exécutez les commandes suivantes :
  
 
  mysqladmin create 'dbname' --default-character-set=utf8
 
  mysqladmin create 'dbname' --default-character-set=utf8
  
This will create an empty database called dbname.
+
Cela créera une base de données vide dénommée dbname.
  
{{Warning box|The 'root' user should not be permitted to access the database except from localhost. Each application should have its own database and its own user to access that database.||
+
{{Warning box|type=Attention :| l'utilisateur 'root' ne devrait pas être autorisé à accéder à la base de données en dehors de localhost. Chaque application devrait avoir sa propre base de données et son propre utilisateur pour accéder à cette base de données.}}
}}
 
  
===Creating MySQL user(s)===
+
===Créer un (des) utilisateur(s) MySQL===
Decide which permissions you will have to give to the user on what database. Details about this can be found in the MariaDB/MySQL Manual found at the MariaDB/MySQL site. Get access to the SME Server shell and issue the following commands to login to the MySQL server:
+
Décidez quelles autorisations vous devrez accorder à l'utilisateur sur quelle base de données. Des détails à ce sujet peuvent être trouvés dans le manuel MariaDB/MySQL disponible sur le site MariaDB/MySQL. Accédez au shell du serveur SME et exécutez les commandes suivantes pour vous connecter au serveur MySQL :
  
mysql
+
  mysql
  
Suppose we want to create a user which has read-only access on all tables in the database called 'test':
+
Supposons que nous voulions créer un utilisateur qui a un accès en lecture seule sur toutes les tables de la base de données appelée 'test' :
  
 
  GRANT SELECT ON test.* TO 'user'@'host' IDENTIFIED BY 'password';
 
  GRANT SELECT ON test.* TO 'user'@'host' IDENTIFIED BY 'password';
  
In the above line you will have to fill in the user and the host and/or domain from which you will allow the user access to the SME Server MariaDB/MySQL server (don't forget the single quotes). More information can be found in the MariaDB/MySQL Server Manual at the MariaDB/MySQL website linked here.
+
Dans la ligne ci-dessus, vous devrez renseigner l'utilisateur et l'hôte et/ou le domaine à partir duquel vous autoriserez l'accès de l'utilisateur au serveur SME MariaDB/MySQL (n'oubliez pas les guillemets simples). Plus d'informations peuvent être trouvées dans le manuel du serveur MariaDB/MySQL sur le site Web MariaDB/MySQL indiqué ici.
  
===Listing available databases===
+
===Liste des bases de données disponibles===
To view a list of available databases on the system you can issue the following command while logged in in MariaDB/MySQL:
+
Pour afficher une liste des bases de données disponibles sur le système, vous pouvez émettre la commande suivante lorsque vous êtes connecté à MariaDB/MySQL :
  
 
  show databases;
 
  show databases;
  
===Remove a database===
+
===Supprimer une base de données===
Get access to the SME Server shell and MariaDB/MySQL and issue the following command:
+
 
 +
Accédez au shell du serveur SME et à MariaDB/MySQL et exécutez les commandes suivantes :
  
 
  drop database databasename;
 
  drop database databasename;
  
Replace databasename with the name of the database.
+
Remplacer databasename par le nom de la base de données.
  
===Remove a user===
+
===Supprimer un utilisateur===
Get access to the SME Server shell and MariaDB/MySQL and issue the following command:
+
Accédez au shell du serveur SME et à MariaDB/MySQL et exécutez les commandes suivantes :
  
 
  USE mysql;
 
  USE mysql;
Line 213: Line 256:
 
  FLUSH PRIVILEGES;
 
  FLUSH PRIVILEGES;
  
Replace username with the username you wish to delete.
+
Replacer username par le nom d'utilisateur que vous souhaitez effacer.
 +
 
 +
{{Tip box|type=Astuce : |mysql_setpermission est un utilitaire piloté par un menu de ligne de commande qui peut aider à l'administration de MySQL.}}
  
{{Tip box|mysql_setpermission is a command line menu driven utility that can assist in MySQL administration.}}
+
== Optimisation des réglages par défaut de MariaDB/MySQL pour SME 10 ==
 +
Voici les paramètres disponibles dans la base de données de configuration pour peaufiner votre service MariaDB. Si aucune valeur par défaut n'est indiquée, veuillez consulter le manuel de la version de votre base de données pour connaître sa propre valeur par défaut :
  
== Optimizing MariaDB/MySQL default settings for SME 10 ==
 
Here are the available settings from the configuration database to tweak you MariaDB service. If no default value indicated, please refers the the manual of your database version for its own default value:
 
 
{| class="wikitable"
 
{| class="wikitable"
!key
+
!Clé
!default
+
!Par défaut
!Role
+
!Rôle
 
|-
 
|-
 
|innodb_file_format
 
|innodb_file_format
Line 322: Line 366:
  
  
to alter a value, just do
+
Pour modifier une valeur, faire seulement :
 
  config set mariadb  KeyBufferSize 18M MyisamSortBufferSize 8M
 
  config set mariadb  KeyBufferSize 18M MyisamSortBufferSize 8M
 
  expand-template /etc/my.cnf  
 
  expand-template /etc/my.cnf  
 
  systemctl restart mariadb
 
  systemctl restart mariadb
if your needed option is not available then create a dedicated template custom. '''Be careful to use a name starting with a number between 016 and 039'''.
+
Si l'option dont vous avez besoin n'est pas disponible, alors créer un modèle dédié personalisé. '''Faire attention à utiliser un nom commençant par un nombre compris entre 016 et 039'''.
 
  mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
 
  mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
 
  vim /etc/e-smith/templates-custom/etc/my.cnf/017myvalues
 
  vim /etc/e-smith/templates-custom/etc/my.cnf/017myvalues
Line 332: Line 376:
 
  systemctl restart mariadb
 
  systemctl restart mariadb
  
==Optimizing MariaDB/MySQL default settings for up to SME9==
+
==Optimisation des réglages par défaut de MariaDB/MySQL pour les versions antérieures de SME jusqu'à SME9==
 +
Le serveur SME utilise MariaDB/MySQL pour le paquet de messagerie Web, et la configuration par défaut est optimisée pour cela.
  
SME Server uses MariaDB/MySQL for the webmail package, and the default configuration is optimized for that.
+
Si vous utilisez le serveur SME pour fournir des bases de données MariaDB/MySQL pour les fonctions exécutées sur les postes de travail, vous devrez peut-être ajuster certains des paramètres MariaDB/MySQL par défaut. Gardez à l'esprit qu'il est difficile d'optimiser MySQL pour un certain nombre d'applications différentes, car les valeurs par défaut qui conviennent à une application peuvent ne pas convenir à une autre. Pour déterminer les paramètres appropriés pour MariaDB/MySQL, vous devrez également tenir compte des ressources système et des spécifications générales du serveur sur lequel MariaDB/MySQL s'exécute.
  
If you are using the SME server to provide MariaDB/MySQL databases for functions running on workstations, you may need to adjust some of the default MariaDB/MySQL parameters. Keep in mind it is difficult to optimize MYSQL for a number of different applications, as default values that are suitable for one application may not be suitable for another. In determining appropriate settings for MariaDB/MySQL, you will also need to consider the system resources & general specification of the server that MariaDB/MySQL is running on.
+
Des pointeurs pour le réglage et l'optimisation des bases de données peuvent être trouvés sur http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ et http://lists.mysql.com/mysql/214398 et spécifiquement re key_buffer_size à http://lists.mysql.com/mysql/214398.
  
Pointers for tuning and optimizing the databases can be found at http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ and http://lists.mysql.com/mysql/214398 and specifically re key_buffer_size at http://lists.mysql.com/mysql/214398
 
  
The following example comes from this forum thread http://forums.contribs.org/index.php/topic,46694.0.html and refers to this bug report http://bugs.contribs.org/show_bug.cgi?id=6287
+
L'exemple suivant provient de ce fil du forum http://forums.contribs.org/index.php/topic,46694.0.html et se réfère au rapport de ce bogue http://bugs.contribs.org/show_bug.cgi?id=6287.
  
To change the following parameters
+
Pour changer les paramètres suivants :
 
  key_buffer_size=18M
 
  key_buffer_size=18M
 
  myisam_sort_buffer_size=8M
 
  myisam_sort_buffer_size=8M
  
Create a custom template fragment & edit it to include your required parameters
+
Créer un fragment de modèle perosnalisé et éditer le pour inclure vos paramètres requis :
 
  mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
 
  mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
 
  vim  /etc/e-smith/templates-custom/etc/my.cnf/016mysetup
 
  vim  /etc/e-smith/templates-custom/etc/my.cnf/016mysetup
Save & Exit
+
Sauvegarder et sortir :
 
  Ctrl o
 
  Ctrl o
 
  Ctrl x
 
  Ctrl x
Expand the changes & restart mysql
+
Propager les changements et redémarrer mysql :
 
  expand-template /etc/my.cnf
 
  expand-template /etc/my.cnf
 
  sv t /service/mysqld
 
  sv t /service/mysqld
Check /etc/my.cnf to see that the changes are reflected.
+
Vérifier /etc/my.cnf pour voir si les changements sont effectifs.
  
 
<noinclude>
 
<noinclude>

Latest revision as of 19:27, 24 June 2023


Le serveur SME, jusqu'à la version 9.2 incluse, exécute MySQL en tant que gestionnairre de base de données.

Le serveur Koozali SME 10 utilise MariaDB pour réaliser cette fonction. De nombreuses applications nécessitent une base de données MySQL, parmi lesquelles l'interface webmail Horde qui est fournie par défaut par le serveur SME.

Généralités

Warning.png Attention :
serveur Koozali SME version 10 : MySQL est fourni par MariaDB. Vous pouvez vérifier la version de la manière habituelle, par ex. au moment de la rédaction de ce wiki, il s'agissait de la version 5.5.


Le serveur SME est fondé sur CentOS, l'équipe de développement prendra leurs paquets en stock à partir des versions de CentOS. La version actuelle de MariaDB installée sur le serveur SME est la version 5.5.68. L'interface de messagerie Web Horde s'appuie sur MariaDB. La mise à niveau vers la version 10.x peut potentiellement casser des choses comme le webmail. Si vous insistez pour mettre à niveau MariaDB, vous pourrez peut-être trouver des instructions sur le forum, mais sachez qu'aucun support ne peut être attendu des développeurs et que tous les bogues signalés dans Bugzilla ne seront pas pris en compte.

Vous pouvez également vous fier aux contributions et à la collection logicielle Red-Hat pour ajouter MySQL 5.7 et MariaDB 10.1 10.2 10.3 ou 10.5 comme service SQL secondaire pour répondre à vos besoins.

MariaDB s'exécute sur le serveur SME sur un socket (une interface de connexion) au lieu d'un port - auquel vous êtes peut-être habitué. Ceci est fait pour améliorer la sécurité car, de l'avis de l'équipe de développement, seul le serveur lui-même (localhost) doit avoir accès au serveur MySQL. Cependant, vous pouvez configurer MySQL pour qu'il soit accessible depuis le réseau local (voir ci-dessous).


Important.png Note :
tous les services MariaDB fournis par le noyau ou des contributions partagent le même fichier /etc/my.cnf comme fichier de configuration. Veuillez respecter les sections à l'intérieur du fichier lors de l'ajout d'un nouveau modèle personnalisé selon que vous souhaitez que cela soit vu par toutes les versions en cours d'exécution ou par une version spécifique. Vous pouvez vous référer au manuel de MariaDB pour plus d'informations.

Alors que MySQL prend en charge ce type de configuration, pour la rétrocompatibilité de la contribution MySQL57, nous avons conservé un fichier de configuration séparé.


[mysqld]
[mysqld_safe]
[mysql-5.7]
[mariadb-10.1]
[mariadb-10.2]
[mariadb-10.3]
[mariadb-10.5]

Accès à MariaDB/MySQL depuis mon application

Comme indiqué ci-dessus, sur SME Server, vous devez utiliser un socket (une interface de connexion), c'est plus sûr que d'utiliser un port. Par défaut, le service n'écoute que sur le serveur à l'aide d'un socket, donc essayer de se connecter avec n'importe quel port entraînera un échec.

La plupart des applications devront définir une chaîne pour accéder au socket, comme ci-dessous pointant vers localhost (pas 127.0.0.1, ni l'ip LAN) et le chemin complet vers le socket. Dans certaines situations, vous devrez définir le chemin du socket et l'hôte (localhost à nouveau et non 127.0.0.1) dans des variables.

define( 'DB_HOST', 'localhost:/var/lib/mysql/mysql.sock' );

Mot de passe root MariaDB/MySQL

Il semble qu'il n'y ait pas de mot de passe défini comme mot de passe root MySQL, mais ce n'est pas vrai. Si vous êtes connecté au shell du serveur SME, un mécanisme spécial est en place pour vous connecter avec les privilèges root de MySQL sans vous demander le mot de passe.

Le mot de passe root MySQL pour le serveur SME est une chaîne aléatoire de 72 caractères générée lors de l'installation du serveur SME. Vous ne devez jamais modifier le mot de passe root MySQL car cela casserait la configuration de votre serveur SME. Comment se connecter en tant qu'utilisateur root MySQL ? décrit comment accéder à MySQL avec les privilèges root sur le serveur SME.

Se connecter en tant qu'utilisateur root de MySQL

Pour se connecter en tant qu'utilisateur root de MySQL, saisir simplement 'mysql' sur le shell du serveur SME, ceci vous connectera avec les privilèges de root.

Réinitialiser le mot de passe root de MySQL

Pour réinitialiser le mot de passe du compte root MySQL : l'utilisateur root de MySQL sur le serveur SME a un mot de passe généré aléatoirement qui est créé lors de l'installation. Vous n'avez pas besoin de connaître ce mot de passe pour vous connecter à MySQL avec les privilèges root sur le serveur SME. Si vous avez peut-être changé le mot de passe root MySQL, vous pouvez le réinitialiser comme ci-dessous après avoir obtenu l'accès à la ligne de commande en tant qu'utilisateur root.

Pour SME 10 (noter que pour les versions SCLO (???, ndt), voir la page de la contribution correspondante) :

systemctl stop mariadb
expand-template /root/.my.cnf
expand-template /var/lib/mysql/set.password
/usr/libexec/mysqld --socket=/var/lib/mysql/mysql.sock --bootstrap --user=mysql --skip-grant-tables < /var/lib/mysql/set.password
exit
systemctl start mariadb

Pour le serveur SME 7.3 et jusqu'au serveur SME 9.2 :

cd /var/service/mysqld
sv d .
expand-template /root/.my.cnf
expand-template /var/service/mysqld/set.password
/usr/libexec/mysqld --bootstrap --user=mysql --skip-grant-tables < ./set.password
sv u .

Pour le serveur SME 7.2 et les versions précédantes, exécuter ce qui suit (on utilise la commande runsvctrl à la place de la commande sv) :

cd /var/service/mysqld
runsvctrl d .
expand-template /root/.my.cnf
expand-template /var/service/mysqld/set.password
/usr/libexec/mysqld --bootstrap --user=mysql --skip-grant-tables < ./set.password
runsvctrl u .

Restaurer un effacement accidentel du mot de passe de l'utilisateur root de MySQL

Note : ce qui suit n'est applicable que sur le serveur SME 7.3 et à MySQL 4.1.

cd /var/service/mysqld
sv d .
echo 'use mysql;'>set.rootuser
echo -n 'INSERT INTO user VALUES("localhost","root","",'>>set.rootuser
echo '"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","","","","",0,0,0);'>>set.rootuser
expand-template /root/.my.cnf
expand-template /var/service/mysqld/set.password
/usr/libexec/mysqld --bootstrap --user=mysql --skip-grant-tables < set.rootuser
/usr/libexec/mysqld --bootstrap --user=mysql --skip-grant-tables < set.password
sv u .

MariaDB/MySQL ne démarre pas

Vous devez rechercher la cause en inspectant deux journaux :

  • le journal du service
journalctl -u mariadb
  • le journal de mariadb
tail -f  /var/log/mariadb/mariadb.log

Table utilisateur corrompue

Votre erreur dans le journal mariadb inclura :

ERROR: 130  Incorrect file format 'user'

Cela peut se produire principalement après une panne de courant. La table mysql.user est un type MYSIAM.

# ll /var/lib/mysql/mysql/user.*
-rw-rw---- 1 mysql mysql 10630  3 jui 21:08 /var/lib/mysql/mysql/user.frm
-rw-rw---- 1 mysql mysql   488  3 jui 21:08 /var/lib/mysql/mysql/user.MYD
-rw-rw---- 1 mysql mysql  2048  3 jui 21:08 /var/lib/mysql/mysql/user.MYI

Dans ce cas, vous pouvez voir user.MYD ou user.MYI avec une taille de 0 octet. Si le problème est sur MYI, c'est l'index que vous devriez pouvoir reconstruire, s'il est sur le MYD, ce sont les données, vous aurez besoin d'une sauvegarde à partir de laquelle restaurer.

En tant que root, commencez par démarrer mariadb sans authentification (« grant table ») :

systemctl stop mariadb
/usr/libexec/mysqld --defaults-file=/etc/my.cnf --basedir=/usr --datadir=/var/lib/mysql --user=mysql --skip-grant-tables
Warning.png Attention :
faites attention que mariadb fonctionnera sans aucune authentification d'utilisateur, s'il est ouvert à l'extérieur de votre serveur, vous voudrez peut-être d'abord fermer cet accès et garder cette session aussi courte que possible.


Puis utiliser la ligne de commande mysql :

mysqlcheck mysql

Si une erreur s'affiche, essayer :

mysqlcheck mysql --repair

Si cela échoue, vous devez effectuer une restauration. Vous pourriez avoir un « dump » dans /home/e-smith/db/mysql/mysql.dump. En espèrant qu'il soit à jour. Je vous suggère de le copier et d'extraire simplement la partie du tableau qui vous manque. Vous avez besoin de ce qui est ci-dessous :

--
-- Table structure for table `user`
--

et

--
-- Dumping data for table `user`
--

En considerant que votre table « dump » est maintenant dans un fichier dénommé /home/e-smith/db/mysql/mysql.user.dump, faites :

mysql mysql < /home/e-smith/db/mysql/mysql.user.dump
expand-template /var/lib/mysql/set.password
mysql mysql < /var/lib/mysql/set.password
mysqladmin shutdown
systemctl start mariadb


Warning.png Attention :
la ligne de « dump » de la table mysql.user sur le serveur mariadb supprimera toutes les entrées existantes dans la table si vous utilisez le « dump » SME par défaut car il comporte une ligne DROP TABLE IF EXISTS. Ne faites donc cela que si vous savez ce que vous faites.


Accès à MariaDB/MySQL en utilisant le port de localhost et à partir du réseau local

MariaDB/MySQL sur le serveur SME fonctionne sur un socket (une interface de connexion) au lieu d'un port. MariaDB/MySQL sur le serveur SME est, par défaut, configuré pour n'autoriser que les connexions de localhost pour garantir la sécurité, ceci signifie que l'accessibilité n'est possible que du serveur lui-même et pas depuis le réseau local, ni depuis l'internet. Si vous souhaitez activer l'accès depuis le réseau local, exécutez les commandes suivantes sur un shell du serveur SME en tant que root (notez que l'accès privé n'est pas nécessaire car il s'agit de la valeur par défaut, et le port TCP 3306 non plus car tous les ports sont ouverts sur le LAN par défaut) :


Warning.png Attention :
gardez à l'esprit que par défaut MariaDB/MySQL n'utilise aucun type de cryptage à moins que vous n'ayez travaillé dessus vous-même, donc tout accès au port depuis le LAN sera en texte clair et toute personne sur le LAN sera capable d'accéder au mot de passe et à toutes les données transférées entre votre serveur et le client. Se référer au manuel de la version de votre base de données.


Pour SME 10 :

config setprop mariadb LocalNetworkingOnly no
expand-template /etc/my.cnf
sv t /service/mysqld

Pour SME 9 et avant :

config setprop mysqld LocalNetworkingOnly no
expand-template /etc/my.cnf
sv t /service/mysqld

Accès à MySQL depuis un réseau distant

Si vous souhaitez activer l'accès aux bases de données MariaDB/MySQL à partir de réseaux distants, en plus du paramètre db LocalNetworkingOnly mentionné ci-dessus, vous devrez exécuter les commandes suivantes :

Pour SME 10

config set mariadb service access public status enabled TCPPort 3306 
signal-event remoteaccess-update 
signal-event reboot

Pour SME9 et avant

config set mysqld service access public status enabled TCPPort 3306 
signal-event remoteaccess-update 
signal-event reboot

Gardez à l'esprit que cela permet à TOUT LE MONDE d'accéder à votre base de données MariaDB/MySQL, alors assurez-vous d'avoir des mots de passe forts sur TOUTES vos bases de données MariaDB/MySQL. Il serait également plus sûr d'exiger des utilisateurs externes (distants) qu'ils établissent une connexion VPN et fassent effectivement partie du réseau local. Dans ce cas, ne modifiez pas l'accès mysql au statut public à l'aide de la commande ci-dessus.


Warning.png Attention :
gardez à l'esprit que, par défaut, MariaDB/MySQL n'utilise aucun type de cryptage à moins que vous n'ayez travaillé là-dessus vous-même, donc tout accès au port depuis le WAN sera en texte clair et n'importe qui sur Internet sera capable d'accéder au mot de passe et à toutes les données transférées entre votre serveur et le client. Se référer au manuel de la version de votre base de données.


Créer un (des) utilisateur(s) MariaDB/MySQL avec accès depuis d'autres ordinateurs

Les utilisateurs de la base de données MariaDB/MySQL par défaut du serveur SME, et la plupart des exemples de bases de données du wiki, autorisent la connexion uniquement à partir de localhost.

Si vous souhaitez accéder à une base de données MariaDB/MySQL sur votre serveur SME à partir d'autres ordinateurs, vous devez non seulement effectuer les modifications de configuration décrites ci-dessus, mais également créer un utilisateur autorisé à se connecter à partir de ces systèmes (voir [http:// dev.mysql.com/doc/refman/4.1/en/connection-access.html 5.5.4. Contrôle d'accès, étape 1 : vérification de la connexion] pour plus de détails).

Autoriser les connexions à MariaDB/MySQL depuis toutes les stations de travail du LAN

En supposant que votre réseau local est 192.168.1.0, vous pouvez créer un utilisateur avec un accès MariaDB/MySQL à partir de n'importe quel poste de travail LAN (ou client VPN) en utilisant la commande ci-dessous (avec l'aimable autorisation de DarkMirage).

Information.png Astuce :
la suggestion ici est d'attribuer des privilèges en fonction du numéro IP (en utilisant un caractère générique si vous le souhaitez), la même chose peut également être faite pour les noms d'hôte. Dans certains cas, comme les adresses IP attribuées dynamiquement, cela peut être une solution plus appropriée et plus robuste.


Vous souhaitez probablement modifier :

  • le nom de la base de données (MyDB)
  • le nom de l'utilisateur (MyUser)
  • le mot de passe (MyPW) et
  • les ordinateurs autorisés (192.168.1.%)
## Dans la commande ci-dessous, \ permet de poursuivre la commande sur la ligne suivante.
   ## Soit inclure les barres obliques inverses, soit placer la commande entière sur une seule ligne :
   mysql -e "\
   create database MyDB; \
   GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER \
   ON *.* \
   TO 'MyUser'@'192.168.1.%' \
   IDENTIFIED BY 'MyPW'; \
   FLUSH PRIVILEGES;"

Conséquences pour la sécurité d'autoriser la connexion à MariaDB/MySQL à distance

Il est techniquement possible de combiner les techniques ci-dessus pour autoriser la connexion à MariaDB/MySQL à distance depuis n'importe quel hôte sur Internet (autoriser la connexion réseau, ouvrir le pare-feu, puis définir l'adresse réseau sur '%'). Ce serait une mauvaise idée.

Si vous avez des utilisateurs distants qui ont besoin d'accéder à votre ou vos bases de données MariaDB/MySQL, encouragez-les à utiliser une connexion VPN ou un tunnel SSH, ou (au minimum), limitez les hôtes de connexion autorisés à leur adresse IP Internet. En plus de cela, vous êtes encouragé(e) à appliquer une connexion cryptée au niveau de votre service MariaDB/MySQL pour éviter tout échange de texte en clair sur le LAN ou, pire, sur Internet.

Activer le moteur InnoDB

Warning.png Attention :
la version 10 de MySQL est fournie par MariaDB qui a déjà InnoDB comme moteur de base de données par défaut.


Pour activer le moteur InnoDB, exécutez les commandes suivantes :

db configuration setprop mysqld InnoDB enabled
expand-template /etc/my.cnf
sv t /service/mysqld

Pour désactiver le moteur InnoDB, exécutez les commandes suivantes :

db configuration setprop mysqld InnoDB disabled
expand-template /etc/my.cnf
sv t /service/mysqld

Administration

Des informations sur la gestion des utilisateurs peuvent être trouvées dans la section MySQL User Account Management du mysql.com/doc/refman/4.1/en/ MySQL manual, qui contient de nombreuses informations utiles, une petite section est répertoriée ici pour plus de commodité.

Créer une nouvelle base de données

  • Voir le guide pour les développeurs si vous souhaitez automatiser la création d'une base de données au sein d'un paquet

ou

  • Accédez au shell du serveur SME et exécutez les commandes suivantes :
mysqladmin create 'dbname' --default-character-set=utf8

Cela créera une base de données vide dénommée dbname.


Warning.png Attention :
l'utilisateur 'root' ne devrait pas être autorisé à accéder à la base de données en dehors de localhost. Chaque application devrait avoir sa propre base de données et son propre utilisateur pour accéder à cette base de données.


Créer un (des) utilisateur(s) MySQL

Décidez quelles autorisations vous devrez accorder à l'utilisateur sur quelle base de données. Des détails à ce sujet peuvent être trouvés dans le manuel MariaDB/MySQL disponible sur le site MariaDB/MySQL. Accédez au shell du serveur SME et exécutez les commandes suivantes pour vous connecter au serveur MySQL :

 mysql

Supposons que nous voulions créer un utilisateur qui a un accès en lecture seule sur toutes les tables de la base de données appelée 'test' :

GRANT SELECT ON test.* TO 'user'@'host' IDENTIFIED BY 'password';

Dans la ligne ci-dessus, vous devrez renseigner l'utilisateur et l'hôte et/ou le domaine à partir duquel vous autoriserez l'accès de l'utilisateur au serveur SME MariaDB/MySQL (n'oubliez pas les guillemets simples). Plus d'informations peuvent être trouvées dans le manuel du serveur MariaDB/MySQL sur le site Web MariaDB/MySQL indiqué ici.

Liste des bases de données disponibles

Pour afficher une liste des bases de données disponibles sur le système, vous pouvez émettre la commande suivante lorsque vous êtes connecté à MariaDB/MySQL :

show databases;

Supprimer une base de données

Accédez au shell du serveur SME et à MariaDB/MySQL et exécutez les commandes suivantes :

drop database databasename;

Remplacer databasename par le nom de la base de données.

Supprimer un utilisateur

Accédez au shell du serveur SME et à MariaDB/MySQL et exécutez les commandes suivantes :

USE mysql;
DELETE FROM user WHERE user = 'username';
FLUSH PRIVILEGES;

Replacer username par le nom d'utilisateur que vous souhaitez effacer.


Information.png Astuce :
mysql_setpermission est un utilitaire piloté par un menu de ligne de commande qui peut aider à l'administration de MySQL.


Optimisation des réglages par défaut de MariaDB/MySQL pour SME 10

Voici les paramètres disponibles dans la base de données de configuration pour peaufiner votre service MariaDB. Si aucune valeur par défaut n'est indiquée, veuillez consulter le manuel de la version de votre base de données pour connaître sa propre valeur par défaut :

Clé Par défaut Rôle
innodb_file_format barracuda
innodb_file_per_table 1
LocalNetworkingOnly no
OpenFilesLimit 0
MaxConnections
WaitTimeout
QueryCacheLimit
QueryCacheSize 1M
QueryCacheType 1
SortBufferSize
ReadRndBufferSize
TableOpenCache
TableOpenCacheInstances
TmpTableSize
MaxHeapTableSize
ThreadCacheSize 256
KeyBufferSize key_buffer_size
MyisamSortBufferSize myisam_sort_buffer_size
JoinBufferSize 262144
ReadBufferSize
MaxConnectErrors
ConnectTimeout 100
MaxAllowedPacket 16M
SlowQueries


Pour modifier une valeur, faire seulement :

config set mariadb  KeyBufferSize 18M MyisamSortBufferSize 8M
expand-template /etc/my.cnf 
systemctl restart mariadb

Si l'option dont vous avez besoin n'est pas disponible, alors créer un modèle dédié personalisé. Faire attention à utiliser un nom commençant par un nombre compris entre 016 et 039.

mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
vim /etc/e-smith/templates-custom/etc/my.cnf/017myvalues
expand-template /etc/my.cnf 
systemctl restart mariadb

Optimisation des réglages par défaut de MariaDB/MySQL pour les versions antérieures de SME jusqu'à SME9

Le serveur SME utilise MariaDB/MySQL pour le paquet de messagerie Web, et la configuration par défaut est optimisée pour cela.

Si vous utilisez le serveur SME pour fournir des bases de données MariaDB/MySQL pour les fonctions exécutées sur les postes de travail, vous devrez peut-être ajuster certains des paramètres MariaDB/MySQL par défaut. Gardez à l'esprit qu'il est difficile d'optimiser MySQL pour un certain nombre d'applications différentes, car les valeurs par défaut qui conviennent à une application peuvent ne pas convenir à une autre. Pour déterminer les paramètres appropriés pour MariaDB/MySQL, vous devrez également tenir compte des ressources système et des spécifications générales du serveur sur lequel MariaDB/MySQL s'exécute.

Des pointeurs pour le réglage et l'optimisation des bases de données peuvent être trouvés sur http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ et http://lists.mysql.com/mysql/214398 et spécifiquement re key_buffer_size à http://lists.mysql.com/mysql/214398.


L'exemple suivant provient de ce fil du forum http://forums.contribs.org/index.php/topic,46694.0.html et se réfère au rapport de ce bogue http://bugs.contribs.org/show_bug.cgi?id=6287.

Pour changer les paramètres suivants :

key_buffer_size=18M
myisam_sort_buffer_size=8M

Créer un fragment de modèle perosnalisé et éditer le pour inclure vos paramètres requis :

mkdir -p /etc/e-smith/templates-custom/etc/my.cnf/
vim  /etc/e-smith/templates-custom/etc/my.cnf/016mysetup

Sauvegarder et sortir :

Ctrl o
Ctrl x

Propager les changements et redémarrer mysql :

expand-template /etc/my.cnf
sv t /service/mysqld

Vérifier /etc/my.cnf pour voir si les changements sont effectifs.