{"id":7446,"date":"2019-05-13T08:20:42","date_gmt":"2019-05-13T07:20:42","guid":{"rendered":"http:\/\/blog.capdata.fr\/?p=7446"},"modified":"2022-11-21T16:52:10","modified_gmt":"2022-11-21T15:52:10","slug":"comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/","title":{"rendered":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2)"},"content":{"rendered":"<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446&#038;title=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%282%2F2%29\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%282%2F2%29&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a><p>A peine fini de dig\u00e9rer la <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\">premi\u00e8re partie<\/a>&#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/mysqlRDS_part2.png\" alt=\"\" width=\"574\" height=\"424\" class=\"aligncenter size-full wp-image-7493\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/mysqlRDS_part2.png 574w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/mysqlRDS_part2-300x222.png 300w\" sizes=\"auto, (max-width: 574px) 100vw, 574px\" \/><br \/>\nRappel des \u00e9pisodes pr\u00e9c\u00e9dents :<br \/>\n&#8211; \u00e9pisode 1 :<a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-1-google-cloud-sql\/\"> MySQL sur Google Cloud platform<\/a>.<br \/>\n&#8211; \u00e9pisode 2 : <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-2-azure\/\">MySQL et MariaDB sur Microsoft Azure<\/a>.<br \/>\n&#8211; \u00e9pisode 3 1\/2 : <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\">MySQL et MariaDB dans Amazon RDS 1\/2<\/a><\/p>\n<p>Dans l&#8217;article pr\u00e9c\u00e9dent 1\/2 nous avions vu le contexte technique dans lequel les bases RDS \u00e9voluent, ainsi que les premiers \u00e9l\u00e9ments de d\u00e9couverte d&#8217;une instance MySQL ou MariaDB sur le cloud Amazon : limitations, connexion, configuration, etc&#8230;<\/p>\n<p>Dans cette suite et fin, nous allons poursuivre notre exploration des fonctionnalit\u00e9s et terminer par un match comparatif entre les offres Azure, GCP et RDS. <\/p>\n<h2>MySQL et MariaDB sur RDS (suite)<\/h2>\n<h3>Gestion du stockage:<\/h3>\n<p>Une fois allou\u00e9, que ce soit en GP2 ou en IO1, les caract\u00e9ristiques du stockage peuvent \u00eatre modifi\u00e9es \u00e0 chaud:<br \/>\n&#8211; Sa capacit\u00e9 peut \u00eatre augment\u00e9e (mais pas r\u00e9duite):<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--allocated-storage 30 --apply-immediately\r\n<\/pre>\n<p>&#8211; Son type peut \u00eatre modifi\u00e9:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--storage-type io1 --apply-immediately\r\n<\/pre>\n<p>&#8211; Ses IOPS provisionn\u00e9s peuvent \u00eatre modifi\u00e9s:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--storage-type io1 --allocated-storage 200 \\\r\n\t--iops 3000 --apply-immediately\r\n<\/pre>\n<p>La transition peut s&#8217;\u00e9taler sur une p\u00e9riode plus ou moins longue en fonction du type de modification, mais pendant cette p\u00e9riode transitoire, l&#8217;instance va entrer dans un mode <em>&#8216;storage optimization&#8217;<\/em> &#8230;<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-instances --db-instance-identifier my57\r\n(...)\r\n\t&quot;DBInstanceStatus&quot;: &quot;storage-optimization&quot;,\r\n(...)\r\n<\/pre>\n<p>&#8230; durant lequel elle n&#8217;accepte plus d&#8217;autre changement au niveau stockage. On ne pourra donc pas modifier une caract\u00e9ristique puis une autre dans la foul\u00e9e, il faudra bien r\u00e9fl\u00e9chir \u00e0 la s\u00e9quence des modifications \u00e0 r\u00e9aliser avant de se lancer:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--allocated-storage 40 --apply-immediately\r\nAn error occurred (InvalidParameterCombination) when calling the \r\nModifyDBInstance operation: You can't currently modify the storage \r\nof this DB instance because the previous storage change is being \r\noptimized.\r\n<\/pre>\n<p>Autre remarque,contrairement \u00e0 GCP, il n&#8217;y a pas d&#8217;auto scaling du stockage sur AWS, ce qui veut dire que des alarmes sur seuil doivent \u00eatre mises en place pour \u00e9viter un remplissage intempestif. Ces alarmes sont g\u00e9r\u00e9es par les briques de supervision Cloudwatch et SNS:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws cloudwatch put-metric-alarm --alarm-name &quot;err-low-storage&quot; \\\r\n\t--metric-name &quot;FreeStorageSpace&quot; --namespace &quot;AWS\/RDS&quot; \\\r\n\t--statistic &quot;Average&quot; --period 600 --evaluation-periods 1 \\\r\n\t--threshold 10 --unit Percent \\\r\n\t--comparison-operator &quot;LessThanOrEqualToThreshold&quot; \\\r\n\t--dimensions &quot;Name=DBInstanceIdentifier,Value=my57&quot; \\\r\n\t--alarm-actions &quot;arn:aws:sns:eu-west-3:XXXXXXXXXXX:my-sns-target&quot;\r\n<\/pre>\n<p>Nous verrons un autre exemple d&#8217;utilisation de cloudwatch et SNS un peu plus loin dans la section <em>Supervision et outils de diagnostics<\/em>. <\/p>\n<h3>Protection contre la suppression:<\/h3>\n<p>Comme sur Azure, il existe un m\u00e9canisme de protection contre la suppression d&#8217;instance activ\u00e9 par d\u00e9faut:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS13.png\" alt=\"\" width=\"778\" height=\"154\" class=\"aligncenter size-full wp-image-7438\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS13.png 778w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS13-300x59.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS13-768x152.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><br \/>\nLa propri\u00e9t\u00e9 est expos\u00e9e par <em>describe-db-instances<\/em>&#8230;<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--deletion-protection \r\n\r\n$ aws rds describe-db-instances --db-instance-identifier my57 \r\n(...) &quot;DeletionProtection&quot;: true, (...)\r\n<\/pre>\n<p>&#8230;de sorte qu&#8217;une suppression par erreur est impossible:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds delete-db-instance --db-instance-identifier my57 \\\r\n\t--skip-final-snapshot\r\nAn error occurred (InvalidParameterCombination) when calling \r\nthe DeleteDBInstance operation: Cannot delete protected DB Instance,\r\n please disable deletion protection and try again.\r\n<\/pre>\n<h3>Gestion des logs binaires:<\/h3>\n<p>Par d\u00e9faut les logs binaires au format MIXED sont activ\u00e9s, pour permettre d&#8217;assurer une restauration point-in-time en \u00e9tant coupl\u00e9s avec des snapshots au niveau stockage. En sachant que les 2 autres formats (STATEMENT, ROW) sont aussi support\u00e9s \u00e0 partir de la 5.6+. <\/p>\n<p>L\u00e0 encore un gros avantage en termes de manageabilit\u00e9, la possibilit\u00e9 offerte de d\u00e9coder les logs binaires \u00e0 distance via le client mysqlbinlog et l&#8217;option <em>&#8211;read-from-remote-server<\/em> :<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ mysqlbinlog --read-from-remote-server \\\r\n\t--host=my57.xxxxxxxxx.eu-west-3.rds.amazonaws.com \\\r\n\t--port=3306 --user=my57_user \\\r\n\t--base64-output=DECODE-ROWS --verbose --password \\\r\n\tmysql-bin-changelog.000359 \r\nEnter password: ************\r\n\/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*\/;\r\n\/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*\/;\r\nDELIMITER \/*!*\/;\r\n# at 4\r\n#190404 11:45:00 server id 556576755  end_log_pos 123 CRC32 0x27f680cd  \r\nStart: binlog v 4, server v 5.7.25-log created 190404 11:45:00\r\n(...)\r\n<\/pre>\n<p>Encore une fonctionnalit\u00e9 qui ferait presque oublier qu&#8217;on a affaire \u00e0 une instance en PaaS \ud83d\ude42<\/p>\n<p>Par contre les logs binaires utilisent de l&#8217;espace disque et donc consomment aussi quelques euros, attention donc si vous souhaitez activer le format ROW qui risque de faire exploser cette partie. Et attention aussi \u00e0 la r\u00e9tention, qui peut \u00eatre g\u00e9r\u00e9e via des proc\u00e9dures stock\u00e9es :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nmysql&gt; call mysql.rds_show_configuration() ;\r\n+------------------------+-------+------------------------------------...\r\n| name                   | value | description\t\t\t  ...\r\n+------------------------+-------+------------------------------------...\r\n| binlog retention hours | NULL  | binlog retention hours specifies th...\r\n| source delay           | 0     | source delay specifies replication...\r\n| target delay           | 0     | target delay specifies replication...\r\n+------------------------+-------+------------------------------------...\r\n\r\nmysql&gt; call mysql.rds_set_configuration(&quot;binlog retention hours&quot;, 96) ;\r\nQuery OK, 0 rows affected (0.02 sec)\r\n<\/pre>\n<p>Enfin, et hors cas de r\u00e9plication, il est aussi possible de d\u00e9sactiver les logs binaires bien que ce ne soit pas conseill\u00e9 car plus de possibilit\u00e9 de restaurer \u00e0 un point pr\u00e9cis dans le temps, <a href=\"https:\/\/forums.aws.amazon.com\/thread.jspa?threadID=45258\">en passant la valeur de backup-retention-period de l&#8217;instance \u00e0 0<\/a>.<\/p>\n<h3>Export \/ import de donn\u00e9es:<\/h3>\n<p>Pas de SELECT INTO OUTFILE, et pas pour l&#8217;instant de LOAD DATA LOCAL INFILE depuis S3 pour MySQL, alors que son petit camarade de jeu PostgreSQL lui b\u00e9n\u00e9ficie de COPY via S3 <a href=\"https:\/\/aws.amazon.com\/fr\/about-aws\/whats-new\/2019\/04\/amazon-rds-postgresql-supports-data-import-from-amazon-s3\/\">depuis le 24 avril<\/a>, \u00e7a viendra peut \u00eatre plus t\u00f4t qu&#8217;on ne le pense&#8230;<\/p>\n<p>En dehors de cela, pas trouv\u00e9 grand chose \u00e0 se mettre sous la dent pour l&#8217;export de donn\u00e9es, en dehors de mysqldump ou du bricolage via un SELECT CONCAT pour produire du CSV en sortie&#8230;<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ mysql --login-path=rds57 --batch \\\r\n--execute=&quot;SELECT CONCAT(actor_id,',\\&quot;',first_name,'\\&quot;,\\&quot;',last_name,'\\&quot;,\\&quot;', last_update,'\\&quot;') FROM sakila.actor;&quot; &gt; ~\/actor.csv\r\n<\/pre>\n<p>Pas mieux. <\/p>\n<p>Sinon l&#8217;autre alternative serait d&#8217;utiliser <a href=\"https:\/\/docs.aws.amazon.com\/data-pipeline\/index.html\">AWS Data Pipeline<\/a> mais l\u00e0 on touche \u00e0 un ETL d\u00e9di\u00e9 et potentiellement un sujet \u00e0 part enti\u00e8re, qui ferait sans doute un bon candidat pour un prochain article &#8230; en deux parties \ud83d\ude42 je n&#8217;ai donc pas creus\u00e9 le sujet plus loin que \u00e7a pour l&#8217;instant. <\/p>\n<p>Pour les volum\u00e9tries importantes, il est possible <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/MySQL.Procedural.Importing.html\">de passer par un backup physique<\/a> g\u00e9n\u00e9r\u00e9 par <a href=\"https:\/\/www.percona.com\/software\/mysql-database\/percona-xtrabackup\">Percona Xtrabackup <\/a>dont l&#8217;archive serait \u00e0 copier sur S3, et \u00e0 int\u00e9grer ensuite dans une nouvelle instance RDS en utilisant aws rds restore-db-instance-from-s3. <\/p>\n<h3>Sauvegarde et restauration:<\/h3>\n<p>Ce qui nous am\u00e8ne \u00e0 la question de sauvegarde et restauration. <\/p>\n<p>Dans le PaaS Amazon, comme dans les autres PaaS, les backups sont pris en charge automatiquement. Les logs binaires \u00e9tant activ\u00e9s par d\u00e9faut, l&#8217;ensemble fournit une solution robuste de restauration point-in-time pour peu que toutes les tables soient cr\u00e9\u00e9es en InnoDB. <\/p>\n<p>Le premier snapshot est pris \u00e0 la cr\u00e9ation de l&#8217;instance, il contient l&#8217;int\u00e9gralit\u00e9 du stockage utilis\u00e9, de sorte que les snapshots suivants se contenteront de capturer un incr\u00e9mental de l&#8217;activit\u00e9. <\/p>\n<p>La plage de sauvegarde est param\u00e9trable ainsi que la r\u00e9tention (0-35 jours, 7 jours par d\u00e9faut via la console, 1 jour via API\/aws cli):<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-instances --db-instance-identifier my57\r\n(...)&quot;PreferredBackupWindow&quot;: &quot;23:00-23:30&quot;,\r\n&quot;BackupRetentionPeriod&quot;: 7, (...)\r\n<\/pre>\n<p>Comme sur Azure, l&#8217;espace de backup sur RDS reste hors charges tant qu&#8217;il ne d\u00e9passe pas la valeur de ce qui a \u00e9t\u00e9 provisionn\u00e9 en stockage de donn\u00e9es. Par ailleurs, cet espace de backup est partag\u00e9 par toutes les instances d&#8217;un m\u00eame compte et d&#8217;une m\u00eame r\u00e9gion. Donc il faut estimer l&#8217;espace global de backup par rapport \u00e0 l&#8217;espace global provisionn\u00e9 pour toutes les instances RDS m\u00eame compte \/ m\u00eame r\u00e9gion, et pas uniquement instance par instance. <\/p>\n<p>Sur les d\u00e9ploiements Multi-AZ, le backup est effectu\u00e9 sur l&#8217;instance standby pour ne pas p\u00e9naliser les IO sur l&#8217;instance nominale. <\/p>\n<p>Autre avantage par rapport \u00e0 la concurrence, \u00e0 la suppression de l&#8217;instance, il est possible de conserver les snapshots automatiques, et\/ou d&#8217;en cr\u00e9er un suppl\u00e9mentaire avant de supprimer d\u00e9finitivement l&#8217;instance :<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds delete-db-instances --db-instance-identifier my57 \\\r\n\t--no-delete-automated-backups --no-skip-final-snapshot \\\r\n\t--final-db-snapshot-identifier &quot;my57.KEEP.bak&quot;\r\n<\/pre>\n<p>En plus des backups automatiques, des backups additionnels en plus des backups automatiques peuvent \u00eatre effectu\u00e9s (50 maximum par r\u00e9gion): <\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds create-db-snapshot --db-instance-identifier my57 \\\t\r\n\t--db-snapshot-identifier &quot;my57-20190404-1456-BAK&quot; \\\r\n\t--tags &quot;Key=DateCr,Value=20190404-1456&quot;\r\n<\/pre>\n<p>Dans le cas d&#8217;une restauration, de m\u00eame que pour les autres solutions cloud, le snapshot sera n\u00e9cessairement restaur\u00e9 <strong>sur une nouvelle instance RDS<\/strong>, le terme restauration est un peu usurp\u00e9&#8230; Il faudra donc prendre le soin de renommer l&#8217;ancienne instance avant de restaurer en r\u00e9utilisant son nom:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--new-db-instance-identifier my57old --apply-immediately\r\n<\/pre>\n<p>Il faut aussi penser qu&#8217;en changeant le nom, un certain nombre d&#8217;identifiants vont aussi changer comme l&#8217;<a href=\"https:\/\/docs.aws.amazon.com\/general\/latest\/gr\/aws-arns-and-namespaces.html\">ARN<\/a> de la ressource, et l&#8217;endpoint. Lorsque le renommage est effectu\u00e9, les applications ne pourront plus se connecter tant que la nouvelle instance n&#8217;est pas recr\u00e9\u00e9e \u00e0 partir du snapshot de l&#8217;ancienne. <\/p>\n<p>La bonne nouvelle c&#8217;est que le <em>Security Group<\/em> et le <em>Parameter Group<\/em> seront tous les deux imm\u00e9diatement r\u00e9utilisables dans la commande de restauration:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds restore-db-instance-from-db-snapshot \\\r\n\t--db-instance-identifier my57 \\\r\n\t--db-snapshot-identifier &quot;my57-20190404-1456-bak&quot; \\\r\n\t--availability-zone &quot;eu-west-3a&quot; \\\r\n\t--db-parameter-group-name &quot;my57pg&quot; \\\r\n\t--vpc-security-group-ids &quot;sg-xxxxxxxxxxxxxxxx&quot;\r\n<\/pre>\n<p>Pour la restauration point-intime, une propri\u00e9t\u00e9 accessible via <em>describe-db-instances<\/em> permet de donner l&#8217;heure la plus r\u00e9cente \u00e0 laquelle il sera possible de restaurer:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-instances --db-instance-identifier my57old\r\n(...) &quot;LatestRestorableTime&quot;: &quot;2019-04-04T13:55:00Z&quot;, (...)\r\n\r\n$ aws rds restore-db-instance-to-point-in-time \\\r\n\t--source-db-instance-identifier my57old \\\r\n\t--target-db-instance-identifier my57 \\\r\n\t--restore-time &quot;2019-04-04T13:55:00Z&quot; \\\r\n\t--db-parameter-group-name &quot;my57pg&quot; \\\r\n\t--vpc-security-group-ids &quot;sg-xxxxxxxxxxxxxxxx&quot;\r\n<\/pre>\n<p>Enfin, le snapshot peut aussi servir en r\u00e8gle g\u00e9n\u00e9rale outre restaurer des donn\u00e9es, \u00e0 d\u00e9placer une instance d&#8217;une AZ vers une autre, d&#8217;une r\u00e9gion vers une autre ou d&#8217;un compte vers un autre. <\/p>\n<h3>Fen\u00eatres de maintenance:<\/h3>\n<p>AWS effectue r\u00e9guli\u00e8rement des mises \u00e0 jour du mat\u00e9riel et des OSes qui supportent l&#8217;infrastructure de RDS. Ces maintenances peuvent n\u00e9cessiter une mise hors-ligne de l&#8217;instance, donc une indisponibilit\u00e9. <\/p>\n<p>Il est possible de choisir \u00e0 la cr\u00e9ation de l&#8217;instance la fen\u00eatre de maintenance d\u00e9sir\u00e9e&#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS14.png\" alt=\"\" width=\"716\" height=\"194\" class=\"aligncenter size-full wp-image-7439\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS14.png 716w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS14-300x81.png 300w\" sizes=\"auto, (max-width: 716px) 100vw, 716px\" \/><br \/>\n&#8230; ou de la modifier plus tard via la console, l&#8217;API ou le CLI:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--preferred-maintenance-window &quot;sun:01:00-sun:01:30&quot; \\\r\n\t--apply-immediately\r\n<\/pre>\n<p>Attention, l&#8217;heure de passage des maintenances est en heure UTC, donc gare aux surprises lors des passages en heures d&#8217;\u00e9t\u00e9 \/ hiver en France &#8230;<\/p>\n<p>Pour v\u00e9rifier si une maintenance est pr\u00e9vue:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-pending-maintenance-actions \\\r\n\t--resource-identifier &quot;arn:aws:rds:eu-west-3:xxxxxxxxxxxxx:db:my57&quot;\r\n&quot;PendingMaintenanceActionDetails&quot;: [\r\n    {\r\n        &quot;Action&quot;: &quot;system-update&quot;,\r\n        &quot;Description&quot;: &quot;Performance improvements and security updates&quot;,\r\n        &quot;CurrentApplyDate&quot;: &quot;2019-04-22T03:04:00Z&quot;,\r\n        &quot;AutoAppliedAfterDate&quot;: &quot;2019-04-26T19:41:22Z&quot;,\r\n        &quot;OptInStatus&quot;: &quot;next-maintenance&quot;\r\n    }\r\n],\r\n<\/pre>\n<p>On peut egalement choisir d&#8217;appliquer une mise \u00e0 jour en la for\u00e7ant sans attendre la prochaine fen\u00eatre de maintenance:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds apply-pending-maintenance-action \\\r\n    --resource-identifier &quot;arn:aws:rds:eu-west-3:xxxxxxxxxxxxx:db:my57&quot; \\\r\n    --apply-action system-update \\\r\n    --opt-in-type immediate\r\n<\/pre>\n<p><strong>Note sur &#8211;apply-immediately<\/strong>: certaines modifications de l&#8217;instance peuvent \u00eatre effectu\u00e9es \u00e0 chaud, mais nous conservons le choix de l&#8217;appliquer imm\u00e9diatement en utilisant <em>&#8211;apply-immediately<\/em> ou non. Lorsque l&#8217;option est omise, la modification sera appliqu\u00e9e lors de la prochaine maintenance pr\u00e9vue. Ce d\u00e9tail de l&#8217;administration des instances RDS est mis en valeur dans la console : <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS15.png\" alt=\"\" width=\"586\" height=\"301\" class=\"aligncenter size-full wp-image-7440\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS15.png 586w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS15-300x154.png 300w\" sizes=\"auto, (max-width: 586px) 100vw, 586px\" \/><\/p>\n<h3>Mises \u00e0 jour mineures \/ majeures MySQL:<\/h3>\n<p>Parmi les int\u00e9r\u00eats \u00e0 migrer dans le PaaS, figure bien entendu la prise en charge des passages de patches. Mais l\u00e0, et contrairement \u00e0 Azure ou GCP, il est possible de tout bonnement les activer ou d\u00e9sactiver via la console \u00e0 la cr\u00e9ation de l&#8217;instance ou une fois que l&#8217;instance est d\u00e9ploy\u00e9e:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS16.png\" alt=\"\" width=\"727\" height=\"124\" class=\"aligncenter size-full wp-image-7441\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS16.png 727w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS16-300x51.png 300w\" sizes=\"auto, (max-width: 727px) 100vw, 727px\" \/><\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n              --no-auto-minor-version-upgrade\r\n<\/pre>\n<p>La fen\u00eatre utilis\u00e9e pour passer ces patches mineurs sera la m\u00eame que celle d\u00e9j\u00e0 employ\u00e9e pour les maintenances AWS. <\/p>\n<p>Il sera m\u00eame possible d&#8217;automatiser une mont\u00e9e de version majeure, par exemple 5.6 vers 5.7 en combinant les options &#8211;allow-major-version-upgrade et &#8211;engine-version mais cela n&#8217;est pas tellement conseill\u00e9. A noter qu&#8217;il aura au pr\u00e9alable fallu cr\u00e9er un <em>Parameter Group<\/em> compatible avec la version cible avant de migrer, et de recopier les modifications de param\u00e8tres de l&#8217;ancien vers le nouveau en utilisant la fonctionnalit\u00e9 de comparaison de PG comme vu dans <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\">l&#8217;article 1\/2 pr\u00e9c\u00e9dent<\/a>. <\/p>\n<h3>Arr\u00eat et d\u00e9marrage:<\/h3>\n<p>Trois commandes pour g\u00e9rer l&#8217;arr\u00eat \/ red\u00e9marrage:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds stop-db-instance --db-instance-identifier my57\r\n$ aws rds start-db-instance --db-instance-identifier my57\r\n$ aws rds reboot-db-instance --db-instance-identifier my57\r\n<\/pre>\n<p>Deux petites remarques concernant l&#8217;arr\u00eat:<br \/>\n&#8211; Si l&#8217;instance est un master de r\u00e9plication, vers un ou plusieurs read replicas RDS, il ne pourra \u00eatre supprim\u00e9. Il faudra supprimer les read replicas (voir plus bas <em>R\u00e9plication<\/em>&#8230;) ou les promouvoir en instances standalone avant de pouvoir stopper l&#8217;instance source.<br \/>\n&#8211; Si l&#8217;instance reste stopp\u00e9e pendant plus de 7 jours, <strong>elle red\u00e9marrera &#8230; automatiquement au bout de 7 jours !<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS17.png\" alt=\"\" width=\"819\" height=\"519\" class=\"aligncenter size-full wp-image-7442\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS17.png 819w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS17-300x190.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS17-768x487.png 768w\" sizes=\"auto, (max-width: 819px) 100vw, 819px\" \/><\/p>\n<p>Si vous aviez en t\u00eate de couper une instance avant un d\u00e9part en cong\u00e9s tout en pensant faire des \u00e9conomies, vous risquez d&#8217;avoir des surprises \u00e0 votre retour \ud83d\ude42  <\/p>\n<p>Les options qui restent sont soit de g\u00e9n\u00e9rer un snapshot et de supprimer l&#8217;instance si elle doit \u00eatre coup\u00e9e plus de 7 jours, soit bricoler <a href=\"https:\/\/docs.aws.amazon.com\/lambda\/latest\/dg\/welcome.html\">une fonction Lambda<\/a> qui v\u00e9rifie son \u00e9tat et force un arr\u00eat toutes les heures, ou toutes les 10 minutes&#8230; <\/p>\n<h3>Supervision et outils de diagnostics:<\/h3>\n<p>Toute instance RDS \u00e0 sa cr\u00e9ation publie des m\u00e9triques de fonctionnement qui seront captur\u00e9es au niveau de l&#8217;hyperviseur et donc ne donneront qu&#8217;une vision globale de la performance. Il est possible d&#8217;augmenter le niveau de d\u00e9tail de cette supervision en activant la surveillance &#8216;am\u00e9lior\u00e9e&#8217; ou <em>enhanced monitoring<\/em>: <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS18.png\" alt=\"\" width=\"739\" height=\"294\" class=\"aligncenter size-full wp-image-7443\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS18.png 739w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS18-300x119.png 300w\" sizes=\"auto, (max-width: 739px) 100vw, 739px\" \/><\/p>\n<p>Cette surveillance &#8216;am\u00e9lior\u00e9e&#8217; donne de nouveau compteurs pris au niveau de l&#8217;instance cette fois et avec une granularit\u00e9 plus fine. Evidemment c&#8217;est une option payante qui sera factur\u00e9e sur la base \u00e0 la fois des instances concern\u00e9es et du nombre de compteurs \u00e9chantillonn\u00e9s si la valeur d\u00e9passe ce qu&#8217;autorise le free-tier (soit compteurs sampl\u00e9s toutes les 5 minutes , soit 10 compteurs sampl\u00e9s toutes les minutes&#8230;, source <a href=\"https:\/\/aws.amazon.com\/fr\/cloudwatch\/pricing\/\">ici<\/a>). <\/p>\n<p>Dans la console principale RDS, l&#8217;onglet Surveillance permet de visualiser les premiers m\u00e9triques&#8230;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS19.png\" alt=\"\" width=\"960\" height=\"199\" class=\"aligncenter size-full wp-image-7444\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS19.png 960w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS19-300x62.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS19-768x159.png 768w\" sizes=\"auto, (max-width: 960px) 100vw, 960px\" \/><\/p>\n<p>La surveillance am\u00e9lior\u00e9e peut aussi renvoyer la liste des processus actifs avec les valeurs d&#8217;utilisation CPU et m\u00e9moire sur l&#8217;h\u00f4te, mais je n&#8217;y vois que peu d&#8217;int\u00e9r\u00eat pour MySQL dans la mesure o\u00f9 le processus mysqld est multithread\u00e9, contrairement aux backends PostgreSQL:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS20-1024x214.png\" alt=\"\" width=\"1024\" height=\"180\" class=\"aligncenter size-large wp-image-7445\" \/><\/p>\n<p>Les m\u00e9triques captur\u00e9s dans le cadre d&#8217;une surveillance &#8216;am\u00e9lior\u00e9e&#8217; sont publi\u00e9s sur <a href=\"https:\/\/aws.amazon.com\/fr\/cloudwatch\/\">Cloudwatch<\/a>, la brique de supervision globale d&#8217;AWS, ils seront donc aussi accessibles ici, et conserv\u00e9s 30 jours. Cette valeur est modifiable depuis la console Cloudwatch (groupe de journaux RDSOSMetrics):<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS21.png\" alt=\"\" width=\"558\" height=\"170\" class=\"aligncenter size-full wp-image-7452\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS21.png 558w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS21-300x91.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><br \/>\nDans la partie <em>M\u00e9triques <\/em>de Cloudwatch, les graphes peuvent alors \u00eatre affich\u00e9s sur tous les compteurs disponibles:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS23.png\" alt=\"\" width=\"492\" height=\"387\" class=\"aligncenter size-full wp-image-7454\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS23.png 492w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS23-300x236.png 300w\" sizes=\"auto, (max-width: 492px) 100vw, 492px\" \/><\/p>\n<p>Dans l&#8217;exemple ci-dessous, une mont\u00e9e en charge des connexions est plafonn\u00e9e par l&#8217;\u00e9puisement des cr\u00e9dits CPU et on voit la CPU brid\u00e9e \u00e0 20% entre 09h45 et 11h15, comme d\u00e9j\u00e0 expliqu\u00e9 <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\">dans l&#8217;article 1\/2<\/a> concernant le fonctionnement des <em>Burstable Instances<\/em>:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS22-1024x386.png\" alt=\"\" width=\"1024\" height=\"386\" class=\"aligncenter size-large wp-image-7453\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS22-1024x386.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS22-300x113.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS22-768x289.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS22.png 1317w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>D\u00e9j\u00e0 la surveillance &#8216;am\u00e9lior\u00e9e&#8217; donne un certain nombre d&#8217;outils sur lequel il est possible de travailler, d&#8217;autant que cloudwatch est aussi accessible via aws cli et donc les m\u00e9triques sont exportables. Mais si on veut aller encore plus loin, l&#8217;outil <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/USER_PerfInsights.html\">Performance Insights<\/a> vient parachever le travail. <\/p>\n<p>Performance Insights est une suite qui vient compl\u00e9ter l&#8217;offre de monitoring d&#8217;AWS pour les tiers RDS (hors sous classes micro et small), en permettant de combiner:<br \/>\n&#8211; Une soixantaine <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.OS\">de compteurs OS<\/a> .<br \/>\n&#8211; Une quarantaine <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/USER_PerfInsights_Counters.html#USER_PerfInsights_Counters.MySQL\">de compteurs MySQL<\/a> issus des variables de statut ou de compteurs d\u00e9riv\u00e9s calcul\u00e9s par RDS.<br \/>\n&#8211; Une int\u00e9gration avec Performance Schema qui donne une visibilit\u00e9 sur les attentes, les statements, etc&#8230;<\/p>\n<p>Pour activer Performance Insights et Performance Schema:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \\\r\n\t--enable-performance-insights \\\r\n\t--performance-insights-retention-period 7\r\n\r\n$ aws rds modify-db-parameter-group --db-parameter-group my57pg  \\\r\n\t--parameters {&quot;ParameterName=performance_schema,ParameterValue=1,\r\n        ApplyMethod=pending-reboot&quot;\r\n{\r\n    &quot;DBParameterGroupName&quot;: &quot;my57pg&quot;\r\n}\r\n\r\n$ aws rds reboot-db-instance --db-instance-identifier my57\r\n<\/pre>\n<p>A partir de l\u00e0, on va pouvoir depuis le tableau de bord de RDS analyser les requ\u00eates tri\u00e9es par poste d&#8217;attente sachant que Performance Insights utilise la vue <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/5.7\/en\/performance-schema-statement-digests.html\">events_statements_summary_by_digest<\/a>:<\/p>\n<p><a href=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS24.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS24-1024x425.png\" alt=\"\" width=\"1024\" height=\"380\" class=\"aligncenter size-large wp-image-7455\" \/><\/a><\/p>\n<p>Enfin, il reste encore une derni\u00e8re fonction pour faire de la collecte de compteurs de performance: le collecteur <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/Appendix.MySQL.CommonDBATasks.html#Appendix.MySQL.CommonDBATasks.GoSH\">Global Status History<\/a>. <\/p>\n<p>On l&#8217;a dit les variables de status (SHOW GLOBAL STATUS) sont toutes disponibles pour \u00eatre recueillies par des outils tiers type <a href=\"https:\/\/www.percona.com\/doc\/percona-toolkit\/LATEST\/pt-mext.html\">pt-mext<\/a>. C&#8217;est le cas aussi pour GCP et Azure, mais l\u00e0 o\u00f9 AWS va encore plus loin, c&#8217;est dans l&#8217;impl\u00e9mentation d&#8217;un collecteur int\u00e9gr\u00e9 \u00e0 l&#8217;instance RDS qui s&#8217;appuie sur l&#8217;event scheduler interne de MySQL. <\/p>\n<p>Ce collecteur va aller r\u00e9cup\u00e9rer les valeurs de chaque variable de statut et stocker un diff\u00e9rentiel ou une valeur brute selon le compteur, dans une table de la base mysql : <em>rds_global_status_history<\/em>. Ce Collecteur est compl\u00e8tement &#8216;gratuit&#8217; au sens o\u00f9 on ne payera pas son utilisation. Par contre il y aura bien \u00e9videmment un co\u00fbt pour la r\u00e9tention des donn\u00e9es au niveau du stockage.<\/p>\n<p>Pour l&#8217;activer il faut d&#8217;abord activer <em>event scheduler<\/em>, et si vous \u00eates en 5.7 aussi <em>show_compatibility_56<\/em> car il s&#8217;appuie toujours sur le fait que la vue <em>global_history <\/em>soit localis\u00e9e dans information_schema (ce qui  n&#8217;est plus le cas depuis la 5.7):<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-parameter-group --db-parameter-group-name my57pg \\\r\n  --parameters &quot;ParameterName=event_scheduler,ParameterValue=ON,   \t\r\n\tParameterName=show_compatibility_56,ParameterValue=ON,   \t\r\n\tApplyMethod=immediate&quot;\r\n<\/pre>\n<p>Ensuite, un jeu de proc\u00e9dures stock\u00e9es rds% permettent de g\u00e9rer la r\u00e9tention et de d\u00e9marrer le collecteur:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nmysql&gt; call mysql.rds_set_gsh_collector(30) \\G\r\n*************************** 1. row ***************************\r\nSuccess: Collector Enabled every 30 Minutes, Scheduler is Active\r\n\r\nmysql&gt; call mysql.rds_set_gsh_rotation(1) \\G\r\n*************************** 1. row ***************************\r\nSuccess: Table Rotation Enabled every 1 Days, Scheduler is Active\r\n<\/pre>\n<p>Et il ne suffit plus que d&#8217;aller r\u00e9cup\u00e9rer les valeur sampl\u00e9es pour les grapher avec votre outil favori:<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nmysql&gt; select collection_end, variable_delta\r\n-&gt; from mysql.rds_global_status_history\r\n-&gt;  where variable_name = 'CREATED_TMP_DISK_TABLES'\r\n-&gt; and collection_end &gt;= '2019-04-15 11:40:57';\r\n+---------------------+----------------+\r\n| collection_end      | variable_delta |\r\n+---------------------+----------------+\r\n| 2019-04-15 11:40:57 |             27 |\r\n| 2019-04-15 12:10:57 |           1341 |\r\n| 2019-04-15 12:40:57 |           1449 |\r\n| 2019-04-15 13:10:57 |           1595 |\r\n+---------------------+----------------+\r\n<\/pre>\n<p>Donc si on r\u00e9sume sur le m\u00eame format que vu pr\u00e9c\u00e9demment avec GCP et Azure, en termes d&#8217;outils d&#8217;aide au diagnostic:<\/p>\n<table border=1>\n<th bgcolor=\"#AAAAFF\">Analyse de performance g\u00e9n\u00e9rale<\/th>\n<th bgcolor=\"#AAAAFF\">Disponibilit\u00e9 dans RDS<\/th>\n<tr>\n<td>PERFORMANCE_SCHEMA<\/td>\n<td>OK et interfac\u00e9 avec Performance Insights<\/td>\n<\/tr>\n<tr>\n<td>VARIABLES DE STATUT<\/td>\n<td>OK et interfac\u00e9 avec le collecteur GoSH<\/td>\n<\/tr>\n<tr>\n<td>SHOW ENGINE INNODB STATUS<\/td>\n<td>OK<\/td>\n<\/tr>\n<tr>\n<td>PARAMETRES ORIENTES PERFORMANCES<\/td>\n<td>Tous les param\u00e8tres sont disponibles.<\/td>\n<\/tr>\n<\/table>\n<p><\/p>\n<table border=1>\n<th bgcolor=\"#AAAAFF\">Analyse de requ\u00eates<\/th>\n<th bgcolor=\"#AAAAFF\">Disponibilit\u00e9 dans RDS<\/th>\n<tr>\n<td>EXPLAIN<\/td>\n<td>OK<\/td>\n<\/tr>\n<tr>\n<td>@@optimizer_switch<\/td>\n<td>M\u00eames remarques que pour GCP, BKA est \u00e0 OFF par d\u00e9faut, le param\u00e8tre n&#8217;est pas modifiable en GLOBAL<\/td>\n<\/tr>\n<tr>\n<td>SET OPTIMIZER TRACE=1<\/td>\n<td>OK (dans la session)<\/td>\n<\/tr>\n<tr>\n<td>Param\u00e8tres requ\u00eates lentes<\/td>\n<td>Tous les param\u00e8tres sont disponibles<\/td>\n<\/tr>\n<tr>\n<td>SET PROFILING=1<\/td>\n<td>OK<\/td>\n<\/tr>\n<\/table>\n<h3>Alarmes Cloudwatch<\/h3>\n<p>Avant de refermer le sujet supervision, nous pouvons aussi \u00e9voquer les <a href=\"https:\/\/docs.aws.amazon.com\/AmazonCloudWatch\/latest\/monitoring\/AlarmThatSendsEmail.html\">alarmes <\/a>cloudwatch, qui s&#8217;appuient aussi sur la brique <a href=\"https:\/\/aws.amazon.com\/fr\/sns\/\">SNS <\/a>pour la partie notification (email, SMS).<\/p>\n<p>Dans le cas d&#8217;une instance MySQL \/ MariaDB sur RDS, il peut \u00eatre int\u00e9ressant de placer des alertes sur les crit\u00e8res suivants:<br \/>\n<em>&#8211; CPUCreditBalance<br \/>\n&#8211; CPUUtilization<br \/>\n&#8211; FreeStorageSpace<br \/>\n&#8211; DatabaseConnections<\/em><\/p>\n<p>Mais dans l&#8217;absolu tous les m\u00e9triques en surveillance &#8216;am\u00e9lior\u00e9e&#8217; peuvent servir de seuil d&#8217;alerte. Par exemple si je souhaite cr\u00e9er une alerte cloudwatch sur les cr\u00e9dits CPU restants d&#8217;une de mes instances t2 ou t3, et \u00eatre notifi\u00e9 par email lorsque il ne reste plus que 10 cr\u00e9dits (soit 10 vCPUS \u00e0 100% pendant une minute):<\/p>\n<p>1) D&#8217;abord cr\u00e9er le &#8216;topic&#8217; SNS qui va porter la notification, nous en aurons besoin plus loin lors de la cr\u00e9ation de l&#8217;alerte:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws sns create-topic --name &quot;my57-topic&quot;\r\n{\r\n    &quot;TopicArn&quot;: &quot;arn:aws:sns:eu-west-3:XXXXXXXXXXXX:my57-topic&quot;\r\n}\r\n<\/pre>\n<p>2) Ensuite il faut souscrire \u00e0 ce topic, c&#8217;est \u00e0 dire s&#8217;abonner \u00e0 la notification. Il y a 2 types d&#8217;abonnements email ou SMS, mais ce dernier n&#8217;est pas encore disponible en France, nous resterons donc sur une notification par email classique:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws sns subscribe \\\r\n\t--topic-arn &quot;arn:aws:sns:eu-west-3:XXXXXXXXXXXX:my57-topic&quot; \\\r\n\t--protocol &quot;email&quot; \\\r\n\t--notification-endpoint &quot;dbaffaleuf@capdata-osmozium.com&quot;\r\n{\r\n    &quot;SubscriptionArn&quot;: &quot;pending confirmation&quot;\r\n}\r\n<\/pre>\n<p>3) La souscription au topic va envoyer une demande confirmation \u00e0 l&#8217;adresse indiqu\u00e9e, qu&#8217;il suffit de valider:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS25-2.png\" alt=\"\" width=\"874\" height=\"632\" class=\"aligncenter size-full wp-image-7458\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS25-2.png 874w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS25-2-300x217.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS25-2-768x555.png 768w\" sizes=\"auto, (max-width: 874px) 100vw, 874px\" \/><br \/>\n4) Enfin, cr\u00e9er l&#8217;alerte cloudwatch avec l&#8217;ARN du topic en r\u00e9action au d\u00e9clenchement de l&#8217;alarme:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws cloudwatch put-metric-alarm \\\r\n  --alarm-name &quot;my57creditBalance&quot; \\\r\n  --namespace &quot;AWS\/RDS&quot; --metric-name &quot;CPUCreditBalance&quot; \\\r\n  --statistic Average --period 300 --threshold 10 \\\r\n  --comparison-operator LessThanOrEqualToThreshold \\\r\n  --dimensions  &quot;Name=InstanceId,Value=my57&quot; \\\r\n  --alarm-actions &quot;arn:aws:cloudwatch:eu-west-3:XXXXXXXXXXXX:alarm:my57-topic&quot;\r\n  --evaluation-periods 1\r\n<\/pre>\n<p>Lorsqu&#8217;elle sera d\u00e9clench\u00e9e, elle sera notifi\u00e9e par mail &#8230;<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS26.png\" alt=\"\" width=\"937\" height=\"452\" class=\"aligncenter size-full wp-image-7459\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS26.png 937w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS26-300x145.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS26-768x370.png 768w\" sizes=\"auto, (max-width: 937px) 100vw, 937px\" \/><\/p>\n<p>&#8230;et indiqu\u00e9e sur le tableau de bord de cloudwatch:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS27.png\" alt=\"\" width=\"899\" height=\"506\" class=\"aligncenter size-full wp-image-7460\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS27.png 899w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS27-300x169.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS27-768x432.png 768w\" sizes=\"auto, (max-width: 899px) 100vw, 899px\" \/><\/p>\n<h3>Haute disponibilit\u00e9:<\/h3>\n<p>Si l&#8217;instance a \u00e9t\u00e9 d\u00e9ploy\u00e9e en mode Mutli-AZ comme vu dans <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\">l&#8217;article pr\u00e9c\u00e9dent<\/a>, elle dispose d&#8217;une instance standby pr\u00eate \u00e0 reprendre l&#8217;activit\u00e9 automatiquement dans plusieurs cas de figure:<br \/>\n1) une AZ enti\u00e8re est indisponible<br \/>\n2) l&#8217;instance primaire est inaccessible<br \/>\n3) le tier de l&#8217;instance primaire est modifi\u00e9<br \/>\n4) une maintenance est en cours<br \/>\n5) ou un failover manuel est effectu\u00e9 : <\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds reboot-db-instance --db-instance-identifier my57 \\\r\n\t--force-failover\r\n <\/pre>\n<p>Lors de la bascule, AWS modifie le DNS pour que la connexion pointe vers la standby. Les connexions existantes sont ferm\u00e9es et les transactions rollback\u00e9es. Le suivi des failovers peut se faire soit via notification SNS, soit describe-db-instance, soit via la publication des \u00e9v\u00e8nements AWS:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-events --source-identifier &quot;my57&quot; \\\r\n\t--source-type &quot;db-instance&quot; --event-categories &quot;failover&quot;\r\n(...) &quot;Message&quot;: &quot;Multi-AZ instance failover started. &quot;,\r\n(...) &quot;Message&quot;: &quot;Multi-AZ instance failover completed&quot;,\r\n <\/pre>\n<p>Il est aussi possible de modifier le mode de d\u00e9ploiement \u00e0 tout moment (Mono-AZ vers Multi-AZ):<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-instance --db-instance-identifier my57 \r\n\t--multi-az --apply-immediately\r\n<\/pre>\n<p>Dans ce cas, il faut toutefois noter qu&#8217;un snapshot sera ex\u00e9cut\u00e9 sur l&#8217;instance principale, copi\u00e9 dans une autre AZ et une instance standby sera d\u00e9ploy\u00e9e \u00e0 partir de ce snapshot. Les instances seront maintenues en synchronisation gr\u00e2ce \u00e0 un syst\u00e8me de r\u00e9plication synchrone au niveau du stockage, c&#8217;est pourquoi il est conseill\u00e9 de privil\u00e9gier des disques IO1 \u00e0 IOPS provisionn\u00e9s plut\u00f4t que des disques GP2 pour limiter l&#8217;impact sur les performances. <\/p>\n<h3>R\u00e9plication et read replicas:<\/h3>\n<p>3 possibilit\u00e9s pour faire de la r\u00e9plication MySQL avec RDS:<br \/>\n&#8211; Soit depuis un master externe. Le master est on-premise ou sur EC2, et le slave est une instance RDS. Sc\u00e9nario de migration avec interruption faible typiquement.<br \/>\n&#8211; Soit vers un slave externe. Le master est une instance RDS, et le slave est on-premise ou sur EC2.<br \/>\n&#8211; Soit utilisation de read replicas. <\/p>\n<p>Dans la mesure o\u00f9 la fonction de haute disponibilit\u00e9 est d\u00e9j\u00e0 assur\u00e9e par RDS, ce besoin peut \u00eatre \u00e9cart\u00e9. Rien ne vous emp\u00eache de le faire quand m\u00eame, mais je n&#8217;y vois pas un grand int\u00e9r\u00eat. R\u00e9plication logique asynchrone contre r\u00e9plication du stockage synchrone, je pense qu&#8217;il vaut mieux laisser AWS g\u00e9rer cette partie d&#8217;autant que la bascule de l&#8217;endpoint est g\u00e9r\u00e9 avec.<\/p>\n<p>RDS supporte la r\u00e9plication asynchrone classique en binlog \/ position ou en GTID (semi-synchrone non support\u00e9e), \u00e0 partir de la version 5.7.23+. Jusqu&#8217;\u00e0 5 read replicas peuvent \u00eatre cr\u00e9\u00e9s pour effectuer un scale-out en lecture:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds create-db-instance-read-replica \\\r\n\t--db-instance-identifier &quot;rr57&quot; \\\r\n\t--source-db-instance-identifier &quot;my57&quot;\r\n<\/pre>\n<p>Ensuite la r\u00e9plication peut \u00eatre suivie via <em>SHOW SLAVE STATUS<\/em>, <em>describe-db-instance<\/em> sur le slave ou via le m\u00e9trique <em>ReplicaLag <\/em>sur CloudWatch. On rappelle qu&#8217;un master ou un read replica ne peut plus \u00eatre stopp\u00e9 ensuite. Les read replicas doivent \u00eatre supprim\u00e9s avant de pouvoir stopper le master.<\/p>\n<h3>Co\u00fbts:<\/h3>\n<p>Comme chez les concurrents, il existe une <a href=\"https:\/\/calculator.s3.amazonaws.com\/index.html#s=RDS\">calculette <\/a>pour estimer les co\u00fbts d&#8217;un d\u00e9ploiement. Pour reprendre le m\u00eame dimensionnement que ceux utilis\u00e9s lors des articles pr\u00e9c\u00e9dents sur GCP et Azure:<br \/>\n&#8211; Tier db.m5.4xlarge, 16 vCPUs, 64Gb RAM, Multi-AZ, eu-west-3 (Paris)<br \/>\n&#8211; 200Gb io1 provisionn\u00e9s \u00e0 5000 IOPS.<br \/>\n&#8211; 1Tb backup<\/p>\n<p>La grosse diff\u00e9rence dans le cas de RDS est que l&#8217;on aura provisionn\u00e9 des IOPS plut\u00f4t que des Gb et cela se ressent imm\u00e9diatement sur la facture mensuelle:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS28-1024x261.png\" alt=\"\" width=\"1024\" height=\"220\" class=\"aligncenter size-large wp-image-7461\" \/><br \/>\nPr\u00e8s de 3530\u20ac par mois, et ne seront pas compt\u00e9s le r\u00e9seau, les m\u00e9triques, alertes, etc&#8230; Si on prend juste le prix des instances master et standby, on est d\u00e9j\u00e0 au dessus des autres en termes de prix. La facture peut \u00eatre r\u00e9duite en utilisant des disques GP2 mais encore une fois en Multi-AZ et en production pour un dimensionnement tel que celui-l\u00e0, ce ne sera pas trop conseill\u00e9&#8230; L&#8217;autre approche consiste \u00e0 r\u00e9server l&#8217;instance sur 1 ou 3 ans: la m\u00eame configuration co\u00fbterait 78228,95 euros en paiement all upfront contre 128590,74 euros en pay as you go sur trois ans, soit une \u00e9conomie de presque 40%. <\/p>\n<h2>GCP vs Azure vs RDS : le (re) match:<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS29-1024x593.png\" alt=\"\" width=\"1024\" height=\"480\" class=\"aligncenter size-large wp-image-7462\" \/><br \/>\nSur le tableau final, et m\u00eame s&#8217;il manque encore Aurora, si l&#8217;on cherche le meilleur compromis vis \u00e0 vis du prix, on peut se tourner vers GCP qui offre d\u00e9j\u00e0 quelques fonctionnalit\u00e9s pour les instances qui sont faiblement \u00e0 moyennement critiques. Je ne recommande pas Azure pour des questions de manageabilit\u00e9. <\/p>\n<p>Pour les instances plus critiques, avec des besoins en performances, souplesse et en outillage, clairement la solution sur AWS est la plus aboutie. Il faudra jouer avec le cost management pour tenter d&#8217;optimiser les co\u00fbts, mais du point de vue technique, si nous devions partir sur un PaaS pour une base MySQL critique, ce serait sur RDS sans l&#8217;ombre d&#8217;un doute.<\/p>\n<h2>Conclusion<\/h2>\n<p>J&#8217;esp\u00e8re que jusqu&#8217;ici cette s\u00e9rie d&#8217;articles vous permet d&#8217;y voir plus clair sur les diff\u00e9rences de fonctionnalit\u00e9s, et de mieux appr\u00e9cier les diff\u00e9rences de tarifs et ce qui conviendrait le mieux \u00e0 votre activit\u00e9. <\/p>\n<p>Pour ma part, je trouve que l&#8217;offre d&#8217;Amazon est bien plus avanc\u00e9e que les 2 autres, m\u00eame si l&#8217;addition est lourde \u00e0 la fin du mois. Encore une fois on paye pour davantage de souplesse, et force est de constater que la limite entre ce que l&#8217;on peut faire on-prem et ce qui est possible dans le PaaS ici est nettement plus mince dans le cas de RDS, \u00e0 tel point qu&#8217;on peut avoir du mal \u00e0 r\u00e9aliser parfois que c&#8217;est un service PaaS et pas une machine physique. <\/p>\n<p>Il reste encore un gros morceau avant de refermer la boite MySQL dans le PaaS, la partie sur Aurora, pour une prochaine fois !<\/p>\n<p>A bient\u00f4t pour la suite !<\/p>\n<p>David. <\/p>\n<a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-twitter nolightbox\" data-provider=\"twitter\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Twitter\" href=\"https:\/\/twitter.com\/intent\/tweet?url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446&#038;text=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"twitter\" title=\"Share on Twitter\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/twitter.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-linkedin nolightbox\" data-provider=\"linkedin\" target=\"_blank\" rel=\"nofollow\" title=\"Share on Linkedin\" href=\"https:\/\/www.linkedin.com\/shareArticle?mini=true&#038;url=https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446&#038;title=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%282%2F2%29\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px;margin-right:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"linkedin\" title=\"Share on Linkedin\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/linkedin.png\" \/><\/a><a class=\"synved-social-button synved-social-button-share synved-social-size-24 synved-social-resolution-single synved-social-provider-mail nolightbox\" data-provider=\"mail\" rel=\"nofollow\" title=\"Share by email\" href=\"mailto:?subject=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%282%2F2%29&#038;body=Article%20sur%20le%20blog%20de%20la%20Capdata%20Tech%20Team%20%3A%20:%20https%3A%2F%2Fblog.capdata.fr%2Findex.php%2Fwp-json%2Fwp%2Fv2%2Fposts%2F7446\" style=\"font-size: 0px;width:24px;height:24px;margin:0;margin-bottom:5px\"><img loading=\"lazy\" decoding=\"async\" alt=\"mail\" title=\"Share by email\" class=\"synved-share-image synved-social-image synved-social-image-share\" width=\"24\" height=\"24\" style=\"display: inline;width:24px;height:24px;margin: 0;padding: 0;border: none;box-shadow: none\" src=\"https:\/\/blog.capdata.fr\/wp-content\/plugins\/social-media-feather\/synved-social\/image\/social\/regular\/48x48\/mail.png\" \/><\/a>","protected":false},"excerpt":{"rendered":"<p>A peine fini de dig\u00e9rer la premi\u00e8re partie&#8230; Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. &#8211; \u00e9pisode 3 1\/2 : MySQL et MariaDB&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7493,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[295,4],"tags":[297,316,317],"class_list":["post-7446","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","category-mysql","tag-cloud","tag-comparatif","tag-mariadb"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v20.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"A peine fini de dig\u00e9rer la premi\u00e8re partie&#8230; Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. &#8211; \u00e9pisode 3 1\/2 : MySQL et MariaDB&hellip; Continuer la lecture &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-13T07:20:42+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T15:52:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/mysqlRDS_part2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"574\" \/>\n\t<meta property=\"og:image:height\" content=\"424\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"David Baffaleuf\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"David Baffaleuf\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2)\",\"datePublished\":\"2019-05-13T07:20:42+00:00\",\"dateModified\":\"2022-11-21T15:52:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\"},\"wordCount\":4511,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"cloud\",\"comparatif\",\"mariaDB\"],\"articleSection\":[\"AWS\",\"MySQL\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\",\"name\":\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2019-05-13T07:20:42+00:00\",\"dateModified\":\"2022-11-21T15:52:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/blog.capdata.fr\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.capdata.fr\/#website\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"name\":\"Capdata TECH BLOG\",\"description\":\"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting\",\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.capdata.fr\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.capdata.fr\/#organization\",\"name\":\"Capdata TECH BLOG\",\"url\":\"https:\/\/blog.capdata.fr\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"contentUrl\":\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp\",\"width\":800,\"height\":254,\"caption\":\"Capdata TECH BLOG\"},\"image\":{\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\",\"name\":\"David Baffaleuf\",\"sameAs\":[\"http:\/\/www.capdata.fr\"],\"url\":\"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG","og_description":"A peine fini de dig\u00e9rer la premi\u00e8re partie&#8230; Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. &#8211; \u00e9pisode 3 1\/2 : MySQL et MariaDB&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2019-05-13T07:20:42+00:00","article_modified_time":"2022-11-21T15:52:10+00:00","og_image":[{"width":574,"height":424,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/mysqlRDS_part2.png","type":"image\/png"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"22 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2)","datePublished":"2019-05-13T07:20:42+00:00","dateModified":"2022-11-21T15:52:10+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/"},"wordCount":4511,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["cloud","comparatif","mariaDB"],"articleSection":["AWS","MySQL"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/","url":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/","name":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2) - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2019-05-13T07:20:42+00:00","dateModified":"2022-11-21T15:52:10+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-2-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/blog.capdata.fr\/"},{"@type":"ListItem","position":2,"name":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (2\/2)"}]},{"@type":"WebSite","@id":"https:\/\/blog.capdata.fr\/#website","url":"https:\/\/blog.capdata.fr\/","name":"Capdata TECH BLOG","description":"Le blog technique sur les bases de donn\u00e9es de CAP DATA Consulting","publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.capdata.fr\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/blog.capdata.fr\/#organization","name":"Capdata TECH BLOG","url":"https:\/\/blog.capdata.fr\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/","url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","contentUrl":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2023\/01\/logo_capdata.webp","width":800,"height":254,"caption":"Capdata TECH BLOG"},"image":{"@id":"https:\/\/blog.capdata.fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.linkedin.com\/company\/cap-data-consulting\/mycompany\/"]},{"@type":"Person","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf","name":"David Baffaleuf","sameAs":["http:\/\/www.capdata.fr"],"url":"https:\/\/blog.capdata.fr\/index.php\/author\/dbaffaleuf\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7446","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/comments?post=7446"}],"version-history":[{"count":8,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7446\/revisions"}],"predecessor-version":[{"id":9509,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7446\/revisions\/9509"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7493"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=7446"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=7446"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=7446"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}