{"id":2425,"date":"2012-01-20T07:16:00","date_gmt":"2012-01-20T06:16:00","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/"},"modified":"2012-01-20T07:16:00","modified_gmt":"2012-01-20T06:16:00","slug":"mysql-data-high-availability-with-semi-synchronous-replication","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/","title":{"rendered":"MySQL Data High Availability with semi-synchronous replication"},"content":{"rendered":"<p>Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. As you probably know, MySQL replication is asynchronous by default. Asynchronous replication means that events\/transactions applied on one server are not immediately applied on the other one.<\/p>\n<p>In the specific context of MySQL such behavior means that the MySQL master writes transactions\/events to the local binary logs. However, it has no idea when the slave(s) will get and process them. Of course, in case of a failover, such configuration can lead to some transaction loss since there is no guaranty that the transactions have been transmitted to the standby server(s).<\/p>\n<p>If you want to avoid such a problem, semi-synchronous replication can help you. <del datetime=\"2015-05-12T09:21:38+00:00\">Basically, what semi-synchronous replication does is ensuring that a transaction\/event has been written to at least one slave\u2019s relay log and flushed to disk before doing the commit on the master node<\/del> (Investigation pending). However, it doesn&#8217;t mean that the transaction has been applied on the slave side, the application can be slightly delayed or may in the worst case fail. Of course, such semi-synchronous replication might impact performances. But this impact can be reduced by improving network performances.<\/p>\n<p>The requirements in order to be able to configure semi-synchronous replication is to\u00a0have a working replication and, as stated in the introduction, to have a MySQL version equal or higher than 5.5 installed. Before implementing semi-synchronous replication, two plugins have to be installed: One plugin on the slave server (semsiync_slave.so) and one plugin on the master (semisync_master.so). In case of a Master\/Master Active\/Slave setup, both plugins have to be installed on each server. It is best practice to install both since any slave server can be promoted to master and vice versa.<\/p>\n<p>Installing plugins is a straight forward process as demonstrated below:<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">mysql&gt; INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';\n Query OK, 0 rows affected (0.01 sec)\nmysql&gt; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';\n Query OK, 0 rows affected (0.00 sec)\nmysql&gt; INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';\n Query OK, 0 rows affected (0.01 sec)\nmysql&gt; INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';\n Query OK, 0 rows affected (0.00 sec)<\/pre>\n<p>Once the plugins are installed, it is mandatory to configure the replication by editing the option\/configuration file (my.cnf or my.ini). The following lines need to be appended to the option\/configuration file on both slave and master servers.<\/p>\n<pre class=\"brush: actionscript3; gutter: true; first-line: 1\">rpl_semi_sync_slave_enabled =1\n rpl_semi_sync_master_enabled =1<\/pre>\n<p>Once the modifications are done, MySQL has to be restarted.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">mysql@mysql-qual1: ~\/ [mysqld1] mysqld_multi stop 1\n mysql@mysql-qual1: ~\/ [mysqld1] mysqld_multi start 1<\/pre>\n<p>The \u00ab\u00a0SHOW STATUS\u00a0\u00bb command can help check that the modifications have been taken into consideration and the replication is working correctly.<\/p>\n<pre class=\"brush: sql; gutter: true; first-line: 1\">mysql&gt; SHOW STATUS LIKE 'Rpl_semi_sync%';\n +--------------------------------------------+-------+\n | Variable_name\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | Value |\n +--------------------------------------------+-------+\n | Rpl_semi_sync_master_clients\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 1\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_net_avg_wait_time\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_net_wait_time\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_net_waits\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_no_times\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_no_tx\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_status\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | ON\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_timefunc_failures\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_tx_avg_wait_time\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_tx_wait_time\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_tx_waits\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_wait_pos_backtraverse | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_wait_sessions\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_master_yes_tx\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | 0\u00a0\u00a0\u00a0\u00a0 |\n | Rpl_semi_sync_slave_status\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 | ON\u00a0\u00a0\u00a0 |\n +--------------------------------------------+-------+\n 15 rows in set (0.00 sec)<\/pre>\n<p>Parameters such as \u201cRpl_semi_sync_master_clients\u00a0\u00bb, \u00ab\u00a0Rpl_semi_sync_master_status\u201d and \u201cRpl_semi_sync_slave_status\u201d indicate that the semi-synchronous replication is working.<\/p>\n<p>If a timeout occurs (higher than 10 seconds by default) without any slave having acknowledged the transaction, the master reverts to asynchronous replication without any message excepting changing the value of \u201crpl_semi_sync_master_status\u201d from \u201cON\u201d to \u201cOFF\u201d. In the same way, as soon as at least one semi-synchronous slave catches up, the master then returns to semi-synchronous replication. This behavior is acceptable for service continuity, but is a real weakness from an operating point of view, since this has to be carefully monitored.<\/p>\n<p>Despite the fact that the timeout value can be changed by editing the variable \u201crpl_semi_sync_master_timeout\u201d, monitoring a disaster situation is really tricky. Moreover, it is difficult to know what was the \u201clast status before crash\u201d. Was the semi-synchronous replication working or not? Are there any lost transactions? What was the last status of variable \u201crpl_semi_sync_master_status\u201d before the crash ?<\/p>\n<p>I have no definitive answers to these questions. One piece of solution is implementing a rigorous monitoring solution on your server to double check variables such as \u201crpl_semi_sync_master_no_times\u201d\u00a0 and \u201crpl_semi_sync_master_status\u00a0\u00bb.<\/p>\n<p>Continuous and cautious monitoring, as well as following best practice should be part of every high availability project anyway.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. As you probably know, by default, MySQL replication is asynchronous. &nbsp;Asynchronous replication means that events\/transactions applied on one server are not immediately applied on the other one. In the specific context of MySQL such behavior means that the MySQL Master writes transactions\/events to the local binary logs, however it has no idea when the slave(s) will get and process them. Of course such configuration can lead, in case of failover, to some transaction loss since there is no guaranty that the transactions have been transmitted on the standby server(s).<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[199],"tags":[23,84,144,301,238],"type_dbi":[],"class_list":["post-2425","post","type-post","status-publish","format-standard","hentry","category-hardware-storage","tag-dba","tag-high-availability","tag-mysql","tag-replication","tag-standby"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>MySQL Data High Availability with semi-synchronous replication - dbi Blog<\/title>\n<meta name=\"description\" content=\"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MySQL Data High Availability with semi-synchronous replication\" \/>\n<meta property=\"og:description\" content=\"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2012-01-20T06:16:00+00:00\" \/>\n<meta name=\"author\" content=\"Gr\u00e9gory Steulet\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gr\u00e9gory Steulet\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\"},\"author\":{\"name\":\"Gr\u00e9gory Steulet\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098\"},\"headline\":\"MySQL Data High Availability with semi-synchronous replication\",\"datePublished\":\"2012-01-20T06:16:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\"},\"wordCount\":621,\"commentCount\":0,\"keywords\":[\"DBA\",\"High availability\",\"MySQL\",\"Replication\",\"Standby\"],\"articleSection\":[\"Hardware &amp; Storage\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\",\"name\":\"MySQL Data High Availability with semi-synchronous replication - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2012-01-20T06:16:00+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098\"},\"description\":\"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MySQL Data High Availability with semi-synchronous replication\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098\",\"name\":\"Gr\u00e9gory Steulet\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g\",\"caption\":\"Gr\u00e9gory Steulet\"},\"description\":\"Gr\u00e9gory Steulet has more than ten years of experience in database and infrastructure management, engineering, and optimization. He is specialized in Oracle technologies and high availability solutions (Oracle DataGuard, Data Replication Block Device). His expertise also includes Avaloq banking applications, as well as the open source field (MySQL, Unix\/Linux, etc.). Gr\u00e9gory Steulet is \\\"Oracle Certified Professional 10g\\\", \\\"MySQL Cluster 5.1 Certified\\\", and \\\"Avaloq Certified Professional 2.6\\\". Prior to joining dbi services, Gr\u00e9gory Steulet was Senior Consultant at Trivadis in Lausanne. He also worked as IT Administrator at Box Telecom in Miami Beach, Florida (USA). Gr\u00e9gory Steulet has an Executive MBA from the International Institute of Management in Technology, Fribourg (CH). He also holds a Bachelor's Degree in Business Administration and Computer Science from the University of Applied Sciences Western Switzerland. His branch-related experience covers Telecommunications, Financial Services \/ Banking, Logistics, Pharma etc.\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/gregory-steulet\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"MySQL Data High Availability with semi-synchronous replication - dbi Blog","description":"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.","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:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/","og_locale":"en_US","og_type":"article","og_title":"MySQL Data High Availability with semi-synchronous replication","og_description":"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.","og_url":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/","og_site_name":"dbi Blog","article_published_time":"2012-01-20T06:16:00+00:00","author":"Gr\u00e9gory Steulet","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Gr\u00e9gory Steulet","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/"},"author":{"name":"Gr\u00e9gory Steulet","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098"},"headline":"MySQL Data High Availability with semi-synchronous replication","datePublished":"2012-01-20T06:16:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/"},"wordCount":621,"commentCount":0,"keywords":["DBA","High availability","MySQL","Replication","Standby"],"articleSection":["Hardware &amp; Storage"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/","url":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/","name":"MySQL Data High Availability with semi-synchronous replication - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2012-01-20T06:16:00+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098"},"description":"Starting with MySQL 5.5 it is possible to configure semi-synchronous replication. This blog introduces MySQL semi-synchronous replication by presenting advantages and drawbacks.","breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/mysql-data-high-availability-with-semi-synchronous-replication\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MySQL Data High Availability with semi-synchronous replication"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/7609faada8e4d63e04a28ae29e227098","name":"Gr\u00e9gory Steulet","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e1531483285469fe17ea7a769ce5d8a8a01847185e4245d9c4d22c575c7c6d3e?s=96&d=mm&r=g","caption":"Gr\u00e9gory Steulet"},"description":"Gr\u00e9gory Steulet has more than ten years of experience in database and infrastructure management, engineering, and optimization. He is specialized in Oracle technologies and high availability solutions (Oracle DataGuard, Data Replication Block Device). His expertise also includes Avaloq banking applications, as well as the open source field (MySQL, Unix\/Linux, etc.). Gr\u00e9gory Steulet is \"Oracle Certified Professional 10g\", \"MySQL Cluster 5.1 Certified\", and \"Avaloq Certified Professional 2.6\". Prior to joining dbi services, Gr\u00e9gory Steulet was Senior Consultant at Trivadis in Lausanne. He also worked as IT Administrator at Box Telecom in Miami Beach, Florida (USA). Gr\u00e9gory Steulet has an Executive MBA from the International Institute of Management in Technology, Fribourg (CH). He also holds a Bachelor's Degree in Business Administration and Computer Science from the University of Applied Sciences Western Switzerland. His branch-related experience covers Telecommunications, Financial Services \/ Banking, Logistics, Pharma etc.","url":"https:\/\/www.dbi-services.com\/blog\/author\/gregory-steulet\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/2425","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=2425"}],"version-history":[{"count":0,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/2425\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=2425"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=2425"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=2425"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=2425"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}