

# Suporte a memcached MySQL
<a name="Appendix.MySQL.Options.memcached"></a>

O Amazon RDS oferece suporte ao uso da interface `memcached` para tabelas do InnoDB introduzido no MySQL 5.6. A API `memcached` permite que os aplicativos usem as tabelas do InnoDB de forma semelhante aos armazenamentos de dados de chave/valor NoSQL.

**nota**  
A interface do memcached não está mais disponível no MySQL 8.4. Ao atualizar suas instâncias de banco de dados para o MySQL 8.4, você deve desativar `memcached` nos grupos de opções existentes.

A interface `memcached` é um cache simples baseado em chave. Os aplicativos usam `memcached` para inserir, manipular e recuperar pares de dados de valor/chave do cache. O MySQL 5.6 introduziu um plugin que implementa um serviço de daemon que expõe os dados das tabelas do InnoDB através do protocolo `memcached`. Para ter mais informações sobre o plug-in `memcached` MySQL, consulte [Integração do InnoDB com memcached](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached.html).

**Como habilitar o suporte a memcached para uma instância de banco de dados do RDS para MySQL**

1. Determine o grupo de segurança a ser usado para controlar o acesso à interface de `memcached`. Se o conjunto de aplicações que já estão usando a interface SQL for o mesmo conjunto que acessará a interface `memcached`, você poderá usar o grupo de segurança de VPC existente usado pela interface SQL. Se um conjunto diferente de aplicativos acessar a interface `memcached`, defina um novo grupo de segurança de VPC ou grupo de segurança de banco de dados. Para ter mais informações sobre como gerenciar grupo de seguranças, consulte [Controlar acesso com grupos de segurança](Overview.RDSSecurityGroups.md) 

1. Crie um grupo de opções de banco de dados personalizado, selecionando MySQL como o tipo e a versão do mecanismo. Para ter mais informações sobre como criar um grupo de opções, consulte [Criar um grupo de opções](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.Create).

1. Adicione a opção `MEMCACHED` ao grupo de opções. Especifique a porta que a interface `memcached` usará e o grupo de segurança a ser usado para controlar o acesso à interface. Para mais informações sobre a adição de opções, consulte [Adicionar uma opção a um grupo de opções](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.AddOption).

