Passo a passo, para construção de um ambiente MySQL InnoDB Cluster utilizando:
- Oracle Linux 10
- MySQL 8.4
- 4 instâncias na mesma máquina
- MySQL Shell
- Base de dados de exemplo world
O objetivo é demonstrar a implementação prática do Group Replication e preparar o ambiente para cenários futuros de alta disponibilidade com failover automático.
Arquitetura do Ambiente
Topologia
|
Instância |
Porta |
Função Inicial |
|
mysql1 |
3306 |
Primário |
|
mysql2 |
3307 |
Secundário |
|
mysql3 |
3308 |
Secundário |
|
mysql4 |
3309 |
Secundário |
Observação: Todas as instâncias executam no mesmo host, diferenciadas por porta e diretório de dados.
Preparação do Ambiente
Estrutura de Diretórios
Criar diretório base para as instâncias:
|
1 2 3 |
mkdir /mysql cd /mysql mkdir 3306 3307 3308 3309 |
Cada instância possuirá seu próprio:
- datadir
- socket
- arquivo de log
- pid-file
Criação dos Arquivos de Configuração
Copiar o arquivo base:
|
1 2 3 4 |
cp /etc/my.cnf /mysql/my3306.cnf -p cp /mysql/my3306.cnf /mysql/my3307.cnf -p cp /mysql/my3306.cnf /mysql/my3308.cnf -p cp /mysql/my3306.cnf /mysql/my3309.cnf -p |
Ajustar parâmetros por instância
Exemplo para 3306: Repetir para todos tocando os numeros(3307,3308,3309) e nomes dos arquivos
|
1 2 3 4 5 6 |
[mysqld] port=3306 datadir=/mysql/3306/dados socket=/mysql/3306/dados/mysql.sock log-error=/mysql/3306/dados/mysqld.log pid-file=/mysql/3306/dados/mysqld.pid |
Inicialização das Instâncias
Inicialização Insegura (Laboratório, root sem senha !)
|
1 2 3 4 |
mysqld --defaults-file=/mysql/my3306.cnf --initialize-insecure --user=mysql mysqld --defaults-file=/mysql/my3307.cnf --initialize-insecure --user=mysql mysqld --defaults-file=/mysql/my3308.cnf --initialize-insecure --user=mysql mysqld --defaults-file=/mysql/my3309.cnf --initialize-insecure --user=mysql |
Inicialização dos Serviços
|
1 2 3 4 |
mysqld --defaults-file=/mysql/my3306.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3307.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3308.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3309.cnf --user=mysql --daemonize |
Validar se estão ativos:
|
1 |
ps -ef | grep mysql |
Importação da Base de Dados World
Download:
|
1 2 3 4 5 6 7 8 9 |
wget https://downloads.mysql.com/docs/world-db.zip unzip world-db.zip cd world-db #Importação na instância primária (3306): mysql -uroot --password= -h127.0.0.1 -P3306 source world.sql exit |
Essa base será utilizada para validar a replicação posteriormente.
Instalação do MySQL Shell
|
1 2 3 4 5 6 |
wget https://downloads.mysql.com/archives/get/p/43/file/mysql-shell-8.4.7-1.el10.x86_64.rpm rpm -ivh mysql-shell-8.4.7-1.el10.x86_64.rpm #Validar instalação: mysqlsh --version |
Criação do Usuário Administrativo do Cluster
Em cada instância:
Conceder privilégios necessários para:
- Group Replication
- Clone
- Administração de variáveis
- Metadata do cluster
(Conforme lista de GRANT executada no laboratório.)
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
CREATE user rep identified by 'rep'; GRANT CLONE_ADMIN, CONNECTION_ADMIN, CREATE USER, EXECUTE, FILE, GROUP_REPLICATION_ADMIN, PERSIST_RO_VARIABLES_ADMIN, PROCESS, RELOAD, REPLICATION CLIENT, REPLICATION SLAVE, REPLICATION_APPLIER, REPLICATION_SLAVE_ADMIN, ROLE_ADMIN, SELECT, SHUTDOWN, SYSTEM_VARIABLES_ADMIN ON *.* TO 'rep'@'%' WITH GRANT OPTION; GRANT DELETE, INSERT, UPDATE ON mysql.* TO 'rep'@'%' WITH GRANT OPTION; GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata.* TO 'rep'@'%' WITH GRANT OPTION; GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_bkp.* TO 'rep'@'%' WITH GRANT OPTION; GRANT ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE, CREATE TEMPORARY TABLES, CREATE VIEW, DELETE, DROP, EVENT, EXECUTE, INDEX, INSERT, LOCK TABLES, REFERENCES, SHOW VIEW, TRIGGER, UPDATE ON mysql_innodb_cluster_metadata_previous.* TO 'rep'@'%' WITH GRANT OPTION; |
Importante: O usuário deve existir em todas as instâncias antes da criação do cluster.
Validação e Configuração das Instâncias
Conectar via MySQL Shell
|
1 2 3 4 5 6 7 |
mysqlsh -urep -prep -h127.0.0.1 -P3306 --js #Verificar configuração dba.checkInstanceConfiguration() #Ajustar Automaticamente dba.configureInstance() |
Repetir para todas as instâncias (3306, 3307, 3308, 3309).
Reinício das Instâncias
|
1 2 3 4 5 6 7 8 9 10 |
mysqladmin -uroot --password= -h127.0.0.1 -P3306 shutdown mysqladmin -uroot --password= -h127.0.0.1 -P3307 shutdown mysqladmin -uroot --password= -h127.0.0.1 -P3308 shutdown mysqladmin -uroot --password= -h127.0.0.1 -P3309 shutdown #Subir novamente: mysqld --defaults-file=/mysql/my3306.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3307.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3308.cnf --user=mysql --daemonize mysqld --defaults-file=/mysql/my3309.cnf --user=mysql --daemonize |
Criação do InnoDB Cluster
Conectar na instância 3306:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
mysqlsh -urep -prep -h127.0.0.1 -P3306 --js #Definir conexões: #Criar cluster: var cluster = dba.createCluster('MySQLBR'); #Adicionar instâncias: cluster.addInstance(c2); cluster.addInstance(c3); cluster.addInstance(c4); #Verificar status: cluster.status(); |
Validações Técnicas
Membros do Grupo
|
1 2 3 4 5 |
SELECT * FROM performance_schema.replication_group_members; #Status do Group Replication SHOW STATUS LIKE '%group_replication%'; SHOW GLOBAL VARIABLES LIKE '%group_replication%'; |
Persistência Automática de Configurações
Após execução do dba.configureInstance(), o MySQL Shell cria:
|
1 2 3 4 |
mysqld-auto.cnf #Visualizar: cat mysqld-auto.cnf | jq |
Esse arquivo contém variáveis persistidas automaticamente, como:
- group_replication_group_name
- group_replication_start_on_boot
- group_replication_local_address
- server-id
Conclusão
Este laboratório demonstra, de forma estruturada e técnica, a implementação de um MySQL InnoDB Cluster com quatro instâncias no mesmo host, utilizando MySQL 8.4.
O processo evidenciou:
- A importância da preparação correta das instâncias
- A automação fornecida pelo MySQL Shell
- O funcionamento interno do Group Replication
- A persistência automática de parâmetros
Este ambiente estabelece a base para evolução futura, incluindo:
- Implementação de ProxySQL
- Balanceamento de carga
- Failover automático
- Separação de leitura e escrita
Leitura sugerida:
https://dev.mysql.com/doc/refman/8.4/en/group-replication.html
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-innodb-cluster.html
hands-on





