
{"id":4151,"date":"2020-12-17T12:54:34","date_gmt":"2020-12-17T11:54:34","guid":{"rendered":"http:\/\/dasini.net\/blog\/?p=4151"},"modified":"2020-12-17T18:01:45","modified_gmt":"2020-12-17T17:01:45","slug":"mysql-shell-the-new-era","status":"publish","type":"post","link":"https:\/\/dasini.net\/blog\/2020\/12\/17\/mysql-shell-the-new-era\/","title":{"rendered":"MySQL SHELL &#8211; The new era"},"content":{"rendered":"\n<figure class=\"wp-block-image\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/Kefallonia_Lake_Melissani_by_Anastasia_Papachristopoulou_722x600.jpeg\" alt=\"Kefallonia Lake Melissani by Anastasia Papachristopoulou\"\/><\/figure>\n\n\n\n<p>MySQL Shell is a modern tool that can be used by both developers and database administrators. It is a tool that can be used with any of the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>SQL, Python, Javascript<\/li><li>MySQL Document Store (NoSQL, X DevAPI)<\/li><li>JSON Documents \/ SQL tables<\/li><\/ul>\n\n\n\n<p>In one of our previous articles &#8211; <a href=\"http:\/\/dasini.net\/blog\/2020\/12\/10\/setting-up-replication-with-various-methods\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Setting up Replication with various methods for MySQL 8\">Setting up Replication with various methods for MySQL 8<\/a> &#8211;  we reviewed how to create a replica with multiple tools. <br>Now, it is time to perform the same action but with MySQL Shell.<\/p>\n\n\n\n<p>In general, MySQL Shell is used with <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/mysql-innodb-cluster-introduction.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL InnoDB Cluster\">MySQL InnoDB Cluster<\/a> to deploy a <a href=\"https:\/\/dev.mysql.com\/doc\/refman\/8.0\/en\/group-replication.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Group Replication\">MySQL Group Replication<\/a>, with or without <a href=\"https:\/\/www.mysql.com\/products\/enterprise\/router.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"MySQL Router\">MySQL Router<\/a>.  <br>Here we will examine how to create an asynchronous replication.<\/p>\n\n\n\n\n\n\n\n<p>First of all, we may download MySQL Shell via the following url:<\/p>\n\n\n\n<p><a href=\"https:\/\/dev.mysql.com\/downloads\/shell\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Download MySQL Shell\">https:\/\/dev.mysql.com\/downloads\/shell\/<\/a><\/p>\n\n\n\n<p>We will be using MySQL Shell version <strong>8.0.22<\/strong>, that is currently the latest and includes extra features. <\/p>\n\n\n\n<p>Let&rsquo;s start!<\/p>\n\n\n\n\n\n<p>On the source database, we connect to mysqlsh:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysqlsh root@localhost\nPlease provide the password for 'root@localhost': *******\nSave password for 'root@localhost'? &#91;Y]es\/&#91;N]o\/Ne&#91;v]er (default No): N\nMySQL Shell 8.0.22-commercial\n\nCopyright (c) 2016, 2020, Oracle and\/or its affiliates.\nOracle is a registered trademark of Oracle Corporation and\/or its affiliates.\nOther names may be trademarks of their respective owners.\n\nType '\\help' or '\\?' for help; '\\quit' to exit.\nCreating a session to 'root@localhost'\nFetching schema names for autocompletion... Press ^C to stop.\nYour MySQL connection id is 11 (X protocol)\nServer version: 8.0.22-commercial MySQL Enterprise Server - Commercial\nNo default schema selected; type \\use &lt;schema&gt; to set one.\n\nMySQL  localhost:33060+ ssl  JS &gt;<\/code><\/pre>\n\n\n\n\n\n<p>We may use option<strong> \\sql<\/strong> or <strong>\\py<\/strong> to use <strong>SQL<\/strong> or <strong>Python<\/strong> respectively instead of the <strong>JavaScript<\/strong> mode (\\<strong>js<\/strong>):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:33060+ ssl  JS &gt; \\sql\nSwitching to SQL mode... Commands end with ;\n\nMySQL  localhost:33060+ ssl  JS &gt; \\py\nSwitching to Python mode...\nMySQL  localhost:33060+ ssl  Py &gt;<\/code><\/pre>\n\n\n\n\n\n<p>For creating the dump we will be using the <strong><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"util.dumpInstance\">util.dumpInstance<\/a><\/strong>(). <br>Please note that the <em><strong>outputUrl<\/strong><\/em> (target directory to store the dump files) must be an empty folder, otherwise you will receive an error like : <\/p>\n\n\n\n<p class=\"has-vivid-red-color has-text-color\"><em>util.dumpInstance: Cannot proceed with the dump, the specified directory &lsquo;\/&rsquo; already exists at the target location \/ and is not empty. (ArgumentError).<\/em><\/p>\n\n\n\n\n\n<p><br>If the folder doesn&rsquo;t exist mysqlsh is smart enough to create the folder for us:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:33060+ ssl  JS &gt; util.dumpInstance(\"\/path_for_dump\", {dryRun: true, ocimds: false, threads:4, compatibility: &#91;\"strip_definers\", \"strip_restricted_grants\",\"force_innodb\"]})<\/code><\/pre>\n\n\n\n\n\n<p>Now, let&rsquo;s take a minute to review the options we are using:<\/p>\n\n\n\n<p><em><strong>dryRun<\/strong><\/em>: This won&rsquo;t dump anything, it will print information on what will be dumped.<\/p>\n\n\n\n<p><em><strong>ocimds<\/strong><\/em>: Enable checks for compatibility with MySQL Database Service (MDS).<\/p>\n\n\n\n<p><em><strong>threads<\/strong><\/em>: How many threads to be used for dumping data chunks from the server.<\/p>\n\n\n\n<p><em><strong>compatibility<\/strong><\/em>: Apply MySQL Database Service compatibility modifications when writing dump files. Supported values: \u00ab\u00a0force_innodb\u00a0\u00bb, \u00ab\u00a0strip_definers\u00a0\u00bb, \u00ab\u00a0strip_restricted_grants\u00a0\u00bb, \u00ab\u00a0strip_tablespaces\u00a0\u00bb.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><em><strong>force_innodb<\/strong><\/em> &#8211; The MySQL Database Service requires use of the InnoDB storage engine. This option will modify the ENGINE= clause of CREATE TABLE statements that use incompatible storage engines and replace them with InnoDB.<\/p>\n\n\n\n<p><em><strong>strip_definers<\/strong><\/em> &#8211; strips the \u00ab\u00a0DEFINER=account\u00a0\u00bb clause from views, routines, events and triggers. The MySQL Database Service requires special privileges to create these objects with a definer other than the user loading the schema. By stripping the DEFINER clause, these objects will be created with that default definer. Views and Routines will additionally have their SQL SECURITY clause changed from DEFINER to INVOKER. This ensures that the access permissions of the account querying or calling them are applied, instead of the user that created them. This should be sufficient for most users, but if your database security model requires that views and routines have more privileges than their invoker, you will need to manually modify the schema before loading it.<\/p>\n\n\n\n<p><em><strong>strip_restricted_grants<\/strong><\/em> &#8211; Certain privileges are restricted in the MySQL Database Service. Attempting to create users granting these privileges would fail, so this option allows dumped GRANT statements to be stripped of these privileges.<\/p>\n\n\n\n<p><em><strong>strip_tablespaces<\/strong><\/em> &#8211; Tablespaces have some restrictions in the MySQL Database Service. If you&rsquo;d like to have tables created in their default tablespaces, this option will strip the TABLESPACE= option from CREATE TABLE statements.<\/p>\n\n\n\n\n\n<p>As we are using a database that contains other storage engines apart from InnoDB engine, we will be using option <em><strong>force_innodb<\/strong><\/em>, along with <em><strong>strip_restricted_grants<\/strong><\/em> and <em><strong>strip_definers<\/strong><\/em>, as we have routines with DEFINER.<\/p>\n\n\n\n<p>So, here we go:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:33060+ ssl  JS &gt; util.dumpInstance(\"\/path_for_dump\", {ocimds: false, threads:4, compatibility: &#91;\"strip_definers\", \"strip_restricted_grants\",\"force_innodb\"]})\n<\/code><\/pre>\n\n\n\n\n\n<p>As this moves along, we may open a new connection to our target host, enabling the <em><strong>local_infile<\/strong><\/em> parameter so the dump can be imported and at the same time we disable <em><strong>innodb_redo_log<\/strong><\/em> as well.<br>Disabling redo logging speeds up data loading by avoiding redo log writes and doublewrite buffering:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysqlsh back_up@localhost\n\nMySQL  localhost:33060+ ssl  JS &gt; \\sql SET GLOBAL  local_infile=1;\nMySQL  localhost:33060+ ssl  JS &gt; \\sql ALTER INSTANCE DISABLE INNODB REDO_LOG;\nMySQL  localhost:33060+ ssl  JS &gt; util.loadDump(\"\/data_imp\",{threads:4,updateGtidSet:\"replace\",skipBinlog:true,waitDumpTimeout:1800})<\/code><\/pre>\n\n\n\n\n\n<p>Before proceeding, let&rsquo;s discuss once again the options we are using:<\/p>\n\n\n\n<p><em><strong>\/data_imp<\/strong><\/em>: is where the files will be located.<\/p>\n\n\n\n<p><em><strong>threads<\/strong><\/em>: The number of parallel threads to use to upload chunks of data to the target MySQL instance.<\/p>\n\n\n\n<p><em><strong>updateGtidSet<\/strong><\/em>: Apply the gtid_executed GTID set from the source MySQL instance, as recorded in the dump metadata, to the gtid_purged GTID set on the target MySQL instance.<\/p>\n\n\n\n<p><em><strong>skipBinlog<\/strong><\/em>: Skips binary logging on the target MySQL instance for the sessions used by the utility during the course of the import, by issuing a SET sql_log_bin=0 statement.<\/p>\n\n\n\n<p><em><strong>waitDumpTimeout<\/strong><\/em>: Setting this option activates concurrent loading by specifying a timeout (in seconds) for which the utility waits for further data after all uploaded data chunks in the dump location have been processed.<\/p>\n\n\n\n\n\n<p><em>updateGtidSet<\/em> is available from <strong>8.0.22<\/strong> version. <br>If you are using<strong> 8.0.21<\/strong>, then you will need to manually set the GTID by locating the gtidExecuted field in the @.json dump file in the dump metadata:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>MySQL  localhost:33060+ ssl  JS &gt; \\sql SET @@GLOBAL.gtid_purged= \"+gtidExecuted_set\";\n<\/code><\/pre>\n\n\n\n\n\n<p>So, basically we have taken a dump from the source host and at the same time, restore it to the target host. <br>Once it is completed, and as MySQL Shell is really fast we won&rsquo;t have to wait for that long, we log in to the target host and execute the following command:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CHANGE MASTER TO MASTER_HOST='primary_IP',MASTER_USER='user_to_connect',MASTER_PASSWORD='******', MASTER_AUTO_POSITION=1;\n\nSTART SLAVE;<\/code><\/pre>\n\n\n\n\n\n<p>And our replica is all set.<\/p>\n\n\n\n\n\n<p>Apart from the <em>util.dumpInstance<\/em>(), we also have the options to use <em><strong>util.dumpSchemas<\/strong><\/em>() and <em><strong>util.dumpTables<\/strong><\/em>(), that was introduced in MySQL Shell 8.0.22, and offers the option for dumping specific schemas, tables or views.<\/p>\n\n\n\n<p>It is also important to mention that the above-mentioned utilities are fully compatible with <strong><a href=\"https:\/\/www.oracle.com\/cloud\/\" target=\"_blank\" rel=\"noreferrer noopener\" title=\"Oracle Cloud Infrastructure\">Oracle Cloud Infrastructure<\/a><\/strong>.<\/p>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>MySQL Shell is a really useful tool that offers a variety of functionalities. <br>It is super fast and saves us a lot of time when dealing with broken replication or with data transfer.<\/p>\n\n\n\n<p>Try it, you will love it \ud83d\ude42<\/p>\n\n\n\n\n\n\n\n<h2 class=\"wp-block-heading\">References<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Instance Dump Utility, Schema Dump Utility, and Table Dump Utility<ul><li><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-dump-instance-schema.html<\/a><\/li><\/ul><\/li><li>Dump Loading Utility<ul><li><a href=\"https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/dev.mysql.com\/doc\/mysql-shell\/8.0\/en\/mysql-shell-utilities-load-dump.html<\/a><\/li><\/ul><\/li><li>loadDump()<ul><li><a href=\"https:\/\/dev.mysql.com\/doc\/dev\/mysqlsh-api-javascript\/8.0\/group__util.html#ga661e259905ddea494dbb8f62cf5f6342\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/dev.mysql.com\/doc\/dev\/mysqlsh-api-javascript\/8.0\/group__util.html#ga661e259905ddea494dbb8f62cf5f6342<\/a><\/li><\/ul><\/li><\/ul>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>In one of our previous articles &#8211; Setting up Replication with various methods for MySQL 8 &#8211;  we reviewed how to create a replica with multiple tools.<br \/>\nNow, it is time to perform the same action but with MySQL Shell.<\/p>\n","protected":false},"author":4,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"footnotes":""},"categories":[1645,351,203],"tags":[72,1647],"class_list":["post-4151","post","type-post","status-publish","format-standard","hentry","category-backup-restore","category-group-replication-en","category-mysql-en","tag-mysql-replication","tag-mysql-shell"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p9LfWW-14X","jetpack-related-posts":[{"id":4188,"url":"https:\/\/dasini.net\/blog\/2021\/01\/26\/replicate-from-mysql-5-7-to-mysql-database-service\/","url_meta":{"origin":4151,"position":0},"title":"Replicate from MySQL 5.7 to MySQL Database Service","author":"Olivier DASINI","date":"26 janvier 2021","format":false,"excerpt":"MySQL Replication is a very common topology, widely used in various architecture. People use it, among others, for High Availability, Read Scalability or Geographic Redundancy. Another use case is to use MySQL Replication to seamlessly integrate a newer version of the server in your architecture. Let\u2019s say you are running\u2026","rel":"","context":"Dans &quot;MySQL&quot;","block_context":{"text":"MySQL","link":"https:\/\/dasini.net\/blog\/category\/mysql-en\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":6650,"url":"https:\/\/dasini.net\/blog\/2024\/07\/16\/get-your-heatwave-mysql-data-on-premises-with-replication\/","url_meta":{"origin":4151,"position":1},"title":"Get Your HeatWave MySQL Data On-Premises with Replication","author":"Olivier DASINI","date":"16 juillet 2024","format":false,"excerpt":"This article guides you through setting up replication between a HeatWave MySQL instance (source) and an on-premise standalone MySQL instance (replica). It highlights key steps like creating a replication user, securing the connection, and using MySQL Shell utilities for data transfer.","rel":"","context":"Dans &quot;HeatWave&quot;","block_context":{"text":"HeatWave","link":"https:\/\/dasini.net\/blog\/category\/heatwave-en\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=1050%2C600&ssl=1 3x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2024\/07\/Get-Your-HeatWave-MySQL-Data-On-Premises-with-Replication-1.png?resize=1400%2C800&ssl=1 4x"},"classes":[]},{"id":4462,"url":"https:\/\/dasini.net\/blog\/2021\/04\/13\/heatwave-a-mysql-cloud-feature-to-speed-up-your-queries\/","url_meta":{"origin":4151,"position":2},"title":"HeatWave &#8211; A MySQL cloud feature to speed up your queries","author":"Olivier DASINI","date":"13 avril 2021","format":false,"excerpt":"If you have (too) long running select queries it is probably because of lack of relevant indexes, problematic schema that lead to poor queries or inadequate hardware. That said, sometime even if you doing it right, the query execution time could be too long regarding of what the application or\u2026","rel":"","context":"Dans &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/dasini.net\/blog\/category\/cloud\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/04\/MySQL-Database-Service-HeatWave-Replication.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":4774,"url":"https:\/\/dasini.net\/blog\/2021\/08\/24\/discovering-mysql-database-service-episode-4-dump-your-mysql-data-into-an-object-storage-bucket\/","url_meta":{"origin":4151,"position":3},"title":"Discovering MySQL Database Service &#8211; Episode 4 &#8211; Dump your MySQL data into an Object Storage bucket","author":"Olivier DASINI","date":"24 ao\u00fbt 2021","format":false,"excerpt":"This is the fourth episode of \u201cDiscovering MySQL Database Service\u201c, a series of tutorials where I will show you, step by step, how to use MySQL Database Service and some other Oracle Cloud Infrastructure services. In the previous episode we\u2019ve created our Virtual Cloud Network, that provides you with complete\u2026","rel":"","context":"Dans &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/dasini.net\/blog\/category\/cloud\/"},"img":{"alt_text":"MySQL Database Service","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":5139,"url":"https:\/\/dasini.net\/blog\/2021\/10\/05\/discovering-mysql-database-service-episode-10-connect-to-mysql-database-service-using-oci-cloud-shell\/","url_meta":{"origin":4151,"position":4},"title":"Discovering MySQL Database Service \u2013 Episode 10 \u2013 Connect to MySQL Database Service Using OCI Cloud Shell","author":"Olivier DASINI","date":"5 octobre 2021","format":false,"excerpt":"MySQL, the world\u2019s most popular open source database, is available as a managed cloud service in Oracle Cloud Infrastructure (OCI) under the name of MySQL Database Service (MDS). This is the tenth episode of \u201cDiscovering MySQL Database Service\u201c, a series of tutorials where I will show you, step by step,\u2026","rel":"","context":"Dans &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/dasini.net\/blog\/category\/cloud\/"},"img":{"alt_text":"MySQL Database Service","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":5067,"url":"https:\/\/dasini.net\/blog\/2021\/09\/21\/discovering-mysql-database-service-episode-8-connect-to-mysql-database-service-using-mysql-shell\/","url_meta":{"origin":4151,"position":5},"title":"Discovering MySQL Database Service \u2013 Episode 8 \u2013 Connect to MySQL Database Service Using MySQL Shell","author":"Olivier DASINI","date":"21 septembre 2021","format":false,"excerpt":"In the previous episode we've seen how to use an OCI Bastion session in order to provide a restricted and time-limited access to administer our MySQL instance. One more step to our Discovering MySQL Database Service journey. In this episode, we'll learn how to connect to our MySQL Database Service\u2026","rel":"","context":"Dans &quot;Cloud&quot;","block_context":{"text":"Cloud","link":"https:\/\/dasini.net\/blog\/category\/cloud-en\/"},"img":{"alt_text":"MySQL Database Service","src":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/dasini.net\/blog\/wp-content\/uploads\/2021\/06\/MDS_car_801x600.png?resize=700%2C400&ssl=1 2x"},"classes":[]}],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/comments?post=4151"}],"version-history":[{"count":19,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4151\/revisions"}],"predecessor-version":[{"id":4184,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/posts\/4151\/revisions\/4184"}],"wp:attachment":[{"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/media?parent=4151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/categories?post=4151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dasini.net\/blog\/wp-json\/wp\/v2\/tags?post=4151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}