Você conhece dois parâmetros de configuração importantes da replicação mestre-escravo do MySQL?

Prefácio

Quando configuramos a replicação mestre-escravo do MySQL, além dos parâmetros de configuração necessários, esses dois parâmetros são frequentemente configurados: innodb_flush_log_at_trx_commit
e sync_binlog. Vamos dar uma olhada na função deste parâmetro.

innodb_flush_log_at_trx_commit

Ao confirmar a transação, grave o log de redo no disco. O chamado log de redo serve para registrar as alterações feitas nos dados. Por exemplo, se você alterar o valor do campo de nome para "id = 10", este é um log. Se quisermos confirmar uma transação, liberaremos o log de redo do buffer de log de redo para o arquivo de disco de acordo com uma determinada estratégia. No momento, essa estratégia é configurada por meio do innodb_flush_log_at_trx_commit e possui várias opções.

O valor é 0: Quando a transação é confirmada, os dados no buffer de redo log não são descarregados no arquivo de disco imediatamente, mas a thread principal do InnoDB é descarregada no disco a cada segundo. Neste momento, você pode confirmar a transação e, como resultado, o mysql está desativado e todos os dados na memória são perdidos.

O valor é 1: ao confirmar uma transação, você deve liberar o log de redo da memória para o arquivo do disco.Contanto que a transação seja consolidada com êxito, o log de redo deve estar no disco. Observe que, devido ao recurso de "gravação atrasada" do sistema operacional, o flashing neste momento só é gravado no buffer do sistema operacional, de modo que a operação de sincronização pode garantir que deve ser persistido no disco rígido.

Valor 2: ao confirmar a transação, grave o log de redo no cache do cache do sistema operacional correspondente ao arquivo do disco, em vez de inserir diretamente no arquivo do disco. Pode levar 1 segundo para gravar os dados do cache do sistema operacional no arquivo do disco.

Pode-se ver que apenas 1 pode realmente garantir a durabilidade da transação, mas como a operação de atualização fsync () está bloqueada e não retorna até que seja concluída, sabemos que a velocidade de gravação no disco é muito lenta, então o desempenho do MySQL será declínio óbvio. Se você não se preocupa com a perda de transações, 0 e 2 podem atingir um desempenho superior.

# 查询
select @@innodb_flush_log_at_trx_commit;

Insira a descrição da imagem aqui

sync_binlog

Este parâmetro controla o processo de gravação de logs binários no disco.

Os valores válidos deste parâmetro são 0, 1, N:

0:默认值。事务提交后,将二进制日志从缓冲写入磁盘,但是不进行刷新操作(fsync()),此时只是写入了操作系统缓冲,若操作系统宕机则会丢失部分二进制日志。

1:事务提交后,将二进制文件写入磁盘并立即执行刷新操作,相当于是同步写入磁盘,不经过操作系统的缓存。

N:每写N次操作系统缓冲就执行一次刷新操作。

Definir este parâmetro com um valor acima de 1 melhorará o desempenho do banco de dados, mas também será acompanhado pelo risco de perda de dados.

Os arquivos de log binários envolvem a recuperação de dados e, se você deseja obter a consistência máxima entre mestre e escravo, deve definir este parâmetro como 1, mas isso também causará uma certa perda de desempenho.

Acho que você gosta

Origin blog.csdn.net/qq_36551991/article/details/111462474
Recomendado
Clasificación