Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente | |||
technique:adminserv:etherpad:mysql [2021/01/04 18:30] – qduchemi | technique:adminserv:etherpad:mysql [2022/05/24 20:53] (Version actuelle) – ppom | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | # Comprendre la BDD Etherpad | ||
+ | ## Se connecter à la base de données | ||
+ | |||
+ | ### Sur `pica01-test` | ||
+ | |||
+ | ``` | ||
+ | docker exec -it etherpad-db bash | ||
+ | mysql -u etherpad etherpad-lite -sN --default-character-set=utf8 -p | ||
+ | ``` | ||
+ | |||
+ | Le mot de passe est normalement `password2`, | ||
+ | |||
+ | ### Sur la prod | ||
+ | |||
+ | **À ne faire que si c'est absolument nécessaire** | ||
+ | |||
+ | #### pad.picasoft.net (`pica02`) | ||
+ | |||
+ | Mêmes étapes que précédemment, | ||
+ | |||
+ | #### week.pad.picasoft.net (`pica01`) | ||
+ | |||
+ | ``` | ||
+ | docker exec -it weekpad-db bash | ||
+ | psql -U weekpad -d weekpad | ||
+ | ``` | ||
+ | |||
+ | Sur ce conteneur, vous êtes connecté direct en tant que root, donc `psql` vous demandera pas de mot de passe | ||
+ | |||
+ | ## Structure de la BDD | ||
+ | |||
+ | La structure est hyper simple. Dans la BDD `etherpad-lite`, | ||
+ | |||
+ | ``` | ||
+ | mysql> show databases; | ||
+ | +--------------------+ | ||
+ | | Database | ||
+ | +--------------------+ | ||
+ | | etherpad-lite | ||
+ | | information_schema | | ||
+ | +--------------------+ | ||
+ | 2 rows in set (0.01 sec) | ||
+ | |||
+ | mysql> show tables; | ||
+ | +-------------------------+ | ||
+ | | Tables_in_etherpad-lite | | ||
+ | +-------------------------+ | ||
+ | | store | | ||
+ | +-------------------------+ | ||
+ | 1 row in set (0.00 sec) | ||
+ | |||
+ | mysql> describe store; | ||
+ | +-------+--------------+------+-----+---------+-------+ | ||
+ | | Field | Type | Null | Key | Default | Extra | | ||
+ | +-------+--------------+------+-----+---------+-------+ | ||
+ | | key | varchar(100) | NO | PRI | NULL | | | ||
+ | | value | longtext | ||
+ | +-------+--------------+------+-----+---------+-------+ | ||
+ | 2 rows in set (0.07 sec) | ||
+ | ``` | ||
+ | |||
+ | ## Structure des clés | ||
+ | |||
+ | Les clés concernant les pads commencent par `pad:`. Vous pouvez avoir un aperçu avec | ||
+ | ```sql | ||
+ | select s.key from store s where s.key like " | ||
+ | ``` | ||
+ | |||
+ | Le `%` désigne n' | ||
+ | |||
+ | Pour un pad nommé `monpad`, il y a _normalement_: | ||
+ | |||
+ | * une clé `pad: | ||
+ | * une ou plusieurs clés `pad: | ||
+ | |||
+ | `pad: | ||
+ | |||
+ | Si le pad vient d' | ||
+ | |||
+ | ## Comprendre le format des révisions | ||
+ | |||
+ | J'ai crée un nouveau pad sur l' | ||
+ | |||
+ | ``` | ||
+ | mysql> select s.value from store s where s.key=" | ||
+ | value | ||
+ | {" | ||
+ | ``` | ||
+ | |||
+ | Mais qu'est ce signifie `Z: | ||
+ | |||
+ | Documentation officielle: [Changeset Library](https:// | ||
+ | |||
+ | Pour comprendre que contient cette mystérieuse chaine de caractères, | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | La chaine `Z: | ||
+ | |||
+ | > Pour passer de la révision 0 à la révision 1, on agrandit le document de 1601 à 1609 caractères. On se place au début. On parcours 21 caractères qui restent inchangés. Puis on ajoute les 8 caractères suivants: " de test" | ||
+ | |||
+ | |||
+ | ## Quelques tests pour simuler une BDD corrompue | ||
+ | |||
+ | Ces tests pourraient aider à comprendre pourquoi des pads en production ne fonctionnent pas | ||
+ | |||
+ | ### Test 1: révision manquante | ||
+ | |||
+ | Sur l' | ||
+ | |||
+ | ```sql | ||
+ | mysql> select s.key from store s where s.key like " | ||
+ | pad2readonly: | ||
+ | pad:newpad2 | ||
+ | pad: | ||
+ | pad: | ||
+ | pad: | ||
+ | ``` | ||
+ | |||
+ | On vérifie que tout fonctionne bien, puis on efface la révision 1: | ||
+ | |||
+ | ```sql | ||
+ | delete from store s where s.key=" | ||
+ | ``` | ||
+ | |||
+ | On retourne sur le pad. Résultat: tout fonctionne toujours bien. On éteint puis on lance à nouveau `etherpad_app`. Résultat: le pad s' | ||
+ | |||
+ | ## Test 2: JSON corrompu | ||
+ | |||
+ | Sur l' | ||
+ | |||
+ | ```sql | ||
+ | mysql> select s.value from store s where s.key=" | ||
+ | {" | ||
+ | ``` | ||
+ | |||
+ | On va mettre à jour la valeur de cette clé avec du JSON invalide. Pour cela, on copie-colle le retour de la commande précédente sur un éditeur de texte, on remplace les `'` par `\'` puis on efface la première `{`. | ||
+ | |||
+ | On met à jour le champ: | ||
+ | |||
+ | ```sql | ||
+ | mysql> update store set value='< | ||
+ | ``` | ||
+ | |||
+ | On redémarre `etherpad-app`. Résultat: le pad semble prendre du temps à charger, mais après quelques minutes, on tombe sur un `Bad Gateway`. | ||
+ | |||
+ | Si on regarde les logs récents (`docker logs --since=" | ||
+ | |||
+ | ``` | ||
+ | [2020-03-30 23: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | ## Faire un dump manuel de la BDD | ||
+ | |||
+ | Le script nécessaire est préparé par le conteneur `db-backup` ([plus d' | ||
+ | ```bash | ||
+ | amaldona@pica02:/ | ||
+ | root@08cbba05d797:/# | ||
+ | ``` | ||
+ | |||
+ | ## Réparer la base de données suite à un incident | ||
+ | |||
+ | 2020-03-23: Les backups de la BDD Etherpad cessent de fonctionner | ||
+ | 2020-03-30: On s'en rend compte suite à [l' | ||
+ | |||
+ | ``` | ||
+ | root@08cbba05d797:/# | ||
+ | => etherpad: Backup started: 2020.03.30.140224.sql | ||
+ | mysqldump: Error 1194: Table ' | ||
+ | etherpad: Backup failed | ||
+ | ``` | ||
+ | |||
+ | On a réparé la table avec: | ||
+ | |||
+ | ```sql | ||
+ | REPAIR TABLE store; | ||
+ | ``` | ||
+ | |||
+ | https:// |