Nota: a replicação mestre-escravo mysql só executa o conteúdo após o acesso. Ou seja, o banco de dados principal e as tabelas devem ser criados após o acesso.
1. Configuração do host (master131)
配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
#设置不要复制的数据库(可设置多个,设置了需要复制的数据库就可以不设置此项)
binlog-ignore-db=mysql
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
Expansão:
Três formatos de log binlog
1. Declaração: Todo sql que modificará os dados será registrado no binlog
2. Linha: não registra as informações relacionadas ao contexto da instrução sql, apenas salva qual registro é modificado
3. Nível misto: uma combinação dos dois acima. A modificação da instrução geral usa o formato de declaração para salvar o log bin, como algumas funções, a instrução não pode completar a operação de replicação mestre-escravo e, em seguida, salva o log bin no formato de linha
2. Configuração do escravo (master135)
配置文件: vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
Três, o host e o escravo reiniciam o serviço mysql
systemctl restart mysqld
Quatro, o host e o escravo fecham o firewall
systemctl stop firewalld
5. Crie uma conta no host e autorize o escravo
conceder escravo de replicação em *. * para 'escravo' @ '%' identificado por '123456';
Erro:
ERROR 1819 (HY000): Sua senha não atende aos requisitos da política atual
Motivo: a configuração da senha é muito simples para estar de acordo com a especificação de configuração de senha do mysql
Solução:
1. Veja as regras de senha completas do mysql
mostrar variáveis como 'validate_password%';
2. Altere o comprimento da senha
definir validate_password_length global = 4;
3. Defina a estratégia de verificação de senha (médio [médio], baixo [baixo])
definir validate_password_policy = 0;
Seis, status do mestre de consulta
mostrar o status do mestre;
Nota: registre o valor do arquivo e posição. Após realizar esta etapa, não opere mais o host mysql para evitar que o valor do estado do host mude.
Sete, configure o host a ser copiado no escravo
#复制主机的命令
change master to master_host='主机ip',
master_user='slave',
master_password='123456',
master_log_file='mysql-bin.具体数字',master_log_pos=具体值;
#启动从机复制功能
start slave;
#查看从机状态
show slave status\G;
Erro:
ERROR 3021 (HY000): Esta operação não pode ser realizada com um thread io escravo em execução; execute STOP SLAVE IO_THREAD FOR CHANNEL '' primeiro.
Motivo: se o escravo estiver conectado ao mestre, ele precisa ser reiniciado
Solução:
stop slave;
reset master;
8. Verificação
Neste ponto, a replicação mestre-escravo do mysql está completa, podemos verificar
1. Crie um banco de dados testdb no host e verifique se o banco de dados foi criado com sucesso
create database testdb;
show databases;
2. A criação é concluída no host, vamos dar uma olhada no computador
Expansão:
1. Pare de copiar funções do serviço
parar escravo;
2. Reconfigure o mestre e o escravo
parar escravo;
redefinir mestre;
3. Verifique se a separação de leitura e gravação
#主机写入 @@环境变量
insert into user values (1,@@hostname);
#在mycat里查询
select * from user;
Vemos que o conteúdo escrito no host e no escravo é o mesmo, então isso prova que a separação entre leitura e escrita não é alcançada.
Ler e gravar configurações de separação
vim /usr/local/mycal/conf/schema.xml
#修改<dataHost>的 balance属性为3
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="3"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.157.133:3306" user="root"
password="root">
<readHost host="hostS1" url="192.168.157.135:3306" user="root" password="root"/>
</writeHost>
</dataHost>
</mycat:schema>
O atributo de equilíbrio em <dataHost>: [tipo de balanceamento de carga]
1), balance = "0", não abra o mecanismo de separação de leitura e gravação, todas as operações de leitura são enviadas para o writeHost disponível no momento.
2), balance = "1", todos readHost e stand by writeHost participam do balanceamento de carga da instrução select, em termos simples, quando o modo dual master dual slave (M1-> S1, M2-> S2 e M1 e M2 são um ao outro Ativo e em espera), em circunstâncias normais, M2, S1, S2 participam do balanceamento de carga da instrução select.
3), balance = "2", todas as operações de leitura são distribuídas aleatoriamente em writeHost e readhost.
4), balance = "3", todas as solicitações de leitura são distribuídas aleatoriamente para o readhost para execução, o writerHost não suporta a pressão de leitura.
Ok, reinicie o serviço mycat e verifique-o
#重启mycat服务
mycat console
#在mycat里的mysql里
use TESTDB;
SELECT * FROM USER;
Vemos que a separação de leitura e gravação foi alcançada