Optimisation MySQL/MariaDB

Quelques notes pour l’optimisation d’un serveur MySQL/MariaDB.

Cela se passe dans le fichier /etc/mysql/mariadb.conf.d/50-server.cnf sur un serveur Ubuntu 22.04

innodb_buffer_pool_size devrait être à 80% de la RAM allouée à MySQL/MariaDB

Utiliser le script MySQLTuner disponible ici : https://github.com/major/MySQLTuner-perl

Il y a probablement beaucoup d’autres choses à faire, si vous en connaissez n’hésitez pas à laisser un commentaire (je ne suis pas DBA).

Redémarrer automatiquement Apache/MySQL avec monit

Sur un serveur web LAMP il peut arriver que la processus Apapche 2 ou MariaDB/MySQL se termine de façon anormale ou soit terminé par OOM Killer.

Pour surveiller ces processus il existe monit qui est très simple d’utilisation. Voici comment l’installer sur un Ubuntu Server 22.04 :

sudo apt install monit

Aller dans le répertoire de configuration de monit :

cd /etc/monit/conf.d/

Créer un fichier pour Apache, apache.conf contenant :

check process apache with pidfile /run/apache2/apache2.pid
    start program = "/usr/sbin/service apache2 start"
    stop program = "/usr/sbin/service apache2 stop"
    if failed host 127.0.0.1 port 80 protocol http then restart
    if 5 restarts within 5 cycles then timeout

Créer un second fichier pour MariaDB/MySQL, mysql.conf :

check process mysqld with pidfile /run/mysqld/mysqld.pid
    start program = "/usr/sbin/service mysql start"
    stop program = "/usr/sbin/service mysql stop"
    if failed host 127.0.0.1 port 3306 protocol mysql then restart
    if 5 restarts within 5 cycles then timeout

Puis redémarrer monit et vérifier que celui-ci fonctionne bien :

sudo service monit restart
sudo service monit status
● monit.service - LSB: service and resource monitoring daemon
     Loaded: loaded (/etc/init.d/monit; generated)
     Active: active (running) since Wed 2023-06-07 08:14:53 CEST; 4s ago
       Docs: man:systemd-sysv-generator(8)
    Process: 58545 ExecStart=/etc/init.d/monit start (code=exited, status=0/SUCCESS)
      Tasks: 1 (limit: 9518)
     Memory: 1.7M
        CPU: 31ms
     CGroup: /system.slice/monit.service
             └─58551 /usr/bin/monit -c /etc/monit/monitrc

Jun 07 08:14:53 ip-172-31-26-128 systemd[1]: Starting LSB: service and resource monitoring daemon...
Jun 07 08:14:53 ip-172-31-26-128 monit[58545]:  * Starting daemon monitor monit
Jun 07 08:14:53 ip-172-31-26-128 monit[58545]:    ...done.
Jun 07 08:14:53 ip-172-31-26-128 systemd[1]: Started LSB: service and resource monitoring daemon.

Et voilà, c’est en place. monit vérifie toutes les 2 minutes que les processus fonctionnent et les redémarre si besoin.

Recopier les bases données d’un serveur MySQL/MariaDB vers un autre

Voici un script Bash très simple qui permet de migrer toutes les bases de données d’un serveur MySQL/MariaDB vers un autre serveur.

Celui-ci peut servir par exemple pour migrer vers un serveur AWS RDS.

#!/bin/bash

# configuration de la machine hébergeant le serveur MySQL source
DB_HOST_PROD="srv.source.com"
# configuration de l'utilisateur MySQL et de son mot de passe
DB_USER_PROD="root"
DB_PASS_PROD="PASSWORD"

# configuration de la machine hébergeant le serveur MySQL de destination
DB_HOST_RDS="srv.dest.com"
# configuration de l'utilisateur MySQL et de son mot de passe
DB_USER_RDS="admin"
DB_PASS_RDS="PASSWORD"

# récupération de la liste des bases
DATABASES=`MYSQL_PWD=$DB_PASS_PROD mysql -h $DB_HOST_PROD -u $DB_USER_PROD -e "SHOW DATABASES;" | tr -d "| " | grep -v -e Database -e _schema -e mysql`
# boucle sur les bases pour les dumper
for DB_NAME in $DATABASES; do
    # Pour créer les bases de données
    echo "create database if not exists $DB_NAME;" | MYSQL_PWD=$DB_PASS_RDS mysql -h $DB_HOST_RDS -u $DB_USER_RDS

    now=$(date +"%T")
    echo $now $DB_NAME
    #MYSQL_PWD=$DB_PASS_PROD mysqldump -u $DB_USER_PROD --column-statistics=0 --single-transaction --skip-lock-tables $DB_NAME -h $DB_HOST_PROD | MYSQL_PWD=$DB_PASS_RDS mysql -h $DB_HOST_RDS -u $DB_USER_RDS -D $DB_NAME # en fonction de la version de MySQL/MariaDB
    MYSQL_PWD=$DB_PASS_PROD mysqldump -u $DB_USER_PROD --single-transaction --skip-lock-tables $DB_NAME -h $DB_HOST_PROD | MYSQL_PWD=$DB_PASS_RDS mysql -h $DB_HOST_RDS -u $DB_USER_RDS -D $DB_NAME
done

Migrer de Twitter vers Mastodon

Suite au rachat de Twitter par Elon Musk et à ses différentes décisions dans la gestion de ce réseau social beaucoup de personnes souhaitent passer sur le réseau social décentralisé Mastodon.

