Pour en savoir plus sur la configuration des instances dupliquées externes, consultez la section À propos de la réplication externe.
Définir la configuration de l'instance dupliquée externe
Avant de commencer
Pour effectuer cette tâche, vous devez disposer d'une instance Cloud SQL et d'une instance MySQL externe répondant aux exigences relatives aux instances dupliquées externes.
Configurer l'instance principale
- Accédez à la page Instances Cloud SQL dans la console Google Cloud.
- Autorisez l'adresse IP de l'instance dupliquée externe à accéder à l'instance principale.
Pour en savoir plus sur l'activation de l'accès à une adresse IP, consultez la section Configurer l'accès pour les connexions IP.
- Enregistrez l'adresse IP publique et l'adresse IP sortante publique de l'instance principale pour une utilisation ultérieure. Vous pouvez trouver ces valeurs sur la page Présentation de l'instance.
- Cliquez sur l'icône Cloud Shell dans l'angle supérieur droit.
- Lorsque l'invite Cloud Shell s'affiche, utilisez le client MySQL intégré pour vous connecter à votre instance principale :
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- Saisissez votre mot de passe racine. L'invite mysql doit alors s'afficher.
- Créez un utilisateur spécial pour la réplication et accordez-lui des droits de réplication :
CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
- Si vous lancez une nouvelle base de données, créez la même base de données et les mêmes tables sur les instances principale et répliquée. Exemple :
CREATE DATABASE test; USE test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- Si vous disposez déjà d'une base de données sur l'instance principale, vous devez la créer sur l'instance dupliquée. Pour ce faire, exportez la base de données de l'instance principale vers un bucket Cloud Storage, puis importez-la dans l'instance dupliquée. Apprenez-en plus sur l'exportation de données de Cloud SQL vers un fichier de vidage SQL dans Cloud Storage.
Configurer l'instance dupliquée externe
Avertissement : Cette procédure écrase toutes les données hébergées dans une base de données MySQL sur l'instance dupliquée, y compris les utilisateurs et mots de passe, ainsi que les paramètres et données issus de l'instance principale.-
Sur la machine hébergeant l'instance dupliquée, chargez le fichier d'exportation que vous avez créé à partir de l'instance principale sur votre nouvelle instance externe MySQL.
Par exemple, la commande suivante charge un fichier exporté nommé
mydump.sql
:mysql --user=root --password < mydump.sql
- Identifiez l'ID de serveur associé à cette paire instance dupliquée/instance principale.
L'ID de serveur est une valeur numérique (par exemple, "3") qui doit être unique dans la configuration de l'instance dupliquée externe (chaque instance dupliquée doit posséder un ID de serveur unique).
- Ajoutez les éléments suivants au fichier d'options
my.cnf
de l'instance dupliquée :[mysqld] server-id=[SERVER_ID] gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON replicate-ignore-db=mysql binlog-format=ROW log_bin=mysql-bin expire_logs_days=1 read_only=ON
Pour en savoir plus sur les options associées à la réplication MySQL, consultez la section Options associées à la réplication et à la journalisation binaire.
- Redémarrez le processus
mysqld
pour que le fichier de configuration soit lu. - Dans un client
mysql
sur l'instance dupliquée, saisissez la commande suivante :CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER', MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
- Démarrez la duplication sur l'instance dupliquée :
START SLAVE;
Confirmez l'état de la réplication :
SHOW SLAVE STATUS\G;
Si l'état "En attente d'un événement de l'instance maître" s'affiche, la réplication fonctionne correctement.
Rétrograder l'instance principale d'une instance dupliquée externe
Lorsque vous disposez d'une instance Cloud SQL avec une instance dupliquée externe, vous pouvez inverser la configuration, ce qui entraîne les modifications suivantes :
- L'instance dupliquée externe devient la nouvelle instance principale.
- L'instance Cloud SQL devient une instance dupliquée avec accès en lecture. Elle réplique alors le serveur qui servait précédemment d'instance dupliquée externe (et qui est désormais appelé serveur de base de données source).
Pour inverser la configuration de l'instance dupliquée externe, procédez comme suit :
-
Créez une instance de représentation source.
Une fois la rétrogradation terminée, elle représentera le serveur de base de données source auprès de l'instance dupliquée Cloud SQL.
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "name": "SOURCE_REPRESENTATION_NAME", "region": "REGION", "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT" } }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
Spécifiez la région qui accueillera votre instance dupliquée Cloud SQL.
Démarrez le processus de rétrogradation.
Comme cet appel d'API vous oblige à insérer des informations sensibles, il est préférable de les fournir à cURL par le biais d'un fichier JSON plutôt que d'utiliser la ligne de commande.
Créez le fichier de données :
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "REPLICATION_USERNAME", "password": "PASSWORD", "caCertificate": "EXTERNAL_SERVER_CA", "clientCertificate": "CLIENT_CERT", "clientKey": "PRIVATE_KEY" } }, "masterInstanceName": "SOURCE_REPRESENTATION_NAME", }, }
Appelez ensuite l'API.
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @PATH_TO_DATA_FILE \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
Pour en savoir plus sur les options SSL/TLS, reportez-vous à la section Options SSL/TLS. Pour en savoir plus sur les propriétés utilisées par l'objet
replicaConfiguration
, consultez la page Duplication depuis un serveur externe.-
Attendez que l'instance dupliquée externe termine toutes les transactions en attente provenant de l'instance principale.
Une fois que l'instance dupliquée a rattrapé son retard, la commande
SHOW SLAVE STATUS
indique la valeur 0 pour le champSeconds Behind Master
. L'instance dupliquée externe et l'instance principale Cloud SQL possèdent également la même valeur pour le champExecuted_Gtid_Set
. Arrêtez la duplication sur l'instance dupliquée externe à l'aide du client
mysql
:STOP SLAVE RESET SLAVE ALL
Attendez que l'instance Cloud SQL commence la duplication depuis le serveur externe, qui est désormais un serveur de base de données source.
Vous pouvez exécuter la commande
SHOW SLAVE STATUS
sur l'instance Cloud SQL pour connaître l'état de la duplication.- Une fois que l'instance Cloud SQL réplique bien les données du serveur de base de données source, définissez l'option
read_only
du serveur suroff
et mettez à jour vos applications pour qu'elles pointent vers celui-ci.
Résoudre les problèmes
Problème | Dépannage |
---|---|
Message d'erreur : The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires . |
L'instance principale Cloud SQL dispose de sauvegardes automatiques, de journaux binaires et de la récupération à un moment précis. Elle devrait donc disposer de suffisamment de journaux pour que l'instance dupliquée puisse rattraper son retard. Toutefois, même si les journaux binaires existent, l'instance dupliquée ne sait pas sur quelle ligne commencer à lire.
Créez un fichier de dump avec les options appropriées, puis configurez l'instance répliquée externe en utilisant ce fichier.
|
Étape suivante
- Apprenez à gérer les instances dupliquées.
- Découvrez les prérequis et les bonnes pratiques qui s'appliquent à la configuration d'une instance dupliquée externe.
- Apprenez-en plus sur la réplication MySQL.
- Apprenez-en plus sur les options de réplication.
- Apprenez-en plus sur la vérification de l'état de la réplication.
- Apprenez-en plus sur la réplication depuis un serveur externe.