1. Modifique as configurações de opções para configurar os parâmetros `memcached`, se necessário. Para mais informações sobre como modificar as configurações da opção, consulte [Modificar uma configuração de opção](USER_WorkingWithOptionGroups.md#USER_WorkingWithOptionGroups.ModifyOption).

1. Aplique o grupo de opções a uma instância. O Amazon RDS habilita o suporte ao `memcached` para essa instância quando o grupo de opções for aplicado:
   + Você habilita o suporte de `memcached` para uma nova instância especificando o grupo de opções personalizado ao executar a instância. Para ter mais informações sobre como executar uma instância MySQL, consulte [Criar uma instância de banco de dados do Amazon RDS](USER_CreateDBInstance.md).
   + Você habilita o suporte de `memcached` para uma instância existente especificando o grupo de opções personalizado ao modificar a instância. Para ter mais informações sobre a modificação de uma instância de banco de dados , consulte [Modificar uma instância de banco de dados do Amazon RDS](Overview.DBInstance.Modifying.md).

1. Especifique quais colunas em suas tabelas MySQL podem ser acessadas por meio da interface de `memcached`. O plug-in `memcached` cria uma tabela de catálogo chamada `containers` em um banco de dados dedicado chamado `innodb_memcache`. Você insere uma linha na tabela `containers` para mapear uma tabela do InnoDB para acesso via `memcached`. Você especifica uma coluna na tabela do InnoDB que é usada para armazenar os valores das chaves do `memcached` e uma ou mais colunas que são usadas para armazenar os valores de dados associados à chave. Você também especifica um nome que um aplicativo `memcached` usa para se referir a esse conjunto de colunas. Para obter detalhes sobre como inserir linhas na tabela `containers`, consulte [Elementos internos do plug-in memcached do InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-internals.html). Para obter um exemplo de mapeamento de uma tabela do InnoDB e acessá-la por meio de `memcached`, consulte [Writing applications for the InnoDB memcached plugin](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-developing.html).

1. Se as aplicações que acessarem a interface `memcached` estiverem em computadores ou instâncias do EC2 diferentes das aplicações que usam a interface SQL, adicione as informações de conexão desses computadores ao grupo de segurança de VPC associado à instância MySQL. Para ter mais informações sobre como gerenciar grupo de seguranças, consulte [Controlar acesso com grupos de segurança](Overview.RDSSecurityGroups.md).

Você desliga o suporte `memcached` para uma instância modificando essa instância e especificando o grupo de opções padrão para sua versão do MySQL. Para ter mais informações sobre a modificação de uma instância de banco de dados , consulte [Modificar uma instância de banco de dados do Amazon RDS](Overview.DBInstance.Modifying.md).

## Considerações sobre segurança do MySQL memcached
<a name="w2aac47c83c15c13"></a>

O protocolo `memcached` não oferece suporte para a autenticação do usuário. Para ter mais informações sobre as considerações de segurança do MySQL `memcached`, consulte [Considerações de segurança para o plug-in memcached do InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-memcached-security.html) na documentação do MySQL.

Você pode realizar as seguintes ações para ajudar a aumentar a segurança da interface `memcached`:
+ Especifique uma porta diferente do padrão de 11211 ao adicionar a opção `MEMCACHED` ao grupo de opções.
+ Certifique-se de associar a interface `memcached` com um grupo de segurança de VPC que limite o acesso a endereços de clientes conhecidos ou confiáveis e a instâncias do EC2. Para ter mais informações sobre como gerenciar grupo de seguranças, consulte [Controlar acesso com grupos de segurança](Overview.RDSSecurityGroups.md).

## Informações sobre conexão com MySQL memcached
<a name="w2aac47c83c15c15"></a>

Para acessar a interface `memcached`, um aplicativo deve especificar o nome DNS da instância do Amazon RDS e o número da porta `memcached`. Por exemplo, se uma instância tiver um nome DNS `my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com` e a interface memcached estiver usando a porta 11212, as informações de conexão especificadas no PHP serão:

 

```
1. <?php
2. 
3. $cache = new Memcache;
4. $cache->connect('my-cache-instance.cg034hpkmmjt.region.rds.amazonaws.com',11212);
5. ?>
```

**Para encontrar o nome DNS e a porta memcached de uma instância do MySQL**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. No canto superior direito do Console de gerenciamento da AWS, selecione a região que contém a instância de banco de dados.

1. No painel de navegação, escolha **Databases (Bancos de dados)**.

1. Escolha o nome da instância de banco de dados MySQL para exibir os detalhes.

1. Na seção **Connect (Conectar)**, anote o valor do campo **Endpoint**. O nome do DNS é o mesmo que o do endpoint. Além disso, observe que a porta na seção **Connect (Conectar)** não é usada para acessar a interface `memcached`.

1. Na seção **Details (Detalhes)**, anote o nome listado no campo **Option Group (Grupo de opções)**.

1. No painel de navegação, escolha **Option groups (Grupos de opções)**.

1. Escolha o nome do grupo de opções usado pela instância de banco de dados MySQL para mostrar os detalhes do grupo de opções. Na seção **Options (Opções)**, anote o valor da configuração de **Port (Porta)** na opção **MEMCACHED**.

## Configurações de opções de MySQL memcached
<a name="w2aac47c83c15c17"></a>

O Amazon RDS expõe os parâmetros `memcached` do MySQL como configurações de opções na opção `MEMCACHED` do Amazon RDS.

### Parâmetros de MySQL memcached
<a name="w2aac47c83c15c17b4"></a>
+  `DAEMON_MEMCACHED_R_BATCH_SIZE` – um inteiro que especifica quantas operações de leitura `memcached` devem ser realizadas antes de fazer um COMMIT para iniciar uma nova transação. Os valores permitidos são de 1 a 4294967295; o padrão é 1. A opção não terá efeito até que a instância seja reiniciada.
+  `DAEMON_MEMCACHED_W_BATCH_SIZE` – um inteiro que especifica quantas operações de gravação `memcached`, como adicionar, definir ou aumentar, devem ser realizadas antes de fazer um COMMIT para iniciar uma nova transação. Os valores permitidos são de 1 a 4294967295; o padrão é 1. A opção não terá efeito até que a instância seja reiniciada.
+  `INNODB_API_BK_COMMIT_INTERVAL` – um inteiro que especifica com que frequência as conexões inativas de confirmação automática usam a interface `memcached` do InnoDB. Os valores permitidos são de 1 a 1073741824; o padrão é 5. A opção entra em vigor imediatamente, sem exigir que você reinicie a instância.
+  `INNODB_API_DISABLE_ROWLOCK` – um booliano que desabilita (1 (true)) ou habilita (0 (false)) o uso de bloqueios de linha ao usar a interface `memcached` do InnoDB. O padrão é 0 (false). A opção não terá efeito até que a instância seja reiniciada.
+  `INNODB_API_ENABLE_MDL` – um booliano que, quando definido como 0 (false), bloqueia a tabela usada pelo plug-in `memcached` do InnoDB, de modo que ela não possa ser descartada ou alterado pela DDL por meio da interface SQL. O padrão é 0 (false). A opção não terá efeito até que a instância seja reiniciada.
+  `INNODB_API_TRX_LEVEL` – um número inteiro que especifica o nível de isolamento da transação para consultas processadas pela interface `memcached`. Os valores permitidos são de 0 a 3. O padrão é 0. A opção não terá efeito até que a instância seja reiniciada.

O Amazon RDS configura esses parâmetros `memcached` MySQL, e eles não podem ser modificados: `DAEMON_MEMCACHED_LIB_NAME`, `DAEMON_MEMCACHED_LIB_PATH` e `INNODB_API_ENABLE_BINLOG`. Os parâmetros que os administradores MySQL definem usando `daemon_memcached_options` estão disponíveis como configurações da opção `MEMCACHED` individuais no Amazon RDS.

### Parâmetros daemon\$1memcached\$1options MySQL
<a name="w2aac47c83c15c17b6"></a>
+  `BINDING_PROTOCOL` – uma string que especifica o protocolo de associação a ser usado. Os valores permitidos são `auto`, `ascii` ou `binary`. O padrão é `auto`, o que significa que o servidor negocia automaticamente o protocolo com o cliente. A opção não terá efeito até que a instância seja reiniciada.
+  `BACKLOG_QUEUE_LIMIT` – um número inteiro que especifica quantas conexões de rede podem estar aguardando para serem processadas por `memcached`. Aumentar esse limite pode reduzir os erros recebidos por um cliente que não seja capaz de se conectar à instância `memcached`, mas não melhora a performance do servidor. Os valores permitidos são de 1 a 2048; o padrão é 1024. A opção não terá efeito até que a instância seja reiniciada.
+  `CAS_DISABLED` – um booliano que permite (1 (true)) ou desabilite (0 (false)) o uso do recurso de comparação e permuta (CAS), o que reduz o tamanho por item em 8 bytes. O padrão é 0 (false). A opção não terá efeito até que a instância seja reiniciada.
+  `CHUNK_SIZE` – um número inteiro que especifica o tamanho mínimo do bloco, em bytes, para alocar a chave, o valor e os sinalizadores do menor item. Os valores permitidos são de 1 a 48. O padrão é 48 e você pode melhorar significativamente a eficiência da memória com um valor menor. A opção não terá efeito até que a instância seja reiniciada.
+  `CHUNK_SIZE_GROWTH_FACTOR` – um flutuante que controla o tamanho de novos blocos. O tamanho de um novo bloco é o tamanho do bloco anterior vezes `CHUNK_SIZE_GROWTH_FACTOR`. Os valores permitidos são de 1 a 2; o padrão é 1.25. A opção não terá efeito até que a instância seja reiniciada.
+  `ERROR_ON_MEMORY_EXHAUSTED` – um booliano, quando definido como 1 (true), especifica que `memcached` retornará um erro ao invés de despejar itens quando não houver mais memória para armazenar itens. Se definido como 0 (false), `memcached` expulsará itens se não houver mais memória. O padrão é 0 (false). A opção não terá efeito até que a instância seja reiniciada.
+  `MAX_SIMULTANEOUS_CONNECTIONS` – um inteiro que especifica o número máximo de conexões simultâneas. Definir esse valor como qualquer coisa abaixo de 10 impede que o MySQL seja iniciado. Os valores permitidos são de 10 a 1024; o padrão é 1024. A opção não terá efeito até que a instância seja reiniciada.
+  `VERBOSITY` – uma string que especifica o nível de informações registradas no log de erros do MySQL pelo serviço `memcached`. O padrão é v. A opção não terá efeito até que a instância seja reiniciada. Os valores permitidos são:
  +  `v` – registra erros e avisos durante a execução do loop de eventos principal.
  +  `vv` – Além das informações registradas por v, também registra cada comando do cliente e a resposta.
  +  `vvv` – Além das informações registradas por vv, também registra transições de estado internas.

O Amazon RDS configura esses parâmetros `DAEMON_MEMCACHED_OPTIONS` MySQL, eles não podem ser modificados: `DAEMON_PROCESS`, `LARGE_MEMORY_PAGES`, `MAXIMUM_CORE_FILE_LIMIT`, `MAX_ITEM_SIZE`, `LOCK_DOWN_PAGE_MEMORY`, `MASK`, `IDFILE`, `REQUESTS_PER_EVENT`, `SOCKET` e `USER`.