Voici donc quelques informations pour ceux qui sont perdus.

1.Choisir un serveur : Mastodon étant décentralisé il n’y pas “un seul serveur” comme pour Twitter. Le serveur du créateur de Mastodon est https://mastodon.social/ mais vous pouvez choisir parmi une multitude de serveurs. Une liste se trouve ici : https://joinmastodon.org/fr/servers

2. Créer un compte sur le serveur choisi et identifier son adresse en cliquant sur son profil. Par exemple la mienne est @brihx@mastodon.social

3. Ajoutez votre adresse Mastodon dans votre profil Twitter, cela permet aux personnes qui souhaitent migrer comme vous de pouvoir vous retrouver mais aussi aux outils qui vont suivre de vous aider pour la migration.

4. Connectez-vous sur l’outil Debirdfly https://debirdify.pruvisto.org/ et suivez les instructions. Puis recherchez les comptes que vous suivez. En bas de la page vous pourrez exporter un fichier CSV compatible avec l’import de Mastodon.

5. Importez le fichier CSV de l’étape précédente en allant dans les préférences de votre compte Mastodon puis Import et export > Import de données, type d’import : Liste d’utilisateur, Fusionner puis bouton Importer

Vous pouvez aussi importer les comptes qui vous suivent avec le même outil.

Assurer la transition avec l’outil Moa https://moa.party/ qui permet de poster d’un compte vers l’autre et inversement : Twitter <> Mastodon, comme ça pas besoin de poster 2 fois.

Au niveau des applications mobiles il y a Tusky sur Androïd et metatext sur iOS

Utilitaires macOS gratuites

Voici quelques utilitaires gratuites et/ou libres que j’utilise sur mon Mac.

Hot : pour connaitre la température et les voltages de son Mac (très utile par ces fortes chaleurs de 2022). La température est visible directement dans la barre de menu. A télécharger ici : https://github.com/macmade/Hot

Hot

Flycut : est un manager de presse papier. Cela permet de garder en mémoire un certain nombre de copier pour faire coller plus tard. Disponible dans le Mac App Store https://apps.apple.com/fr/app/flycut-clipboard-manager/id442160987?mt=12

Topgrade : pour mettre facilement son Mac à jour. Attention ça se lance en ligne de commande donc c’est un peu pour les geeks. Toutes les infos là : https://github.com/r-darwish/topgrade

Topgrade

Pourquoi mon PC n’est pas compatible avec Windows 11

Microsoft a mis un logiciel à disposition pour savoir si votre ordinateur est compatible ou non avec Windows 11 mais celui-ci ne précise pas pourquoi il n’est pas compatible quand c’est le cas.

Des développeurs ont donc mis à disposition un logiciel qui permet de connaître la ou les raisons : WhyNotWin11

https://user-images.githubusercontent.com/716581/123747880-7ded0c00-d881-11eb-9fdc-cd49a6ff74dc.png

Pour plus d’informations rendez-vous sur leur site WhyNotWin11

Passer simplement de CentOS 8 à Stream

Le support de CentOS 8 va s’arrêter fin 2021 au lieu de fin 2029 il faut donc migrer vers une autre distribution ou passer à CentOS Stream potentiellement moins stable.

Voici la procédure pour passer à CentOS Stream :

dnf upgrade
dnf install centos-release-stream
dnf swap centos-{linux,stream}-repos
dnf distro-sync

Redémarrer

Pour vérifier que cela c’est bien passé :

cat /etc/os-release

NAME="CentOS Stream"
VERSION="8"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="CentOS Stream 8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:8"
HOME_URL="https://centos.org/"
BUG_REPORT_URL="https://bugzilla.redhat.com/"
REDHAT_SUPPORT_PRODUCT="Red Hat Enterprise Linux 8"
REDHAT_SUPPORT_PRODUCT_VERSION="CentOS Stream"

En cas de problème réseau :

systemctl start NetworkManager.service
systemctl enable NetworkManager.service

Raccourcis Windows 10

Voici une liste de quelques raccourcis que j’utilise régulièrement sous Windows 10. Attention ce n’est pas une liste exhaustive.

Win + E : explorateur de fichiers
Win + M : réduire toutes les fenêtre (et afficher le bureau)
Win + Maj + S : faire une capture d’écran sur une zone
Win + L : verrouiller l’ordinateur
Win + I : ouvrir le panneau de configuration Windows
Win + ; : insérer une émoji

Photo : https://unsplash.com/@nosoylasonia

DNS alternatifs

Voici une liste de quelques serveurs DNS alternatifs :

64.6.64.6 – verisign
1.1.1.1 – cloudflare
9.9.9.9 – quad9
84.200.69.80 – dnswatch
94.247.43.254 – opennic
89.233.43.71 – censurfridns
94.130.110.185 – dnsprivacy
208.67.222.222 – opendns

Une liste plus complète et détaillée chez Sebsauvage

Photo by Thomas Jensen on Unsplash

Traefik – Docker – CentOS 8

Sous CentOS 8 le firewall (firewalld) bloque la communication entre les containers Docker. J’ai rencontré le problème en voulant faire fonctionner Traefik.

La solution est d’ajouter le “réseau” Docker en zone “trusted” dans Firewalld.

1) Créer le réseau Docker

docker network create traefik_web

2) Trouver l’interface crée avec ifconfig

ifconfig

3) Ajouter l’interface en zone trusted dans firewalld et recharger les règles

firewall-cmd --permanent --zone=trusted --change-interface=br-XXXXXXX
firewall-cmd --reload