La Grèce et les Cyclades : Paris - Athènes

Aujourd’hui, on part pour un voyage de quelques jours à Athènes et dans les Cyclades!

Nous avons pris un train pour rejoindre Paris la veille et Julia nous a gentiment hébergés pour la nuit, qui fut courte car il fallait être sur le pont à 3h30 du matin. Un taxi nous attend en bas de la rue à 4 heures pour rejoindre l'aéroport d'Orly Sud. Notre vol est assuré par Transavia pour un départ prévu à 6:30.

Un café allongé et un croissant étriqué plus tard, nous commençons à émerger et passons les contrôles de sécurité. Le personnel de l'aéroport est sympathique et l'organisation efficace : nous passons tous les checkpoints rapidement et n'avons que quelques minutes pour flâner dans la zone duty-free que déjà l'embarquement commence.

Départ à l'heure, arrivée à l'heure à 10h30 heure locale : il y a une heure de décalage horaire par rapport à la France. On marche jusqu'au métro. Il y en a un toutes les demi-heures donc comme on se perd en chemin, on a celui de 11h30. Ça coûte 10 euros par personne mais 18 euros si on prend un billet double pour deux voyageurs.

Le métro (ligne 3) nous emmène directement au centre ville d'Athènes. Au début, le métro part de l'aéroport et nous admirons les paysages brûlés par le soleil: une terre asséchée, des oliviers à foison et des collines rocailleuses. Ensuite, le métro devient souterrain. Cela prend environ 30 minutes pour relier le centre ville d'Athènes depuis l’aéroport.

Nous arrivons à la station Syntagma, en plein cœur de la ville. S'y trouve le Parlement. Juste devant, on voit aussi des gardes, en costume traditionnel.

La chaleur est accablante et nous avons soif, car toutes les provisions d'eau achetées avant l'embarquement sont écoulées. Nous nous mettons en branle pour trouver un petit bouge où déjeuner. Nous savourons une bière fraîche, accompagnée d'un plat de «souvlaki» pour Matt. Ce sont des brochettes de porc aux herbes, accompagnées de frites, de tomates et de tzatziki. Il se régale. Cécile se rafraîchit avec une salade grecque. Le repas est agréable et nous nous reposons un peu.

Il est temps de rejoindre notre logement. Armés de notre plan, nous marchons en direction de l'Olympeion, le temple de Zeus Olympien. Nous le longeons, traversons la ligne de tram et quelques rues plus tard, nous y sommes. Il s'agit d'un appartement spacieux, fonctionnel et agréable. Il a même un petit jardin et une terrasse sur le toit, avec vue sur l'Acropole. Parfait !

La douche et la sieste sont divines.

Nous repartons ensuite et nous promenons dans le quartier Plaka. Des petites échoppes touristiques se succèdent. L'ambiance est très bonne. Matt, venu en Grèce spécialement pour cela, a très envie de goûter ce fameux gâteau qu'il avait découvert en Crète quelques voyages plus tôt et dont il rêve chaque nuit depuis: le baklava. Nous nous attablons donc à la terrasse d'une pâtisserie et dégustons un baklava et un kataïfi.

Notre promenade se poursuit dans Plaka. Il fait très bon et à un moment, nous nous retrouvons face à l'enceinte de l'Acropole. Nous l'admirons un certain temps lorsque soudain, elle s'illumine.

Athènes et les Cyclades : arrivée à Athènes photo

Nous poursuivons notre petit tour de la ville lorsqu'au détour d'une ruelle, une petite tonnelle accueillante nous tend les bras. Nous dinons d'une salade grecque arrosée d'un verre de vin.

Nous rentrons à nos pénates athéniennes.

Alexandr Misko - We Will Rock You (Queen cover)

Ce moment étrange où tu réalises qu'il est possible de recréer le rythme de batterie de We Will Rock You sur une guitare acoustique, avec un bic.

Alexandr Misko, guitariste russe, l'a fait et appelle ça "penguitar":

Génial.

