Por predefinição, o Looker usa uma base de dados na memória HyperSQL para armazenar a respetiva configuração, utilizadores e outros dados. Numa instância ocupada, esta base de dados pode crescer até ter gigabytes, o que pode originar problemas de desempenho, pressão de memória Java e longos tempos de arranque.
Numa instância alojada pelo cliente, recomendamos que substitua a base de dados HyperSQL por um back-end de base de dados MySQL completo quando a base de dados HyperSQL interna exceder 600 MB. Para verificar o tamanho da base de dados HyperSQL, veja o tamanho do ficheiro looker.script
:
cd looker
cd .db
ls -lah
Se o tamanho do ficheiro looker.script
exceder os 600 MB, siga os procedimentos abaixo para migrar para uma base de dados MySQL externa.
Aprovisione uma instância do MySQL
Aprovisione uma instância do MySQL 8.0.x para usar como back-end. As versões do MySQL anteriores à 8.0 não são suportadas.
No AWS RDS, uma instância da classe db.m5.large
é provavelmente suficiente como back-end para uma única instância do Looker. Embora a utilização real da base de dados seja provavelmente entre 5 e 10 GB, é uma boa ideia aprovisionar 100 a 150 GB de armazenamento SSD, uma vez que os IOPS aprovisionados se baseiam na quantidade de armazenamento pedida.
MySQL 8.0.X: alterar o plug-in de autenticação predefinido
No MySQL 8.0.X, o plug-in de autenticação predefinido é caching_sha2_password
. O Looker usa o plug-in mysql_native_password
para tentar fazer a autenticação nas bases de dados MySQL através do controlador JDBC. Para que esta versão do MySQL funcione corretamente,
tem de seguir os seguintes passos adicionais:
Configure a base de dados do MySQL para usar o plug-in
mysql_native_password
. Isto pode ser feito de várias formas e depende da forma como a sua base de dados MySQL 8 está implementada e do tipo de acesso que tem à configuração:Inicie o processo com a flag
--default-auth=mysql_native_password
Defina a propriedade no ficheiro de configuração
my.cnf
:[mysqld] default-authentication-plugin=mysql_native_password
Se a instância da base de dados estiver alojada através do AWS RDS, defina o parâmetro
default_authentication_plugin
através de um grupo de parâmetros do RDS que seja aplicado a esta instância da base de dados.
Emita as seguintes declarações, substituindo
some_password_here
por uma palavra-passe única e segura:CREATE USER looker IDENTIFIED WITH mysql_native_password BY 'some_password_here'; GRANT SELECT ON database_name.* TO 'looker'@'%';
Ajuste o MySQL
Ajuste as seguintes definições na sua instância do MySQL.
Aumente o tamanho máximo do pacote
O tamanho predefinido do MySQL max_allowed_packet
é demasiado pequeno para a migração da base de dados e pode fazer com que a migração falhe com um erro PACKET_TOO_LARGE
. Defina max_allowed_packet
para o valor máximo permitido de 1073741824
:
max_allowed_packet = 1073741824
Defina o algoritmo da tabela temporária
O MySQL 8 processa as tabelas temporárias internas de forma diferente das versões anteriores. As predefinições podem causar problemas na execução de algumas das consultas necessárias para o Looker ser executado, especialmente para instâncias do Looker com muitos utilizadores e projetos. A prática recomendada é definir a seguinte definição global do servidor:
internal_tmp_mem_storage_engine = MEMORY
Configure conjuntos de carateres
Defina os seguintes parâmetros predefinidos para usar UTF8mb4, que suporta conjuntos de carateres UTF8. Consulte o artigo No MySQL, nunca use "utf8". Use "utf8mb4". para obter informações sobre o motivo pelo qual recomendamos a utilização de UTF8mb4, e não UTF8, com o MySQL.
character_set_client = utf8mb4
character_set_results = utf8mb4
character_set_connection = utf8mb4
character_set_database = utf8mb4
character_set_server = utf8mb4
collation_connection = utf8mb4_general_ci
collation_server = utf8mb4_general_ci
Nas instâncias do Amazon RDS, aplica esta definição criando ou modificando um grupo de parâmetros e editando as definições adequadas. Recomendamos que copie o grupo de parâmetros atual e faça as alterações na cópia, especialmente se estiver a partilhar grupos de parâmetros em várias instâncias do RDS. Depois de guardar o grupo de parâmetros, aplique-o à instância do RDS. Pode ser necessário reiniciar.
Defina o esquema de réplica
O Looker baseia-se numa funcionalidade que requer um binlog mixed
ou row
. Se estiver a alojar a sua própria instância do MySQL, defina o binlog_format
como mixed
ou row
emitindo um dos seguintes comandos:
SET GLOBAL binlog_format = 'MIXED';
ou
SET GLOBAL binlog_format = 'ROW';
Crie uma base de dados e um utilizador
Crie um utilizador e uma base de dados na instância da base de dados, substituindo <DB_username>
, <DB_name>
e <DB_password>
pelos valores reais do utilizador e da base de dados. Substitua também <DB_charset>
e <DB_collation>
pelo conjunto de carateres e pela ordenação escolhidos que correspondem às definições do grupo de parâmetros da instância do RDS (para um verdadeiro suporte de UTF8, recomendamos utf8mb4
e utf8mb4_general_ci
).
create user <DB_username>;
set password for <DB_username> = password ('<DB_password>');
create database <DB_name> default character set <DB_charset> default collate <DB_collation>;
grant all on <DB_name>.* to <DB_username>@'%';
grant all on looker_tmp.* to '<DB_username>'@'%';
A base de dados looker_tmp
na última linha não tem de existir efetivamente, mas a declaração grant
é necessária para relatórios internos.
Crie um ficheiro de credenciais da base de dados
O Looker precisa de saber com que base de dados do MySQL comunicar e que credenciais usar. No diretório do Looker, crie um ficheiro denominado looker-db.yml
com o seguinte conteúdo, substituindo <DB_hostname>
, <DB_username>
, <DB_password>
e <DB_name>
por valores da sua base de dados:
dialect: mysql
host: <DB_hostname>
username: <DB_username>
password: <DB_password>
database: <DB_name>
port: 3306
Se a sua base de dados do MySQL exigir uma ligação SSL, adicione a seguinte linha a looker-db.yml
:
ssl: true
Se também quiser ativar a validação do certificado SSL, adicione a seguinte linha a looker-db.yml
:
verify_ssl: true
Opcionalmente, também pode especificar outros parâmetros JDBC adicionais suportados pelo controlador JDBC do MariaDB adicionando jdbc_additional_params
. Por exemplo, se precisar de usar um ficheiro de repositório de confiança específico, pode adicionar o seguinte parâmetro à string de ligação JDBC do MySQL:
jdbc_additional_params: trustStore=/path/to/my/truststore.jks&keyStore=/path/to/my/keystore.jks
Para instalações alojadas pelo cliente, pode especificar opcionalmente o número máximo de ligações que o Looker pode estabelecer com a sua base de dados adicionando max_connections
. Por exemplo, para limitar o número de ligações simultâneas à sua base de dados a 10, adicione o seguinte:
max_connections: 10
No esquema de encriptação do Looker, todos os dados confidenciais na base de dados são encriptados em repouso. Mesmo que alguém consiga aceder às credenciais da base de dados de texto simples e aceder à base de dados, o Looker encripta ou aplica hash aos dados confidenciais antes do armazenamento. Isto aplica-se a palavras-passe, credenciais da base de dados de estatísticas, cache de consultas, etc. No entanto, se não quiser armazenar a palavra-passe de texto não cifrado para esta configuração no ficheiro looker-db.yml
no disco, pode configurar a variável de ambiente LOOKER_DB
para conter uma lista de chaves/valores para cada linha no ficheiro looker-db.yml
. Por exemplo:
export LOOKER_DB="dialect=mysql&host=localhost&username=root&password=&database=looker&port=3306"
Faça uma cópia de segurança do diretório .db
Faça uma cópia de segurança do diretório .db
, que contém os ficheiros necessários para criar a base de dados HyperSQL na memória, caso precise de restaurar o HyperSQL:
cp -r .db .db-backup
tar -zcvf db-backup.tar.gz ./.db-backup
Migre a base de dados
A migração da base de dados para o MySQL pode demorar horas numa instância média ou grande, especialmente se a base de dados HyperSQL tiver 1 GB ou mais. Recomendamos que atualize temporariamente a instância do EC2 para um m5.2xlarge
(com 32 GB de RAM para permitir os 26 GB de memória dinâmica especificados nos passos) durante a migração, o que reduz o tempo necessário para cerca de 10 minutos.
No anfitrião do Looker:
cd looker ./looker stop vi looker
No script de arranque do Looker, crie uma nova segunda linha no ficheiro:
exit
Pare a instância na consola da AWS. Quando parar, altere o tamanho da instância EC2 para
m5.2xlarge
. Em seguida, inicie novamente a instância.Use SSH para aceder ao anfitrião como utilizador do Looker. Primeiro, certifique-se de que o Java não está em execução e, em seguida, execute:
cd looker java -Xms26000m -Xmx26000m -jar looker.jar migrate_internal_data looker-db.yml
Quando executar o passo
migrate_internal_data
, olibcrypt
pode não ser encontrado e é apresentada uma rastreabilidade da pilha, começando com o seguinte:NotImplementedError: getppid unsupported or native support failed to load ppid at org/jruby/RubyProcess.java:752 ppid at org/jruby/RubyProcess.java:749
Se isto acontecer, defina o
LD_LIBRARY_PATH
manualmente antes de executar o comando Java:export LD_LIBRARY_PATH=$HOME/looker/.tmp/:$LD_LIBRARY_PATH
Quando a conclusão for bem-sucedida, pare a instância na consola da AWS.
Agora, pode restaurar o tamanho original da instância.
Inicie novamente a instância.
Inicie o Looker
Edite o script de arranque do Looker e elimine a linha
exit
que adicionou anteriormente.Certifique-se de que não existem argumentos definidos em
LOOKERARGS
no script de arranque. Em alternativa, todos os argumentos devem ser movidos para o ficheirolookerstart.cfg
para que não sejam substituídos por novas versões do script de arranque. Guarde e saia do script de arranque.Edite o pacote
lookerstart.cfg
. Deve ter um aspeto semelhante ao seguinte:LOOKERARGS="-d looker-db.yml"
Se existirem outros argumentos no script de arranque do Looker, adicione-os ao ficheiro
lookerstart.cfg
.Arquive o diretório
.db
, se ainda não estiver arquivado.mv .db .db-backup tar -zcvf db-backup.tar.gz ./.db-backup rm -rf ./.db-backup/
Iniciar Looker:
./looker start
Verifique se o Looker está a usar a nova base de dados
Se o Looker estiver a usar o MySQL de back-end com êxito, deve ver ligações de rede entre a instância do Looker e a nova instância da base de dados. Para verificar esta situação, execute o seguinte comando na instância do Looker:
netstat -na | grep 3306
Deve ver algumas ligações à instância da base de dados. Segue-se um exemplo de saída que mostra uma instância de base de dados no endereço IP 10.0.3.155
:
looker@instance1:~$ netstat -na | grep 3306
tcp6 0 0 10.0.5.131:56583 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56506 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56582 10.0.3.155:3306 ESTABLISHED
tcp6 0 0 10.0.5.131:56508 10.0.3.155:3306 ESTABLISHED
Fazer uma cópia de segurança do Looker
Depois de migrar para um back-end do MySQL, as cópias de segurança automáticas do S3 do Looker deixam de funcionar. Recomendamos, pelo menos, cópias de segurança noturnas da base de dados MySQL, juntamente com cópias de segurança noturnas do sistema de ficheiros do diretório de trabalho do Looker. O diretório looker/log/
pode ser excluído das cópias de segurança do sistema de ficheiros. Consulte a página de documentação Criar cópias de segurança para mais informações.