{"id":672,"date":"2026-09-06T12:40:06","date_gmt":"2026-09-06T15:40:06","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/2026\/09\/mariadb-galera-cluster-mariabackup-ubuntu\/"},"modified":"2026-09-10T23:16:34","modified_gmt":"2026-09-11T02:16:34","slug":"mariadb-galera-cluster-mariabackup-ubuntu","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/mariadb-galera-cluster-mariabackup-ubuntu\/","title":{"rendered":"Cluster MariaDB Galera com mariabackup no Ubuntu"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" alt=\"Mascote do LinuxPro ligando os n\u00f3s do cluster MariaDB Galera, com o anel de replica\u00e7\u00e3o e o disco de backup\" src=\"\/wp-content\/uploads\/2026\/09\/mariadb-galera-v4.webp\" width=\"1486\" height=\"856\" \/><\/p>\n<p>Tr\u00eas Ubuntu, um Galera, SST com <strong>mariabackup<\/strong>. N\u00e3o \u00e9 r\u00e9plica ass\u00edncrona: todo n\u00f3 escreve, o quorum decide. Dois n\u00f3s n\u00e3o bastam \u2014 cai um e o outro fica sozinho sem maioria. Abaixo o cluster de tr\u00eas, do pacote ao <code>galera_new_cluster<\/code>, no Ubuntu 24.04 e 26.04.<\/p>\n<p><!-- more --><\/p>\n<h2>Tr\u00eas n\u00f3s, um quorum<\/h2>\n<p>Galera (Codership, Helsinque) entra no MariaDB como <code>libgalera_smm.so<\/code>. Cada commit vira um writeset; os outros certificam e aplicam. InnoDB s\u00f3. MyISAM no cluster \u00e9 dor. A biblioteca \u00e9 o pacote <code>galera-4<\/code> (wsrep API 26.4.x). O m\u00e9todo SST <code>rsync<\/code> trava o donor; o <code>mysqldump<\/code> \u00e9 lento. O <code>mariabackup<\/code> (o bin\u00e1rio hoje se chama <code>mariadb-backup<\/code>) copia a quente e manda o stream via <code>socat<\/code> na porta 4444. O donor continua servindo leitura. Por isso tr\u00eas servidores e esse SST.<\/p>\n<p>Os IPs deste howto \u2014 troque pelos seus:<\/p>\n<pre><code class=\"language-text\">db1  10.0.0.11\ndb2  10.0.0.12\ndb3  10.0.0.13\n<\/code><\/pre>\n<p>Mesma vers\u00e3o de MariaDB nos tr\u00eas. Mesmo <code>wsrep_cluster_name<\/code>. Rel\u00f3gio razoavelmente junto (NTP\/chrony). Disco local; NFS no datadir n\u00e3o.<\/p>\n<h2>O mapa em setembro de 2026<\/h2>\n<ul>\n<li><strong>Ubuntu 24.04<\/strong> (noble): MariaDB <strong>10.11<\/strong> e <code>galera-4<\/code> 26.4.16 na distro. Serve. O patch de seguran\u00e7a do Galera de junho de 2026 (<a href=\"https:\/\/mariadb.org\/mariadb-community-server-corrective-releases\/\">11.8.8 \/ 11.4.12 \/ 10.11.18<\/a>) pede o repo da Funda\u00e7\u00e3o se voc\u00ea ainda est\u00e1 no pacote original do ISO.<\/li>\n<li><strong>Ubuntu 26.04<\/strong> (resolute): MariaDB <strong>11.8<\/strong> no <code>main<\/code> \u2014 LTS at\u00e9 junho de 2028. Galera 26.4.24+. O repo mariadb.org ainda n\u00e3o publica suite <code>resolute<\/code>; use a distro.<\/li>\n<li>Bin\u00e1rio de backup: <code>mariadb-backup<\/code>. O valor de <code>wsrep_sst_method<\/code> continua <code>mariabackup<\/code> \u2014 o nome antigo do SST. N\u00e3o misture.<\/li>\n<\/ul>\n<p>Quem j\u00e1 empilha PHP no mesmo host: <a href=\"\/2026\/09\/nginx-varias-versoes-php-debian-ubuntu\/\">Nginx e v\u00e1rias vers\u00f5es de PHP<\/a>. O <a href=\"\/2026\/09\/a-historia-do-glpi\/\">GLPI<\/a> \u00e9 um dos clientes t\u00edpicos deste cluster.<\/p>\n<h2>Pacotes e o libgalera<\/h2>\n<p>Nos tr\u00eas n\u00f3s. Ubuntu 26.04, distro:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt install -y mariadb-server mariadb-backup galera-4 socat\n<\/code><\/pre>\n<p>Ubuntu 24.04 com 11.8 da Funda\u00e7\u00e3o (recomendado se voc\u00ea quer o Galera patchado):<\/p>\n<pre><code class=\"language-bash\">sudo apt install -y curl ca-certificates apt-transport-https\ncurl -LsS https:\/\/r.mariadb.com\/downloads\/mariadb_repo_setup \n  | sudo bash -s -- --mariadb-server-version=\"11.8\"\nsudo apt update\nsudo apt install -y mariadb-server mariadb-backup galera-4 socat\n<\/code><\/pre>\n<p>O path da biblioteca muda conforme a origem do pacote. Confira de verdade:<\/p>\n<pre><code class=\"language-bash\">dpkg -L galera-4 | grep libgalera_smm.so\n<\/code><\/pre>\n<p>Na distro Ubuntu costuma ser <code>\/usr\/lib\/libgalera_smm.so<\/code>. No repo MariaDB, <code>\/usr\/lib\/galera\/libgalera_smm.so<\/code>. Esse path vai no <code>wsrep_provider<\/code>. Errar aqui e o <code>mariadbd<\/code> sobe sem cluster, calado.<\/p>\n<p>Pare o servi\u00e7o antes de editar \u2014 a instala\u00e7\u00e3o j\u00e1 deixou um MariaDB sozinho no ar:<\/p>\n<pre><code class=\"language-bash\">sudo systemctl stop mariadb\nsudo systemctl enable mariadb\n<\/code><\/pre>\n<h2>Rede, firewall, AppArmor<\/h2>\n<p>Galera fala em quatro portas. S\u00f3 entre os tr\u00eas IPs, n\u00e3o no mundo:<\/p>\n<ul>\n<li><code>3306\/tcp<\/code> \u2014 cliente SQL<\/li>\n<li><code>4567\/tcp<\/code> (e UDP se for multicast) \u2014 replica\u00e7\u00e3o wsrep<\/li>\n<li><code>4568\/tcp<\/code> \u2014 IST<\/li>\n<li><code>4444\/tcp<\/code> \u2014 SST do mariabackup\/socat<\/li>\n<\/ul>\n<pre><code class=\"language-bash\">NET=10.0.0.0\/24\nfor p in 3306 4567 4568 4444; do\n  sudo ufw allow proto tcp from \"$NET\" to any port \"$p\"\ndone\nsudo ufw allow proto udp from \"$NET\" to any port 4567\nsudo ufw reload\n<\/code><\/pre>\n<p>No <code>\/etc\/hosts<\/code> dos tr\u00eas:<\/p>\n<pre><code class=\"language-text\">10.0.0.11  db1\n10.0.0.12  db2\n10.0.0.13  db3\n<\/code><\/pre>\n<p>AppArmor no Ubuntu 26.04 passou o perfil do <code>mariadbd<\/code> para <em>enforce<\/em>. SST chama <code>dash<\/code> + <code>wsrep_sst_mariabackup<\/code> e o perfil padr\u00e3o ainda nega. Se o joiner morrer com <code>apparmor=\"DENIED\"<\/code> no <code>dmesg<\/code>:<\/p>\n<pre><code class=\"language-bash\">sudo apt install -y apparmor-utils\n# 24.04\nsudo aa-complain \/usr\/sbin\/mariadbd\n# 26.04 (perfil novo)\nsudo aa-complain \/etc\/apparmor.d\/mariadbd 2>\/dev\/null || true\ndmesg -T | grep -i apparmor | tail\n<\/code><\/pre>\n<p>SST longo estoura o timeout de 90 s do systemd. Nos tr\u00eas:<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/etc\/systemd\/system\/mariadb.service.d\nsudo tee \/etc\/systemd\/system\/mariadb.service.d\/galera.conf &gt;\/dev\/null &lt;&lt;'EOF'\n[Service]\nTimeoutStartSec=0\nEOF\nsudo systemctl daemon-reload\n<\/code><\/pre>\n<h2>60-galera.cnf<\/h2>\n<p>O Ubuntu j\u00e1 traz <code>\/etc\/mysql\/mariadb.conf.d\/60-galera.cnf<\/code>. Esvazie o coment\u00e1rio e deixe assim \u2014 s\u00f3 mudam <code>wsrep_node_name<\/code>, <code>wsrep_node_address<\/code> e, se preciso, o path do <code>.so<\/code>.<\/p>\n<p>Em <strong>db1<\/strong>:<\/p>\n<pre><code class=\"language-ini\">[galera]\nwsrep_on=ON\nwsrep_provider=\/usr\/lib\/galera\/libgalera_smm.so\nwsrep_cluster_name=\"linuxpro\"\nwsrep_cluster_address=\"gcomm:\/\/10.0.0.11,10.0.0.12,10.0.0.13\"\nwsrep_node_name=db1\nwsrep_node_address=10.0.0.11\nwsrep_sst_method=mariabackup\nwsrep_sst_auth=mariabackup:troque-esta-senha\nwsrep_provider_options=\"gcache.size=1G;gcache.recover=yes\"\n\nbinlog_format=ROW\ndefault_storage_engine=InnoDB\ninnodb_autoinc_lock_mode=2\ninnodb_doublewrite=1\nbind-address=0.0.0.0\n<\/code><\/pre>\n<p>Em db2 e db3 copie o arquivo e troque s\u00f3 o nome e o IP do n\u00f3. O <code>gcomm:\/\/<\/code> lista os tr\u00eas em todos \u2014 Galera ignora o endere\u00e7o pr\u00f3prio. N\u00e3o deixe <code>gcomm:\/\/<\/code> vazio no arquivo permanente: isso bootstrapa um cluster novo a cada start.<\/p>\n<p>No <code>50-server.cnf<\/code>, comente o <code>bind-address = 127.0.0.1<\/code> se ainda estiver l\u00e1. O 60 ganha porque carrega depois, mas n\u00e3o dependa da ordem para sempre.<\/p>\n<h2>Usu\u00e1rio do SST<\/h2>\n<p>O donor precisa de um usu\u00e1rio local. Na 11.8 a conta tempor\u00e1ria autom\u00e1tica existe se voc\u00ea <em>n\u00e3o<\/em> definir <code>wsrep_sst_auth<\/code> \u2014 funciona, mas o howto deixa expl\u00edcito, igual nos tr\u00eas n\u00f3s, e serve no 10.11. Suba o MariaDB <strong>ainda sem Galera<\/strong> uma vez, crie o usu\u00e1rio, pare de novo. Ou crie depois do bootstrap no db1 e replique. Mais simples: bootstrap primeiro, crie o usu\u00e1rio no cluster (vai para os tr\u00eas), s\u00f3 ent\u00e3o junte db2\/db3.<\/p>\n<p>Ordem pr\u00e1tica deste post: bootstrap db1 <em>com<\/em> <code>wsrep_sst_auth<\/code> j\u00e1 no cnf, crie o usu\u00e1rio nele antes de ligar db2.<\/p>\n<pre><code class=\"language-sql\">CREATE USER 'mariabackup'@'localhost' IDENTIFIED BY 'troque-esta-senha';\nGRANT RELOAD, PROCESS, LOCK TABLES, BINLOG MONITOR ON *.* TO 'mariabackup'@'localhost';\nFLUSH PRIVILEGES;\n<\/code><\/pre>\n<p><code>BINLOG MONITOR<\/code> \u00e9 o nome desde 10.5; <code>REPLICATION CLIENT<\/code> ainda funciona como alias em v\u00e1rias 10.11. O backup conecta em localhost no donor \u2014 n\u00e3o abra esse user na rede.<\/p>\n<p><img decoding=\"async\" alt=\"Mascote LinuxPro conectando um joiner ao donor durante SST do MariaDB Galera com mariabackup\" src=\"\/wp-content\/uploads\/2026\/09\/mariadb-galera-sst-ubuntu-v2.webp\" \/><\/p>\n<h2>Bootstrap e os dois joiners<\/h2>\n<p>Nos tr\u00eas o servi\u00e7o est\u00e1 parado, o cnf j\u00e1 est\u00e1 no disco. S\u00f3 o primeiro n\u00f3 nasce o cluster:<\/p>\n<pre><code class=\"language-bash\"># em db1\nsudo galera_new_cluster\n<\/code><\/pre>\n<p>Isso \u00e9 um wrapper systemd que sobe o <code>mariadbd<\/code> com <code>--wsrep-new-cluster<\/code>. Confira:<\/p>\n<pre><code class=\"language-sql\">SHOW GLOBAL STATUS LIKE 'wsrep_cluster_size';\nSHOW GLOBAL STATUS LIKE 'wsrep_local_state_comment';\nSHOW GLOBAL STATUS LIKE 'wsrep_ready';\n<\/code><\/pre>\n<p>Esperado: size 1, <code>Synced<\/code>, <code>ON<\/code>. Crie agora o usu\u00e1rio SST acima. Depois, nos outros:<\/p>\n<pre><code class=\"language-bash\"># em db2, depois em db3 \u2014 um de cada vez\nsudo systemctl start mariadb\n<\/code><\/pre>\n<p>O joiner pede SST ao donor. Log: <code>journalctl -u mariadb -f<\/code> e, no datadir, <code>mariadb-backup.backup.log<\/code> (donor) \/ <code>mariadb-backup.prepare.log<\/code> (joiner). Datadir Ubuntu 24.04: <code>\/var\/lib\/mysql<\/code>. Ubuntu 26.04 da distro: confira \u2014 algumas builds 11.8 usam <code>\/var\/lib\/mariadb<\/code>.<\/p>\n<p>Quando o size for 3 e os tr\u00eas disserem <code>Synced<\/code>:<\/p>\n<pre><code class=\"language-sql\">SHOW GLOBAL STATUS LIKE 'wsrep_incoming_addresses';\nSHOW GLOBAL STATUS LIKE 'wsrep_cluster_status';\n<\/code><\/pre>\n<p><code>Primary<\/code>. Crie um schema em db1, <code>SHOW DATABASES<\/code> em db3. Se apareceu, o writeset passou.<\/p>\n<h2>Backup a quente e o cluster morto<\/h2>\n<p>Backup do cluster \u00e9 backup de <strong>um<\/strong> n\u00f3. Tire-o do balancer, desincronize, rode o backup, volte:<\/p>\n<pre><code class=\"language-bash\">mariadb -e \"SET GLOBAL wsrep_desync=ON\"\nsudo mariadb-backup --backup --galera-info \n  --target-dir=\/backup\/full \n  --user=mariabackup --password='troque-esta-senha'\nmariadb -e \"SET GLOBAL wsrep_desync=OFF\"\n<\/code><\/pre>\n<p>O n\u00f3 pede IST e alcan\u00e7a os outros. <code>wsrep_local_state_comment<\/code> volta a <code>Synced<\/code> antes de devolver tr\u00e1fego.<\/p>\n<p>Se os <strong>tr\u00eas<\/strong> ca\u00edrem juntos, o cluster acabou \u2014 os dados n\u00e3o. Olhe <code>grastate.dat<\/code> em cada datadir. O maior <code>seqno<\/code> com <code>safe_to_bootstrap: 1<\/code> \u00e9 o bootstrap. Se todos est\u00e3o <code>seqno: -1<\/code> (crash):<\/p>\n<pre><code class=\"language-bash\">sudo galera_recovery\n<\/code><\/pre>\n<p>Edite o <code>safe_to_bootstrap<\/code> para 1 s\u00f3 no mais avan\u00e7ado e:<\/p>\n<pre><code class=\"language-bash\">sudo galera_new_cluster   # nesse n\u00f3\nsudo systemctl start mariadb   # nos outros dois\n<\/code><\/pre>\n<p>N\u00e3o rode <code>galera_new_cluster<\/code> num cluster que ainda tem n\u00f3 no ar \u2014 nasce UUID novo e voc\u00ea fende o c\u00e9rebro.<\/p>\n<p>Quem ainda est\u00e1 no 10.11 da 24.04 e vai pular major: o SST <code>mariabackup<\/code> <em>n\u00e3o<\/em> atravessa algumas majors (redo log, <a href=\"https:\/\/jira.mariadb.org\/browse\/MDEV-27437\">MDEV-27437<\/a>). Nesse pulo use <code>rsync<\/code> tempor\u00e1rio, ou suba o major em todos parados e bootstrap de novo.<\/p>\n<h2>O que costuma quebrar<\/h2>\n<ul>\n<li><code>wsrep_sst_method=mariadb-backup<\/code> \u2014 nome errado. \u00c9 <code>mariabackup<\/code>.<\/li>\n<li><code>wsrep_provider<\/code> apontando para um <code>.so<\/code> que o <code>dpkg -L<\/code> n\u00e3o listou.<\/li>\n<li>AppArmor DENIED no joiner; o log do MariaDB s\u00f3 diz \u201cSST failed\u201d.<\/li>\n<li>systemd matou o joiner aos 90 s. <code>TimeoutStartSec=0<\/code>.<\/li>\n<li><code>socat<\/code> ausente: <code>WSREP_SST: [ERROR] socat not found<\/code>.<\/li>\n<li>Dois n\u00f3s. Quorum 2\/2: um cai, o outro vira Non-Primary. Tr\u00eas, ou um <code>garbd<\/code>.<\/li>\n<li><code>bind-address=127.0.0.1<\/code> ainda ativo: os outros n\u00e3o conectam em 4567.<\/li>\n<\/ul>\n<p>O git do provider: <a href=\"https:\/\/github.com\/codership\/galera\">github.com\/codership\/galera<\/a>. Docs: <a href=\"https:\/\/mariadb.com\/docs\/galera-cluster\/galera-management\/installation-and-deployment\/getting-started-with-mariadb-galera-cluster\">Getting Started<\/a> \u00b7 SST: <a href=\"https:\/\/mariadb.com\/docs\/galera-cluster\/high-availability\/state-snapshot-transfers-ssts-in-galera-cluster\/mariadb-backup-sst-method\">mariadb-backup SST method<\/a> \u00b7 op\u00e7\u00f5es obrigat\u00f3rias: <a href=\"https:\/\/mariadb.com\/docs\/galera-cluster\/galera-management\/configuration\/configuring-mariadb-galera-cluster\">Configuring MariaDB Galera Cluster<\/a> \u00b7 repo: <a href=\"https:\/\/mariadb.com\/docs\/server\/server-management\/install-and-upgrade-mariadb\/installing-mariadb\/binary-packages\/installing-mariadb-deb-files\">DEB \/ apt<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tr\u00eas Ubuntu, um Galera, SST com mariabackup. N\u00e3o \u00e9 r\u00e9plica ass\u00edncrona: todo n\u00f3 escreve, o quorum decide. Dois n\u00f3s n\u00e3o bastam \u2014 cai um e o outro fica sozinho sem maioria. Abaixo o cluster de tr\u00eas, do pacote ao galera_new_cluster, no Ubuntu 24.04 e 26.04. Tr\u00eas n\u00f3s, um quorum Galera (Codership, Helsinque) entra no MariaDB &#8230; <a title=\"Cluster MariaDB Galera com mariabackup no Ubuntu\" class=\"read-more\" href=\"https:\/\/www.linuxpro.com.br\/es\/2026\/09\/mariadb-galera-cluster-mariabackup-ubuntu\/\" aria-label=\"Read more about Cluster MariaDB Galera com mariabackup no Ubuntu\">Read more<\/a><\/p>","protected":false},"author":0,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21,12,2,120,3],"tags":[329,327,328,326,5],"class_list":["post-672","post","type-post","status-publish","format-standard","hentry","category-infra","category-lamp","category-linux","category-servidores","category-ubuntu","tag-cluster","tag-galera","tag-mariabackup","tag-mariadb","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/672","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/types\/post"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/comments?post=672"}],"version-history":[{"count":6,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/672\/revisions"}],"predecessor-version":[{"id":1523,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/posts\/672\/revisions\/1523"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/media?parent=672"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/categories?post=672"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/es\/wp-json\/wp\/v2\/tags?post=672"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}