MariaDB : résoudre l'erreur 1062 (duplicate entry for key PRIMARY) lors de la réplication des bases de données

Si vous utilisez les fonctions de réplication de MySQL ou MariaDB, il peut arriver que votre slave bloque sur une instruction qui devrait avoir un identifiant unique mais que le serveur tente d'insérer deux fois.

Créer un serveur High Availability : la réplication des bases de données photo

Et quand c'est le cas, la réplication des données prend fin donc c'est un problème à corriger rapidement si vous voulez que votre système haute disponibilité perdure et soit vraiment efficace en cas de coup dur.

Identification du problème

Je me suis rendu compte du problème lorsque j'ai ajouté de nouvelles bases à répliquer : j'ai relancé la procédure d'installation, relancé les serveurs, ajouté les nouvelles positions, démarré les slaves.

On regarde le status du slave :

MariaDB [(none)]> SHOW SLAVE STATUS\G

Résultat :

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.134.23.164
                  Master_User: replicator
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000210
          Read_Master_Log_Pos: 2753885
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 103794
        Relay_Master_Log_File: mariadb-bin.000210
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 1062
                   Last_Error: Error 'Duplicate entry '56-724' for key 'PRIMARY'' on query. Default database: 'frenchy'. Query: 'INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`) VALUES (56, 724)'
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 1563407
              Relay_Log_Space: 1296874
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 1062
               Last_SQL_Error: Error 'Duplicate entry '56-724' for key 'PRIMARY'' on query. Default database: 'frenchy'. Query: 'INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`) VALUES (56, 724)'
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
1 row in set (0.00 sec)

Comme on peut le constater, plusieurs choses ne tournent pas rond et empêchent la synchronisation des données entre nos deux serveurs :

Slave_SQL_Running: No
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '56-724' for key 'PRIMARY'' on query. Default database: 'frenchy'. Query: 'INSERT INTO `wp_term_relationships` (`object_id`, `term_taxonomy_id`) VALUES (56, 724)'

Solution : un RESET sur le slave

En me documentant sur le problème, j'ai lu pas mal de choses sur le net. Certains préfèrent cacher l'erreur, au risque de perdre des données. D'autres préfèrent tout effacer pour recommencer la réplication.

Aucune de ces "solutions" ne me conviennent donc nous allons procéder autrement. Comme l'erreur n'apparaît que sur le serveur BACKUP et non sur le serveur principal, c'est sur lui que nous travaillerons.

Sur le serveur BACKUP, dans MariaDB, on arrête notre slave :

MariaDB [(none)]> STOP SLAVE;
Query OK, 0 rows affected (0.01 sec)

On flush les privilèges et donc les utilisateurs connectés :

MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

On efface les fichiers logs de notre slave. C'est comme effacer une ardoise pour repartir sur des bases saines. Cela ne supprime aucune donnée - cf le manuel sur RESET :

MariaDB [(none)]> RESET SLAVE;
Query OK, 0 rows affected (0.00 sec)

Et on redémarre notre slave :

MariaDB [(none)]> START SLAVE;
Query OK, 0 rows affected (0.00 sec)

On vérifie de nouveau le status de notre slave :

MariaDB [(none)]> SHOW SLAVE STATUS\G

Résultat :

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.134.23.164
                  Master_User: replicator
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000196
          Read_Master_Log_Pos: 77900062
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 6318821
        Relay_Master_Log_File: mariadb-bin.000192
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 6318531
              Relay_Log_Space: 344030331
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 833890
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 1
               Master_SSL_Crl:
           Master_SSL_Crlpath:
                   Using_Gtid: No
                  Gtid_IO_Pos:
      Replicate_Do_Domain_Ids:
  Replicate_Ignore_Domain_Ids:
                Parallel_Mode: conservative
1 row in set (0.00 sec)

Nous avons bien :

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

Et voilà, plus d'erreur et une réplication active dans les deux sens.

Pin It on Pinterest

Spelling error report

The following text will be sent to our editors: