wiki/HowtoMySQL/Percona.md

117 lines
4.1 KiB
Markdown
Raw Normal View History

2023-04-13 17:23:07 +02:00
---
categories: databases
title: Howto Percona
...
Le guide d'installation et d'usage courant, voir [HowtoMySQL](/HowtoMySQL).
2023-04-13 17:25:19 +02:00
2023-04-13 17:23:07 +02:00
La documentation sur [Percona](https://www.percona.com/software/documentation).
2023-04-13 17:38:00 +02:00
## Contrôle intégrité d'une réplication
2023-04-13 17:38:39 +02:00
### pt-table-checksum
2023-04-13 17:38:00 +02:00
<https://www.percona.com/doc/percona-toolkit/2.1/pt-table-checksum.html>
C'est un outil de [Percona](https://www.percona.com/downloads/percona-toolkit/) intégré dans son toolkit. (Package Debian [percona-toolkit](https://packages.debian.org/search?keywords=percona-toolkit) disponible à partir de Wheezy).
L'outil vérifie l'intégrité de la réplication en effectuant des requêtes de checksum (crc32 par défaut) sur le master, puis les requêtes sont joués sur les slaves permettant de trouver des différences.
La méthode la plus simple pour l'utiliser est d'autoriser le master à se connecter au slave (authentification MySQL). Ainsi, il s'occupe lui-même de faire le nécessaire pour identifier les erreurs. Il suffira donc de lancer la commande sans argument pour qu'il identifie les incohérences. On pourra réaliser un cron avec l'argument `-q` qui ne fait remonter que les erreurs.
~~~
MAILTO=jdoe@example.com
42 9 * * 7 pt-table-checksum -q
~~~
Si on veut afficher seulement les différences on peut utiliser l'option `--replicate-check-only` exemple avec un pt-table-checksum sur une base en particulier:
~~~
# pt-table-checksum --replicate-check-only --databases foo
~~~
### pt-table-sync
Si *pt-table-checksum* vous a remonté des incohérences, vous pouvez avec cet outil les corriger. Cela va identifier les différences et les corriger avec un `REPLACE` sur le master (qui sera donc répliqué sur le slave), garantissant la cohérence des données.
Exemple :
~~~
# pt-table-sync --print --replicate percona.checksums localhost
# pt-table-sync --execute --replicate percona.checksums localhost
~~~
En cas de `Can't make changes on the master because no unique index exists`. On peut synchroniser directement les différences sur le slave depuis le master.
~~~
# pt-table-sync --execute --no-check-slave localhost slave
~~~
#### Erreur "CRC32 never needs BIT_XOR optimization at /usr/bin/pt-table-*"
Avec MariaDB 10.3 il y a un souci avec la version du paquet debian de percona-toolkit, si vous avez une erreur de "CRC32 never needs BIT_XOR optimization" il faut passer en version MD5 comme ceci :
~~~
# pt-table-checksum -q --function MD5
~~~
2023-04-13 17:23:07 +02:00
## Monitoring d'une réplication
### pt-heartbeat
Dans le paquet `perconal-toolkit` on trouvera un outil pour mesurer la latence dans la réplication d'une meilleure façon que nativement.
L'astuce consiste à insérer une valeur datée de l'heure actuelle (timestamp) sur le master et comparer le timestamp avec la date du slave.
~~~
# mysql -e "CREATE DATABASE percona;"
# mysql -e "GRANT ALL PRIVILEGES ON \`percona\`.* TO 'percona'@'%' IDENTIFIED BY 'password';"
# mysql -e "GRANT REPLICATION CLIENT ON *.* TO 'percona'@'%';"
# adduser --disabled-password percona
# vim /home/percona/.my.cnf
[client]
user = percona
password = password
# chmod 600 /home/percona/.my.cnf
# chown percona: /home/percona/.my.cnf
# pt-heartbeat --defaults-file /home/percona/.my.cnf --create-table --database percona --table heartbeat --update
~~~
Le lancer en démon :
~~~
# pt-heartbeat --defaults-file /home/percona/.my.cnf --create-table --database percona --table heartbeat --update --daemonize
~~~
Le mettre dans une unité systemd `/etc/systemd/system/pt-heartbeat.service` :
~~~
[Unit]
Description=Check slave lag.
After=network.target mysql.service
[Service]
User=percona
ExecStart=/usr/bin/pt-heartbeat --defaults-file /home/percona/.my.cnf --create-table --database percona --table heartbeat --update
Type=simple
Restart=always
[Install]
WantedBy=default.target
~~~
Consulter la latence sur le slave :
~~~
# pt-heartbeat -defaults-file /home/percona/.my.cnf --create-table --database percona --table heartbeat --check
~~~
On pourra ensuite surveiller en temps réel la latence ou écrire un cron de surveillance, voir un check Nagios.
~~~
# pt-heartbeat -defaults-file /home/percona/.my.cnf --create-table --database percona --table heartbeat --monitor
~~~