{"id":23,"date":"2026-03-29T19:35:31","date_gmt":"2026-03-29T19:35:31","guid":{"rendered":"https:\/\/www.dim.com.mx\/?p=23"},"modified":"2026-03-29T20:15:22","modified_gmt":"2026-03-29T20:15:22","slug":"servidores-master-slave-con-mysql-y-mariadb","status":"publish","type":"post","link":"https:\/\/www.dim.com.mx\/index.php\/2026\/03\/29\/servidores-master-slave-con-mysql-y-mariadb\/","title":{"rendered":"Servidores master-slave con mysql y mariadb"},"content":{"rendered":"\n<p>Procedimiento <strong>MySQL 5.7.42 (192.168.63.1) \u2192 MariaDB 10.6.24 slave (192.168.63.4)<\/strong>, usando <strong>archivo\/posici\u00f3n de binlog<\/strong>, que es lo correcto para este cruce MySQL\u2192MariaDB. MariaDB documenta que <strong>10.2+<\/strong> puede replicar desde <strong>MySQL 5.7<\/strong>, y que <strong>no usa el GTID de MySQL<\/strong>, por lo que el replica debe engancharse con <strong>binary log file + position<\/strong>. Tambi\u00e9n indica que, cuando MariaDB replica desde MySQL, <strong>puede ser necesario<\/strong> usar <code>binlog_checksum=NONE<\/code> en el primario MySQL. (<a href=\"https:\/\/mariadb.com\/docs\/release-notes\/community-server\/about\/compatibility-and-differences\/replication-compatibility-between-mariadb-and-mysql?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1) En el master MySQL 5.7.42 \u2014 192.168.63.1<\/h2>\n\n\n\n<p>Edita <code>my.cnf<\/code> y aseg\u00farate de tener esto:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;mysqld]\nserver-id=1\nlog_bin=mysql-bin\nbinlog_format=ROW\nbind-address=192.168.63.1\nbinlog_checksum=NONE\nexpire_logs_days=7\n<\/code><\/pre>\n\n\n\n<p><code>ROW<\/code> es la opci\u00f3n m\u00e1s segura para este tipo de replicaci\u00f3n, y <code>binlog_checksum=NONE<\/code> es un ajuste que MariaDB recomienda considerar cuando el replica es MariaDB. (<a href=\"https:\/\/mariadb.com\/docs\/server\/ha-and-performance\/standard-replication\/setting-up-replication?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<p>Reinicia MySQL.<\/p>\n\n\n\n<p>Ahora crea el usuario de replicaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE USER 'repl'@'192.168.63.4' IDENTIFIED BY 'ClaveFuerteAqui';\nGRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'192.168.63.4';\nFLUSH PRIVILEGES;\n<\/code><\/pre>\n\n\n\n<p>Ahora saca las coordenadas del binlog:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW MASTER STATUS;\n<\/code><\/pre>\n\n\n\n<p>Te va a devolver algo as\u00ed:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>File: mysql-bin.000123\nPosition: 456789\n<\/code><\/pre>\n\n\n\n<p>Guarda <strong>exactamente<\/strong> esos dos valores.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">2) Respaldar y copiar datos del master al slave<\/h2>\n\n\n\n<p>Para que el slave arranque consistente, lo correcto es sacar un dump con la posici\u00f3n embebida.<\/p>\n\n\n\n<p>En el master, usando 4 cores exportacion paralela, con parametros para no afectar produccion con exceso de carga:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir -p \/respaldos\/nombre_base_datos\n\nmydumper \\\n  --database nombre_base_datos \\\n  --outputdir \/respaldos\/nombre_base_datos \\\n  --threads 4 \\\n  --trx-tables \\\n  --routines \\\n  --events \\\n  --triggers \\\n  --compress\n\ncd \/respaldos\n\ntar -zcvf nombre_base_datos.tgz nombre_base_datos<\/code><\/pre>\n\n\n\n<p>C\u00f3pialo al slave:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>scp nombre_base_datos.tgz root@192.168.63.4:\/respaldos\/\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">3) En el slave MariaDB 10.6.24 \u2014 192.168.63.4<\/h2>\n\n\n\n<p>Edita el <code>my.cnf<\/code> del slave:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;mysqld]\nserver-id=4\nrelay-log=relay-bin\nlog_bin=mariadb-bin\nread_only=1\nskip-slave-start=1\nbind-address=192.168.63.4\n<\/code><\/pre>\n\n\n\n<p><code>server-id<\/code> debe ser \u00fanico en la topolog\u00eda. El replica MariaDB debe usar archivo\/posici\u00f3n del primario MySQL, no GTID de MySQL. (<a href=\"https:\/\/mariadb.com\/docs\/release-notes\/community-server\/about\/compatibility-and-differences\/replication-compatibility-between-mariadb-and-mysql?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<p>Reinicia MariaDB.<\/p>\n\n\n\n<p>Importa el dump:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mysql -e \"DROP DATABASE IF EXISTS nombre_base_datos; CREATE DATABASE nombre_base_datos;\"\n\ncd \/respaldos\n\ntar -zxvf nombre_base_datos.tgz\n\nmyloader \\\n  --database nombre_base_datos \\\n  --directory \/respaldos\/nombre_base_datos \\\n  --threads 4 \\\n  --drop-table \\\n  --overwrite-unsafe<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">4) Apuntar el slave al master<\/h2>\n\n\n\n<p>Primero aseg\u00farate de que el slave est\u00e9 detenido:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>STOP SLAVE;\nRESET SLAVE ALL;\n<\/code><\/pre>\n\n\n\n<p>Luego configura la replicaci\u00f3n con el archivo y posici\u00f3n que te dio <code>SHOW MASTER STATUS<\/code> en el MySQL:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CHANGE MASTER TO\n  MASTER_HOST='192.168.63.1',\n  MASTER_USER='repl',\n  MASTER_PASSWORD='ClaveFuerteAqui',\n  MASTER_PORT=3306,\n  MASTER_LOG_FILE='mysql-bin.000123',\n  MASTER_LOG_POS=456789,\n  MASTER_CONNECT_RETRY=10;\n<\/code><\/pre>\n\n\n\n<p>Arranca la replicaci\u00f3n:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>START SLAVE;\n<\/code><\/pre>\n\n\n\n<p>Verifica:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW SLAVE STATUS\\G\n<\/code><\/pre>\n\n\n\n<p>Lo importante es ver:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Slave_IO_Running: Yes\nSlave_SQL_Running: Yes\nSeconds_Behind_Master: 0\n<\/code><\/pre>\n\n\n\n<p>MariaDB sigue documentando esos campos como referencia de validaci\u00f3n en la configuraci\u00f3n de replicaci\u00f3n. (<a href=\"https:\/\/mariadb.com\/docs\/server\/ha-and-performance\/standard-replication\/setting-up-replication?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">5) Si quieres sacar las coordenadas con bloqueo breve<\/h2>\n\n\n\n<p>Si prefieres m\u00e1xima certeza manual en vez de confiar en <code>--master-data<\/code>, en el master puedes hacer:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>FLUSH TABLES WITH READ LOCK;\nSHOW MASTER STATUS;\n<\/code><\/pre>\n\n\n\n<p>Sin cerrar esa sesi\u00f3n, sacas el dump con otra terminal:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>con el comando que ya esta en la guia pasos antes\n<\/code><\/pre>\n\n\n\n<p>Y luego liberas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>UNLOCK TABLES;\n<\/code><\/pre>\n\n\n\n<p>Para InnoDB normalmente <code>--single-transaction --master-data=2<\/code> evita ese bloqueo largo, pero este m\u00e9todo manual existe si quieres control total.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">6) Validaciones que te recomiendo hacer<\/h2>\n\n\n\n<p>En el master:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW VARIABLES LIKE 'server_id';\nSHOW VARIABLES LIKE 'log_bin';\nSHOW VARIABLES LIKE 'binlog_format';\nSHOW VARIABLES LIKE 'binlog_checksum';\nSHOW MASTER STATUS;\n<\/code><\/pre>\n\n\n\n<p>En el slave:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SHOW VARIABLES LIKE 'server_id';\nSHOW VARIABLES LIKE 'read_only';\nSHOW SLAVE STATUS\\G\n<\/code><\/pre>\n\n\n\n<p>Y una prueba real:<\/p>\n\n\n\n<p>En el master:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DATABASE pr_repl;\nUSE pr_repl;\nCREATE TABLE t1 (\n  id INT PRIMARY KEY AUTO_INCREMENT,\n  dato VARCHAR(100)\n);\nINSERT INTO t1(dato) VALUES ('prueba replicacion');\n<\/code><\/pre>\n\n\n\n<p>En el slave:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SELECT * FROM pr_repl.t1;\n<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">7) Problemas t\u00edpicos en este cruce MySQL 5.7 \u2192 MariaDB 10.6<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Error por checksums<\/h3>\n\n\n\n<p>Si el slave no engancha bien o marca errores de lectura de binlog, revisa que en el master est\u00e9:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>binlog_checksum=NONE\n<\/code><\/pre>\n\n\n\n<p>Eso est\u00e1 espec\u00edficamente se\u00f1alado por MariaDB para escenarios donde MariaDB replica desde MySQL. (<a href=\"https:\/\/mariadb.com\/docs\/server\/ha-and-performance\/standard-replication\/setting-up-replication?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">GTID<\/h3>\n\n\n\n<p>No intentes montarlo con <code>MASTER_AUTO_POSITION=1<\/code> ni con GTID de MySQL. MariaDB no usa la implementaci\u00f3n GTID de MySQL para este escenario. (<a href=\"https:\/\/mariadb.com\/docs\/release-notes\/community-server\/about\/compatibility-and-differences\/replication-compatibility-between-mariadb-and-mysql?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Motores o SQL incompatibles<\/h3>\n\n\n\n<p>La replicaci\u00f3n puede arrancar bien y aun as\u00ed fallar despu\u00e9s si el origen usa algo muy espec\u00edfico de MySQL 5.7. MariaDB mantiene compatibilidad amplia, pero no es binariamente id\u00e9ntico a MySQL en todos los comportamientos. (<a href=\"https:\/\/mariadb.com\/docs\/release-notes\/community-server\/about\/compatibility-and-differences\/mariadb-vs-mysql-compatibility?utm_source=chatgpt.com\">MariaDB<\/a>)<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Procedimiento MySQL 5.7.42 (192.168.63.1) \u2192 MariaDB 10.6.24 slave (192.168.63.4), usando archivo\/posici\u00f3n de binlog, que es lo correcto para este cruce MySQL\u2192MariaDB. MariaDB documenta que 10.2+ puede replicar desde MySQL 5.7, y que no usa el GTID de MySQL, por lo que el replica debe engancharse con binary log file + position. Tambi\u00e9n indica que, cuando [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-23","post","type-post","status-publish","format-standard","hentry","category-guias-tecnicas"],"_links":{"self":[{"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/posts\/23","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/comments?post=23"}],"version-history":[{"count":3,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/posts\/23\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/posts\/23\/revisions\/27"}],"wp:attachment":[{"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/media?parent=23"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/categories?post=23"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dim.com.mx\/index.php\/wp-json\/wp\/v2\/tags?post=23"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}