{"id":7013,"date":"2019-05-07T11:43:25","date_gmt":"2019-05-07T10:43:25","guid":{"rendered":"http:\/\/blog.capdata.fr\/?p=7013"},"modified":"2022-11-21T16:51:32","modified_gmt":"2022-11-21T15:51:32","slug":"comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2","status":"publish","type":"post","link":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/","title":{"rendered":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/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%2F7013&#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%2F7013&#038;title=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%281%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%281%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%2F7013\" 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>Rappel 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>. <\/p>\n<p>Bon alors l\u00e0 \u00e7a devient compliqu\u00e9. Volet 1\/2 de l&#8217;\u00e9pisode 3 \u00e7a commence \u00e0 ressembler au code civil cette affaire&#8230;<\/p>\n<p>Il faut r\u00e9aliser \u00e0 quel point l&#8217;offre PaaS d&#8217;Amazon est nettement plus avanc\u00e9e que les autres : \u00e0 th\u00e8me \u00e9gal (limitations, connectivit\u00e9, configuration, performance, MCO, haute dispo, r\u00e9plication, co\u00fbts, etc&#8230;) il y a &#8211; <strong>beaucoup <\/strong>&#8211; plus de choses \u00e0 dire sur RDS. Et si on veut que cela reste lisible, il faut d\u00e9couper en deux parties. <\/p>\n<p>Quand je repense qu&#8217;au d\u00e9part il ne devait y avoir que 3 \u00e9pisodes avec MySQL et Aurora dans le m\u00eame article, j&#8217;\u00e9tais optimiste&#8230; Il y aura donc encore un \u00e9pisode 4 en deux articles au moins juste pour parler d&#8217;Aurora. <\/p>\n<p>Bref dans cet \u00e9pisode 3 partie 1\/2, nous allons d\u00e9couvrir le contexte technique dans lequel une base RDS peut \u00e9voluer : r\u00e9gions, AZ, tiers, stockage, etc&#8230; Ce que je vais dire ici s&#8217;applique aussi aux autres bases de donn\u00e9es dans RDS, c&#8217;est d&#8217;ailleurs un atout important pour Amazon, l&#8217;homog\u00e9n\u00e9it\u00e9 des fonctions et des m\u00e9thodes, de sorte que l&#8217;on s&#8217;y retrouve en passant d&#8217;un SGBD \u00e0 un autre. <\/p>\n<p>On entrera un peu dans le sujet MySQL sur les questions initiales de limitations, d\u00e9ploiement, configuration, acc\u00e8s aux logs, etc&#8230; Puis nous verrons la suite et le comparatif final dans le volet 2\/2. <\/p>\n<p>1\/2, clap, c&#8217;est parti.<\/p>\n<h2>AWS Global<\/h2>\n<p>D\u00e9j\u00e0 quelques \u00e9l\u00e9ments de contexte. RDS est une des principales briques historiques du cloud d&#8217;Amazon avec S3 et EC2. Ce cloud s&#8217;appuie sur une infrastructure d\u00e9ploy\u00e9e sur 4 et bient\u00f4t 5 continents. Rien qu&#8217;en Europe nous avons 5 r\u00e9gions ou pays dans lesquels des infrastructures sont d\u00e9ploy\u00e9es: Irlande, Londres, Francfort, Stockholm et Paris. Milan sera la 6i\u00e8me r\u00e9gion d\u00e9ploy\u00e9e. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/04\/RDS1-1024x580.png\" alt=\"\" width=\"1024\" height=\"480\" class=\"aligncenter size-large wp-image-7418\" \/><\/p>\n<h3>Mono-AZ , Multi-AZ:<\/h3>\n<p>Chaque r\u00e9gion compte 3 zones de disponibilit\u00e9 ou AZ, et si vous avez suivi les \u00e9pisodes pr\u00e9c\u00e9dents rien n&#8217;est vraiment diff\u00e9rent de GCP ou Azure. Une AZ peut \u00eatre vue comme un datacenter mettant \u00e0 disposition des ressources de calcul, stockage, d&#8217;interconnexion r\u00e9seau, ainsi que des briques applicatives. Dans le monde AWS, on parle de <em>Mono-AZ <\/em>ou de <em>Multi-AZ<\/em> pour \u00e9voquer le niveau de distribution d&#8217;une brique comme RDS:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/04\/RDS2-1024x432.png\" alt=\"\" width=\"1024\" height=\"400\" class=\"aligncenter size-large wp-image-7421\" \/><\/p>\n<p>En mode Mono-AZ \u00e0 gauche sur le sch\u00e9ma, notre instance RDS serait isol\u00e9e dans une seule AZ. Les \u00e9quipements confin\u00e9s \u00e0 l&#8217;AZ sont redond\u00e9s comme les hyperviseurs, le stockage, etc&#8230; mais il n&#8217;y a pas de secours en cas de perte de l&#8217;AZ compl\u00e8te. A droite en revanche, une instance en d\u00e9ploiement Multi-AZ est secourue par une seconde instance de standby dans une autre zone de disponibilit\u00e9, l&#8217;\u00e9quivalent du failover replica sur GCP, et donc sans \u00e9quivalence sur Azure. <\/p>\n<p>Le mode de d\u00e9ploiement est choisi lors de la cr\u00e9ation de l&#8217;instance mais peut aussi \u00eatre modifi\u00e9 plus tard. Evidemment Multi-AZ signifie aussi surco\u00fbt, nous verrons ces aspects un peu plus loin. <\/p>\n<h3>Les modes de facturation:<\/h3>\n<p>Deux modes disponibles:<br \/>\n&#8211; Le <strong>Pay-as-you-go<\/strong> : paiement \u00e0 la seconde d&#8217;utilisation <a href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2019\/04\/aws-rds-per-second-billing\/\">depuis peu<\/a>, le tarif par instance varie en fonction de sa classe, de son d\u00e9ploiement dans la r\u00e9gion (Mono vs multi-AZ) et du stockage employ\u00e9.<br \/>\n&#8211; La <strong>r\u00e9servation d&#8217;instances<\/strong> : engagement sur 1 ou 3 ans avec paiement tout en avance (<em>all upfront<\/em>) ou partiellement en avance (<em>partial upfront<\/em>). Attention seul le prix de l&#8217;instance est payable en avance, les autres co\u00fbts (stockage, IOPS provisionn\u00e9s, backup, support) restent des co\u00fbts mensuels. <\/p>\n<p>Si on compare le co\u00fbt d&#8217;une instance de type db.m5.xlarge sur 1 an en pay-as-you-go ou en r\u00e9servation:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS1.png\" alt=\"\" width=\"643\" height=\"395\" class=\"aligncenter size-full wp-image-7423\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS1.png 643w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS1-300x184.png 300w\" sizes=\"auto, (max-width: 643px) 100vw, 643px\" \/><\/p>\n<p>On voit que l&#8217;\u00e9conomie est d\u00e9j\u00e0 substantielle par rapport au prix de l&#8217;instance:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS2.png\" alt=\"\" width=\"623\" height=\"397\" class=\"aligncenter size-full wp-image-7424\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS2.png 623w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS2-300x191.png 300w\" sizes=\"auto, (max-width: 623px) 100vw, 623px\" \/><\/p>\n<p>Sur les plus grosses configurations et sur un engagement de 3 ans, l&#8217;\u00e9conomie peut \u00eatre encore plus importante (50K$ sur 3 ans pour une instance de type db.r5.4xlarge \u00e0 5000$ par mois en pay-as-you-go). Cela va donc d\u00e9pendre des capacit\u00e9s de financement et des objectifs \u00e0 moyen terme. Mais c&#8217;est d\u00e9j\u00e0 une premi\u00e8re avance sur les concurrents qui n&#8217;offrent pas de capacit\u00e9 de r\u00e9servation sur toute leur gamme de bases en mode PaaS. <\/p>\n<h3>Les tiers disponibles pour RDS:<\/h3>\n<p>Deux grandes classes de tiers sont disponibles:<br \/>\n&#8211; La classe <strong>Standard<\/strong>: db.m5 pour les configurations standard, et db.t2 et db.t3 pour les petites configurations (hors prod, test, etc&#8230;). On note que ces instances t2 et t3 sont de type &#8216;Burstable&#8217;, on va voir un peu plus loin de quoi il s&#8217;agit&#8230;<br \/>\n&#8211; La classe <strong>Memory Optimized<\/strong>: db.r4 et db.r5 pour aller jusqu&#8217;\u00e0 96vCPUs et 768Gb de m\u00e9moire. Il existe d&#8217;autres tiers db.x1 et db.x1e en Memory Optimized mais ils ne sont pas disponibles dans toutes les r\u00e9gions, et notamment pas encore en France. <\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS3-1024x429.png\" alt=\"\" width=\"1024\" height=\"429\" class=\"aligncenter size-large wp-image-7425\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS3-1024x429.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS3-300x126.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS3-768x322.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS3.png 1265w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>La tarification \u00e9tant susceptible de changer, il vaut mieux se r\u00e9f\u00e9rer \u00e0 la <a href=\"https:\/\/aws.amazon.com\/fr\/rds\/mysql\/pricing\/\">source officielle<\/a> pour un pricing pr\u00e9cis.<\/p>\n<h3>Le stockage disponible pour RDS:<\/h3>\n<p>Le stockage utilisable sur RDS est bas\u00e9 sur la brique EBS : Elastic Block Storage, qui est l&#8217;autre grosse brique stockage d&#8217;Amazon avec S3. Si S3 est orient\u00e9e fichiers, EBS est un peu comme un block storage sous st\u00e9roides : encryption, snapshots, r\u00e9plication intra-AZ, scalabilit\u00e9 en capacit\u00e9 et en IOPS provisionn\u00e9s&#8230; <\/p>\n<p><strong>2 types de stockage seront disponibles :<\/strong><\/p>\n<p>&#8211; <strong>General Purpose ou GP2<\/strong>: c&#8217;est un stockage SSD classique pour lequel on provisionne une capacit\u00e9 pour obtenir des IOPS, comme cela se fait chez GCP ou Azure. <\/p>\n<p>Le syst\u00e8me est calibr\u00e9 pour donner 3 IOPS\/Gb avec un plafond \u00e0 16000 IOPS atteint \u00e0 5Tb. La diff\u00e9rence est que pour des volumes inf\u00e9rieurs \u00e0 1Tb (aire &#8216;A&#8217; sur le sch\u00e9ma ci-dessous), le syst\u00e8me peut solliciter des pics au del\u00e0 de ses 3 IOPS \/Gb en utilisant des <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/CHAP_Storage.html\">cr\u00e9dits d&#8217;IOPS<\/a>. Tant que le syst\u00e8me est idle, il accumule des cr\u00e9dits d&#8217;IOPS qui lui permettent ensuite de pouvoir effectuer des pics \u00e0 3000 IOPS jusqu&#8217;\u00e0 \u00e9puisement de ses cr\u00e9dits:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS4.png\" alt=\"\" width=\"987\" height=\"481\" class=\"aligncenter size-full wp-image-7426\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS4.png 987w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS4-300x146.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS4-768x374.png 768w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/p>\n<p>Au del\u00e0  de 1Tb, les IOPS sont fixes de 3000 jusqu&#8217;\u00e0 16000 en fonction de la volum\u00e9trie. <\/p>\n<p>&#8211; Le deuxi\u00e8me type de stockage est <strong>Provisionned SSD ou IO1<\/strong> : aussi bas\u00e9 sur des disques SSD, plus performants, mais surtout dans ce cas, on ne provisionne plus une capacit\u00e9 disque mais un nombre d&#8217;IOPS. Ce qui veut dire que l&#8217;on peut provisionner seulement 200Gb de disque tout en garantissant 5000 IOPS par exemple. C\u00f4t\u00e9 Amazon, cela signifie que notre petite LUN de 200Gb doit \u00eatre probablement stripp\u00e9e sur plusieurs disques, ce qui revient suppos\u00e9ment assez cher et complexe \u00e0 maintenir pour Amazon, et donc le prix sur la facture est aussi non n\u00e9gligeable. <\/p>\n<p>Evidemment on ne va pas pouvoir allouer 50 Gb et demander 10000 IOPS non plus, il y a donc des r\u00e8gles de capacit\u00e9 minimale en fonction des IOPS provisionn\u00e9s:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS5-1024x437.png\" alt=\"\" width=\"1024\" height=\"437\" class=\"aligncenter size-large wp-image-7427\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS5-1024x437.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS5-300x128.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS5-768x328.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS5.png 1129w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Par exemple, si on veut 5000 IOPS on ne pourra pas descendre sous les 100Gb de capacit\u00e9 (pour tout de m\u00eame 330$ par mois). <\/p>\n<h3>Burstable instances:<\/h3>\n<p>On en a un peu parl\u00e9, les tiers de type t2 et t3 sont de type <em>burstable<\/em>. Comme pour les disques gp2 sous 1Tb, les instances <em>burstable <\/em> ont la possibilit\u00e9 d&#8217;accumuler des cr\u00e9dits CPU pour pouvoir d\u00e9passer leur capacit\u00e9 CPU th\u00e9orique momentan\u00e9ment lors de pics de charge. <\/p>\n<p>En fonction du dimensionnement du tier, il est \u00e9tabli une CPU baseline (par exemple 16.9% pour un t2.2xlarge, ou 30% pour une t3.large) au dessous de laquelle la machine va accumuler des cr\u00e9dits CPU. En gros un cr\u00e9dit CPU revient \u00e0 pouvoir monter \u00e0 100% sur un CPU pendant 1 minute. Lorsqu&#8217;elle a passe au dessus de sa CPU baseline, la machine va commencer \u00e0 d\u00e9penser ses cr\u00e9dits jusqu&#8217;\u00e0 \u00e9puisement de ceux-ci, auquel cas elle sera brid\u00e9e \u00e0 20% jusqu&#8217;\u00e0 recapitaliser de nouveaux cr\u00e9dits. Le but de la manoeuvre \u00e9tant de permettre \u00e0 une machine de faible dimensionnement de pouvoir d\u00e9passer sa capacit\u00e9 CPU sans pour autant saturer la CPU pour les autres tiers mutualis\u00e9s sur la m\u00eame infrastructure physique. <\/p>\n<p>Par exemple:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS6-1024x541.png\" alt=\"\" width=\"1024\" height=\"480\" class=\"aligncenter size-large wp-image-7430\" \/><\/p>\n<p>Dans ce cas de figure la CPU baseline est \u00e0 30% (en bleu), et on distingue 4 phases:<br \/>\n&#8211; Une premi\u00e8re phase o\u00f9 la charge reste sous 30% et les cr\u00e9dits sont accumul\u00e9s.<br \/>\n&#8211; Une deuxi\u00e8me phase o\u00f9 la charge passe au dessus des 30% et les cr\u00e9dits sont peu \u00e0 peu d\u00e9pens\u00e9s.<br \/>\n&#8211; Une troisi\u00e8me phase o\u00f9 les cr\u00e9dits sont \u00e9puis\u00e9s, et la charge CPU sera brid\u00e9e \u00e0 20%.<br \/>\n&#8211; Et enfin une quatri\u00e8me o\u00f9 la charge retombe et les cr\u00e9dits peuvent \u00eatre cumul\u00e9s \u00e0 nouveau. <\/p>\n<p>Vous l&#8217;aurez compris, une burstable instance utilise ses cr\u00e9dits au besoin et au fil de l&#8217;eau. Mais elle peut aussi obtenir d&#8217;AWS une &#8216;avance&#8217; sur ses cr\u00e9dits, et la possibilit\u00e9 de pouvoir les d\u00e9penser imm\u00e9diatement sans avoir besoin d&#8217;attendre de les cumuler. Ce mode est appel\u00e9 <em>unlimited<\/em>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS7-1024x544.png\" alt=\"\" width=\"1024\" height=\"544\" class=\"aligncenter size-large wp-image-7431\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS7-1024x544.png 1024w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS7-300x159.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS7-768x408.png 768w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS7.png 1308w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/p>\n<p>Dans cet exemple, l&#8217;instance obtient la totalit\u00e9 de ses 288 cr\u00e9dits imm\u00e9diatement et peut les d\u00e9penser jusqu&#8217;\u00e0 \u00e9puisement. En revanche, lorsqu&#8217;ils sont \u00e9puis\u00e9s, la machine sera plafonn\u00e9e \u00e0 20% CPU jusqu&#8217;au lendemain. <\/p>\n<p>Maintenant que l&#8217;on a pos\u00e9 le d\u00e9cor, on va pouvoir commencer \u00e0 parler vraiment de MySQL sur RDS. <\/p>\n<h2>MySQL et MariaDB sur RDS<\/h2>\n<p>En r\u00e9alit\u00e9 RDS n&#8217;est qu&#8217;une facette du PaaS bases de donn\u00e9es sur AWS, dans la mesure o\u00f9 il regroupe simplement les bases de donn\u00e9es dites relationnelles. Mais il existe aussi d&#8217;autres solutions non relationnelles (DynamoDB, DocumentDB), p\u00e9riph\u00e9riques (Elasticache) ou orient\u00e9es gros volumes (Neptune, Redshift) pour compl\u00e9ter l&#8217;offre. <\/p>\n<p>On retrouvera donc dans RDS les bases de donn\u00e9es que l&#8217;on conna\u00eet d\u00e9j\u00e0, plus le moteur maison, Aurora, que l&#8217;on verra dans un prochain \u00e9pisode:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/02\/AWS_1.png\" alt=\"\" width=\"729\" height=\"258\" class=\"aligncenter size-full wp-image-7091\" \/><\/p>\n<p>A noter qu&#8217;AWS est la seule plateforme en dehors d&#8217;Oracle Cloud \u00e0 proposer du PaaS sur Oracle, et supporte <a href=\"https:\/\/aws.amazon.com\/about-aws\/whats-new\/2018\/11\/amazon-rds-for-oracle-now-support-new-version-of-oracle-databases\/?nc1=h_ls\">depuis peu<\/a> la 12.2&#8230; <\/p>\n<h3>Support et limitations:<\/h3>\n<p>&#8211; Pour les versions \u00e0 ce jour, RDS supporte de MySQL 5.5.46 \u00e0 8.0.15 , et MariaDB de 10.0.24 \u00e0 10.3.13. C&#8217;est le seul PaaS \u00e0 supporter MySQL 8.0, <a href=\"https:\/\/aws.amazon.com\/fr\/about-aws\/whats-new\/2018\/10\/amazon-rds-now-supports-mysql-8\/\">depuis le 23 octobre dernier<\/a>.<br \/>\n&#8211; Sur le plan des storage engines, il est annonc\u00e9 le support de InnoDB et MyISAM, avec toutefois les r\u00e9serves de rigueur quant \u00e0 la garantie de restaurabilit\u00e9 point-in-time lorsque les tables sont en MyISAM ou que les moteurs sont mix\u00e9s. Federated n&#8217;est pas support\u00e9.<br \/>\n&#8211; Memcached et le plugin d&#8217;audit MariaDB sont disponibles via les options groups que nous allons d\u00e9tailler plus loin.<br \/>\n&#8211; Support GTIDs \u00e0 partir de la 5.7.23+<br \/>\n&#8211; Support du pr\u00e9chargement du buffer pool innodb \u00e0 partir de la version 5.6.<br \/>\n&#8211; Pas de privil\u00e8ge SUPER, comme pour les autres PaaS MySQL, mais la plupart des commandes son disponibles via des proc\u00e9dures stock\u00e9es dans la base mysql : rds_% (KILL, KILL QUERY, CHANGE MASTER TO, RESET MASTER, START SLAVE, etc&#8230;)<br \/>\n&#8211; Pas de support de <a href=\"https:\/\/blog.capdata.fr\/index.php\/nouveautes-mysql-8-0-variables-persistes\/\">SET PERSIST<\/a> en 8.0 pour l&#8217;instant, le param\u00e9trage passe par des Parameter Groups que l&#8217;on va aussi voir en d\u00e9tail plus loin&#8230;<br \/>\n&#8211; Pas de support pour la r\u00e9plication semi-synchrone. <\/p>\n<h3>Connectivit\u00e9:<\/h3>\n<p>Lors de la cr\u00e9ation de l&#8217;instance, il ne sera \u00e9videmment pas propos\u00e9 par d\u00e9faut d&#8217;associer l&#8217;endpoint \u00e0 une IP publique :<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS8.png\" alt=\"\" width=\"497\" height=\"153\" class=\"aligncenter size-full wp-image-7433\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS8.png 497w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS8-300x92.png 300w\" sizes=\"auto, (max-width: 497px) 100vw, 497px\" \/><\/p>\n<p>Un VPC d\u00e9di\u00e9 sera cr\u00e9\u00e9 avec tout ce qui va avec (<a href=\"https:\/\/docs.aws.amazon.com\/vpc\/latest\/userguide\/vpc-network-acls.html\">NACL<\/a>, <a href=\"https:\/\/docs.aws.amazon.com\/vpc\/latest\/userguide\/VPC_SecurityGroups.html\">Security Group<\/a>), la bonne pratique \u00e9tant de placer l&#8217;instance sur un subnet priv\u00e9 et de g\u00e9rer les ouvertures via le Security Group et \u00e9ventuellement une <a href=\"https:\/\/docs.aws.amazon.com\/fr_fr\/vpc\/latest\/userguide\/vpc-nat-gateway.html\">NAT Gateway<\/a>, et les filtrages avec le Network ACL. <\/p>\n<p>Ensuite la connexion \u00e0 l&#8217;instance peut se faire de 2 mani\u00e8res :<br \/>\n&#8211; Soit en utilisant un client classique (mysql ou GUI) depuis un bastion ou une autre machine on-prem \/ EC2. Par exemple ici en pr\u00e9configurant un <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/mysql-config-editor.html\">login-path<\/a> vers une instance RDS 5.7:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ mysql_config_editor set --login-path=my57fromlocalPC \\ \r\n--host=my57.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com --port=3306 \\\r\n--user=my57_user --password\r\nEnter password: ************\r\n$ mysql --login-path=my57fromlocalPC --execute=&quot;select version();&quot;\r\n+------------+\r\n| version()  |\r\n+------------+\r\n| 5.7.25-log |\r\n+------------+\r\n<\/pre>\n<p>&#8211; Soit en utilisant l&#8217;authentification via le compte IAM utilisateur. Dans ce cas, une demande de token pr\u00e9alable permettra de se connecter sans fournir de mot de passe. Le token est valable 15 minutes, ensuite il devra \u00eatre renouvel\u00e9. <\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ TOKEN=&quot;$(aws rds generate-db-auth-token \\\r\n--hostname my57.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com \\\r\n--port=3306 --region eu-west-3 --username my57_user)&quot;\r\n\r\n$ mysql --host=my57.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com --port=3306 \\\r\n--user=my57_user --ssl-ca=~\/rds-combined-ca-bundle.pem \\\r\n--ssl-mode=VERIFY_IDENTITY --enable-cleartext-plugin --password=${TOKEN} \\\r\n--execute=&quot;select version();&quot;\r\n+------------+\r\n| version()  |\r\n+------------+\r\n| 5.7.25-log |\r\n+------------+\r\n<\/pre>\n<h3>AWS cli:<\/h3>\n<p>Comme chez les concurrents, AWS propose en plus de la console un utilitaire CLI de management des ressources, l&#8217;aws cli. Il est bas\u00e9 sur Python, peut s&#8217;installer sur Windows ou Linux, et il est directement pr\u00e9packag\u00e9 sur les AMI Amazon Linux. Toutes les briques principales sont accessibles avec une syntaxe type par service (service = { s3, ec2, rds, cloudwatch, lambda, etc&#8230;} ):<\/p>\n<p><em>aws [service] [fonction] [parametres &#8230;]<\/em><\/p>\n<p>Par exemple obtenir les caract\u00e9ristiques d&#8217;une instance RDS:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-instances --db-instance-identifier my57\r\n{\r\n    &quot;DBInstances&quot;: [\r\n        {\r\n            &quot;DBInstanceIdentifier&quot;: &quot;my57&quot;,\r\n            &quot;DBInstanceClass&quot;: &quot;db.t2.micro&quot;,\r\n            &quot;Engine&quot;: &quot;mysql&quot;,\r\n            &quot;DBInstanceStatus&quot;: &quot;available&quot;,\r\n            &quot;MasterUsername&quot;: &quot;my57_user&quot;,\r\n            &quot;DBName&quot;: &quot;mysql_user&quot;,\r\n            &quot;Endpoint&quot;: {\r\n                &quot;Address&quot;: &quot;my57.xxxxxxxxxxx.eu-west-3.rds.amazonaws.com&quot;,\r\n                &quot;Port&quot;: 3306,\r\n                &quot;HostedZoneId&quot;: &quot;ZMESEXB7ZGGQ3&quot;\r\n(...)\r\n<\/pre>\n<p>Tout ce que nous allons voir par la suite sera port\u00e9 par aws cli. Il est important de bien comprendre sa syntaxe et sa grammaire, car c&#8217;est un outil indispensable \u00e0 tout bon devops aws qui se respecte&#8230; <\/p>\n<h3>Security groups:<\/h3>\n<p>On l&#8217;a dit un peu plus haut, lors de la cr\u00e9ation de l&#8217;instance, l&#8217;assistant proposera de cr\u00e9er un nouveau VPC et donc un nouveau security group. Juste pour information, un security group va jouer le r\u00f4le du firewall et permettre d&#8217;ouvrir les ports n\u00e9cessaires \u00e0 la connexion vers l&#8217;instance RDS. L&#8217;avantage dans le cas d&#8217;AWS est qu&#8217;il est d\u00e9tach\u00e9 du reste de l&#8217;instance, de sorte que si l&#8217;instance est supprim\u00e9e ou restaur\u00e9e \u00e0 partir d&#8217;un snapshot, les informations de filtrage r\u00e9seau peuvent \u00eatre r\u00e9utilis\u00e9es. Il est m\u00eame possible de pr\u00e9parer un groupe de s\u00e9curit\u00e9 avant m\u00eame de cr\u00e9er l&#8217;instance et le rattacher \u00e0 la cr\u00e9ation:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS9.png\" alt=\"\" width=\"916\" height=\"152\" class=\"aligncenter size-full wp-image-7434\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS9.png 916w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS9-300x50.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS9-768x127.png 768w\" sizes=\"auto, (max-width: 916px) 100vw, 916px\" \/><br \/>\nPar d\u00e9faut, chaque r\u00e8gle ajout\u00e9e dans un groupe de s\u00e9curit\u00e9 l&#8217;est dans les 2 sens: inbound et outbound. Donc on ouvrira seulement le port MySQL (3306 par d\u00e9faut) soit sur l&#8217;IP publique soit sur la NAT gateway pour permettre un acc\u00e8s depuis l&#8217;ext\u00e9rieur. <\/p>\n<h3>Parameter Groups:<\/h3>\n<p>Que des bonnes nouvelles : d\u00e9j\u00e0 tous les param\u00e8tres MySQL ou MariaDB sont accessibles sur RDS. <\/p>\n<p>Ensuite, les param\u00e8tres de configuration sont g\u00e9r\u00e9s via des <em>parameter groups<\/em> (PG). Comme le Security Group, le PG est un conteneur ind\u00e9pendant de l&#8217;instance et peut m\u00eame s&#8217;appliquer \u00e0 plusieurs instances RDS. Avec le m\u00eame b\u00e9n\u00e9fice, lorsque l&#8217;on supprime ou que l&#8217;on restaure une instance, le PG est imm\u00e9diatement r\u00e9utilisable. <\/p>\n<p>A chaque instance est associ\u00e9 un PG par d\u00e9faut, qui peut \u00eatre modifi\u00e9, mais la bonne pratique reste de cr\u00e9er un PG customis\u00e9 en dupliquant le PG par d\u00e9faut. Comme pour les Security Groups, un custom PG peut m\u00eame \u00eatre cr\u00e9\u00e9 avant de cr\u00e9er l&#8217;instance RDS et \u00eatre pr\u00e9cis\u00e9 lors de sa cr\u00e9ation:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/rds10.png\" alt=\"\" width=\"544\" height=\"111\" class=\"aligncenter size-full wp-image-7435\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/rds10.png 544w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/rds10-300x61.png 300w\" sizes=\"auto, (max-width: 544px) 100vw, 544px\" \/><br \/>\nUn des int\u00e9r\u00eats est aussi de pouvoir assurer une forme d&#8217;homog\u00e9n\u00e9it\u00e9 du param\u00e9trage sur une flotte d&#8217;instances. A travers la console, il est par exemple possible de comparer le contenu de 2 PG pour voir s&#8217;il existe des diff\u00e9rences:<br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS11.png\" alt=\"\" width=\"631\" height=\"123\" class=\"aligncenter size-full wp-image-7436\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS11.png 631w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS11-300x58.png 300w\" sizes=\"auto, (max-width: 631px) 100vw, 631px\" \/><\/p>\n<p>Une des premi\u00e8res actions \u00e0 effectuer post ou pr\u00e9-cr\u00e9ation selon le cas sera donc de dupliquer le PG par d\u00e9faut et de cr\u00e9er un PG customis\u00e9 pour pouvoir ensuite l&#8217;appliquer \u00e0 l&#8217;instance. Ci-dessous, le PG par d\u00e9faut pour MYSQL 5.7 est dupliqu\u00e9 pour cr\u00e9er un PG customis\u00e9 baptis\u00e9 &#8220;my57PG&#8221;, puis le nouveau PG est rattach\u00e9 \u00e0 l&#8217;instance RDS (on peut utiliser au choix <em>create-db-parameter-group<\/em> \u00e0 partir d&#8217;un mod\u00e8le ou <em>copy-db-parameter-group<\/em>)<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds create-db-parameter-group \\\r\n\t--db-parameter-group-name my57PG \\\r\n\t--db-parameter-group-family mysql5.7 \\\r\n\t--description &quot;My Private 5.7 PG&quot;\r\n\r\n$ aws rds modify-db-instance \\\r\n\t--db-instance-identifier my57 \\\r\n\t--db-parameter-group-name my57PG\r\n<\/pre>\n<p>Le rattachement d&#8217;un PG \u00e0 une instance n\u00e9cessite un red\u00e9marrage de celle-ci. On peut ensuite v\u00e9rifier via la fonction g\u00e9n\u00e9rale <em>aws rds describe-db-instance<\/em> que le nouveau groupe de param\u00e8tres est bien actif:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds reboot-db-instance --db-instance-identifier my57\r\n$ aws rds describe-db-instances --db-instance-identifier my57\r\n(...)\t&quot;DBParameterGroupName&quot;: &quot;my57pg&quot;,\r\n\t&quot;ParameterApplyStatus&quot;: &quot;in-sync&quot;\r\n<\/pre>\n<p>Comme dans le cas d&#8217;une instance on-prem, certains param\u00e8tres seront dynamiques et d&#8217;autres seront statiques et n\u00e9cessiteront un red\u00e9marrage de l&#8217;instance pour \u00eatre effectifs : <\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-parameters \\ \r\n\t--db-parameter-group-name my57PG \\\r\n\t--query &quot;Parameters[*][ParameterName,ParameterValue,ApplyType]&quot; \\\r\n\t--output text\r\nallow-suspicious-udfs\t\tNone    static\r\nautocommit\t\t\tNone    dynamic\r\nauto_generate_certs\t\tNone    static\r\nauto_increment_increment\tNone    dynamic\r\nauto_increment_offset\t\tNone    dynamic\r\n(...)\r\n<\/pre>\n<p>Sans privil\u00e8ge SUPER, il ne sera pas possible d&#8217;appliquer un param\u00e8tre via SET GLOBAL. La fonction <em>aws rds modify-db-parameter-group<\/em> permettra donc de pallier \u00e0 ce probl\u00e8me :<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds modify-db-parameter-group  \\\r\n\t--db-parameter-group-name my57PG \\\r\n\t--parameters &quot;ParameterName=max_connections, ParameterValue=200,ApplyMethod=immediate&quot;\r\n<\/pre>\n<p>Si le param\u00e8tre est dynamique comme c&#8217;est le cas ici, il est imm\u00e9diatement pris en compte au niveau de l&#8217;instance :<\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\n$ mysql --login-path=my57fromlocalPC --execute=&quot;select @@max_connections;&quot;\r\n+--------------------+\r\n| @@max_connections  |\r\n+--------------------+\r\n|                200 |\r\n+--------------------+\r\n<\/pre>\n<h3>Acc\u00e8s aux journaux:<\/h3>\n<p>Trois types de journaux sont disponibles pour MySQL<br \/>\n&#8211; Le log d&#8217;erreur.<br \/>\n&#8211; Le log g\u00e9n\u00e9ral<br \/>\n&#8211; Le log de requ\u00eates lentes. <\/p>\n<p>Par d\u00e9faut, seul l&#8217;acc\u00e8s au log d&#8217;erreur est configur\u00e9. Les autres peuvent \u00eatre activ\u00e9 via leurs param\u00e8tres respectifs (general_log, slow_query_log + long_query_time). La liste des journaux disponibles peut \u00eatre obtenue et chaque journal peut \u00eatre t\u00e9l\u00e9charg\u00e9 pour \u00eatre inspect\u00e9 localement:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-log-files --db-instance-identifier my57\r\n(...) {\r\n            &quot;LogFileName&quot;: &quot;error\/mysql-error.log&quot;,\r\n            &quot;LastWritten&quot;: 1554363300000,\r\n            &quot;Size&quot;: 0\r\n        }, (...)\r\n\r\n$ aws rds download-db-log-file-portion --db-instance-identifier my57 \\\r\n\t--starting-token 0 --output text \\\r\n\t--log-file-name &quot;error\/mysql-error.log&quot;\r\n2019-04-01T15:23:12.123344Z 0 [Note] Giving 1 client threads a chance to die gracefully\r\n2019-04-01T15:23:12.124334Z 0 [Note] Shutting down slave threads\r\n2019-04-01T15:23:14.124539Z 0 [Note] Forcefully disconnecting 0 remaining clients (...)\r\n<\/pre>\n<p>Par d\u00e9faut, un \u00e9quivalant de FLUSH LOGS est effectu\u00e9 toutes les 5 minutes sur les fichiers. Si la destination pour le log g\u00e9n\u00e9ral ou le log de requ\u00eates lentes est une table, alors les tables peuvent \u00eatre recycl\u00e9es manuellement en utilisant les proc\u00e9dures stock\u00e9es <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/mysql_rds_rotate_general_log.html\">mysql.rds_rotate_general_log<\/a> et <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/mysql_rds_rotate_slow_log.html\">mysql.rds_rotate_slow_log<\/a>. <\/p>\n<pre class=\"brush: sql; title: ; notranslate\" title=\"\">\r\nmysql&gt; call mysql.rds_rotate_slow_log ;\r\nQuery OK, 0 rows affected (0.03 sec)\r\n<\/pre>\n<p>La r\u00e9tention quant \u00e0 elle peut se g\u00e9rer via la console, dommage qu&#8217;on ne puisse pas le faire via aws cli ou une proc\u00e9dure stock\u00e9e:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS12.png\" alt=\"\" width=\"888\" height=\"215\" class=\"aligncenter size-full wp-image-7437\" srcset=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS12.png 888w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS12-300x73.png 300w, https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/05\/RDS12-768x186.png 768w\" sizes=\"auto, (max-width: 888px) 100vw, 888px\" \/><\/p>\n<h3>Option groups:<\/h3>\n<p>Il est aussi possible d&#8217;activer des fonctionnalit\u00e9s externes pour les instances RDS MySQL et MariaDB, comme <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/Appendix.MySQL.Options.AuditPlugin.html\">le plugin d&#8217;audit de MariaDB<\/a> ou le <a href=\"https:\/\/docs.aws.amazon.com\/AmazonRDS\/latest\/UserGuide\/Appendix.MySQL.Options.memcached.html\">support de memcached<\/a>. Ces fonctionnalit\u00e9s seront int\u00e9gr\u00e9es sous la forme d&#8217;<em>options groups<\/em>. <\/p>\n<p>Par exemple pour activer l&#8217;audit MariaDB:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds create-option-group --option-group-name &quot;mariadbaudit&quot; \\\r\n\t--engine-name mysql --major-engine-version 5.7 \\\r\n\t--option-group-description &quot;test MariaDB audit plugin&quot;\r\n\r\n$ aws rds add-option-to-option-group --option-group-name &quot;mariadbaudit&quot; \\\r\n\t--options &quot;OptionName=MARIADB_AUDIT_PLUGIN&quot; \\\r\n\t--apply-immediately\r\n\r\n$ aws rds modify-db-instance --db-instance-identifier &quot;my57&quot; \\ \r\n\t--option-group-name &quot;mariadbaudit&quot; \\ \r\n\t--apply-immediately\r\n<\/pre>\n<p>Et le fichier d&#8217;audit nouvellement activ\u00e9 appara\u00eet dans la liste des logs consultables et peut \u00eatre t\u00e9l\u00e9charg\u00e9 \u00e0 son tour:<\/p>\n<pre class=\"brush: powershell; title: ; notranslate\" title=\"\">\r\n$ aws rds describe-db-log-files --db-instance-identifier my57\r\n{\r\n\t&quot;DescribeDBLogFiles&quot;: [\r\n\t{\r\n\t\t&quot;LogFileName&quot;: &quot;audit\/server_audit.log&quot;,\r\n\t\t&quot;LastWritten&quot;: 1554360583000,\r\n\t\t&quot;Size&quot;: 24815\r\n}, (...)\r\n\r\n$ aws rds download-db-log-file-portion --db-instance-identifier my57 \\\r\n\t--starting-token 0 --output text \\\r\n\t--log-file-name &quot;audit\/server_audit.log&quot;\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,1,QUERY,,'install plugin server_audit soname \\'server_audit.so\\'',0\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,2,QUERY,,'SELECT 1',0\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,3,QUERY,,'SET GLOBAL server_audit_file_path=\\'\/rdsdbdata\/log\/audit\/server_audit.log\\'',0\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,3,QUERY,,'SET GLOBAL server_audit_file_path=\\'\/rdsdbdata\/log\/audit\/server_audit.log\\'',0\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,4,QUERY,,'SELECT 1',0\r\n20190404 06:46:17,ip-10-22-1-227,rdsadmin,localhost,3,5,QUERY,,'SET GLOBAL server_audit_query_log_limit = 1024',0\r\n (...)\r\n<\/pre>\n<h2>Conclusion partie 1\/2<\/h2>\n<p>Bon, dans cette premi\u00e8re partie nous avons d\u00e9couvert l&#8217;environnement technique qui entoure RDS : les r\u00e9gions, AZ, tiers, types de stockage&#8230; et quelques caract\u00e9ristiques de l&#8217;offre PaaS pour MySQL sur AWS. Restez connect\u00e9s pour la suite : le reste des fonctionnalit\u00e9s et le comparatif final GCP \/ Azure \/ AWS. <\/p>\n<p>A bient\u00f4t !<\/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%2F7013&#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%2F7013&#038;title=Comparatif%20MySQL%20dans%20le%20PaaS%2C%20%C3%A9pisode%203%20%3A%20Amazon%20RDS%20%281%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%281%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%2F7013\" 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>Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. Bon alors l\u00e0 \u00e7a devient compliqu\u00e9. Volet 1\/2 de l&#8217;\u00e9pisode 3 \u00e7a commence \u00e0 ressembler au&hellip; <a href=\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\" class=\"more-link\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":7418,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[295,4],"tags":[314,297,316,315,303],"class_list":["post-7013","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-aws","category-mysql","tag-amazon","tag-cloud","tag-comparatif","tag-paas","tag-rds"],"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 (1\/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-1-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 (1\/2) - Capdata TECH BLOG\" \/>\n<meta property=\"og:description\" content=\"Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. Bon alors l\u00e0 \u00e7a devient compliqu\u00e9. Volet 1\/2 de l&#8217;\u00e9pisode 3 \u00e7a commence \u00e0 ressembler au&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-1-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Capdata TECH BLOG\" \/>\n<meta property=\"article:published_time\" content=\"2019-05-07T10:43:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-11-21T15:51:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/04\/RDS1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1291\" \/>\n\t<meta property=\"og:image:height\" content=\"731\" \/>\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=\"17 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-1-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\"},\"author\":{\"name\":\"David Baffaleuf\",\"@id\":\"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf\"},\"headline\":\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/2)\",\"datePublished\":\"2019-05-07T10:43:25+00:00\",\"dateModified\":\"2022-11-21T15:51:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\"},\"wordCount\":3487,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/blog.capdata.fr\/#organization\"},\"keywords\":[\"amazon\",\"cloud\",\"comparatif\",\"PaaS\",\"RDS\"],\"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-1-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\",\"url\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\",\"name\":\"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/2) - Capdata TECH BLOG\",\"isPartOf\":{\"@id\":\"https:\/\/blog.capdata.fr\/#website\"},\"datePublished\":\"2019-05-07T10:43:25+00:00\",\"dateModified\":\"2022-11-21T15:51:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-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 (1\/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 (1\/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-1-2\/","og_locale":"fr_FR","og_type":"article","og_title":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/2) - Capdata TECH BLOG","og_description":"Rappel des \u00e9pisodes pr\u00e9c\u00e9dents : &#8211; \u00e9pisode 1 : MySQL sur Google Cloud platform. &#8211; \u00e9pisode 2 : MySQL et MariaDB sur Microsoft Azure. Bon alors l\u00e0 \u00e7a devient compliqu\u00e9. Volet 1\/2 de l&#8217;\u00e9pisode 3 \u00e7a commence \u00e0 ressembler au&hellip; Continuer la lecture &rarr;","og_url":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/","og_site_name":"Capdata TECH BLOG","article_published_time":"2019-05-07T10:43:25+00:00","article_modified_time":"2022-11-21T15:51:32+00:00","og_image":[{"width":1291,"height":731,"url":"https:\/\/blog.capdata.fr\/wp-content\/uploads\/2019\/04\/RDS1.png","type":"image\/png"}],"author":"David Baffaleuf","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"David Baffaleuf","Dur\u00e9e de lecture estim\u00e9e":"17 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-1-2\/#article","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/"},"author":{"name":"David Baffaleuf","@id":"https:\/\/blog.capdata.fr\/#\/schema\/person\/136297da9f61d6e4878abe0f48bc5fbf"},"headline":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/2)","datePublished":"2019-05-07T10:43:25+00:00","dateModified":"2022-11-21T15:51:32+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/"},"wordCount":3487,"commentCount":0,"publisher":{"@id":"https:\/\/blog.capdata.fr\/#organization"},"keywords":["amazon","cloud","comparatif","PaaS","RDS"],"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-1-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/","url":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/","name":"Comparatif MySQL dans le PaaS, \u00e9pisode 3 : Amazon RDS (1\/2) - Capdata TECH BLOG","isPartOf":{"@id":"https:\/\/blog.capdata.fr\/#website"},"datePublished":"2019-05-07T10:43:25+00:00","dateModified":"2022-11-21T15:51:32+00:00","breadcrumb":{"@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/blog.capdata.fr\/index.php\/comparatif-mysql-dans-le-paas-episode-3-amazon-rds-1-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 (1\/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\/7013","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=7013"}],"version-history":[{"count":29,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7013\/revisions"}],"predecessor-version":[{"id":9508,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/posts\/7013\/revisions\/9508"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media\/7418"}],"wp:attachment":[{"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/media?parent=7013"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/categories?post=7013"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.capdata.fr\/index.php\/wp-json\/wp\/v2\/tags?post=7013"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}