MySQL, existe uma maneira de saber quando o último banco de dados foi modificado / modificado?

6

Estou criando o MySQL dump de 5 bancos de dados a cada hora. 3 desses bancos de dados raramente mudam, então criar um dump MySQL para esses 3 dbs é praticamente um desperdício de tempo e recursos.

Existe uma maneira de recuperar segundos de unix epoch de quando um db específico foi alterado / atualizado pela última vez? Eu o compararia com o arquivo de despejo mais recente e só despejaria outro se houver alterações.

Então, questione novamente: Como posso obter o datetime unix epoch da última atualização / alteração de um banco de dados específico?

    
por user80666 09.06.2011 / 23:34

7 respostas

3

não é exatamente a resposta para o que você está procurando, mas eu acho que é o que você precisa: habilite o log binário, copie o log de backups e crie despejos completos uma vez por semana.

    
por 09.06.2011 / 23:43
2

Eu uso:

    mysql -e "use <NAMEOFTHEDATABASE>;SELECT MAX(UPDATE_TIME) FROM information_schema.TABLES WHERE TABLE_SCHEMA = DATABASE() ;" | grep -v "\----" | grep -v "MAX(UPDATE_TIME)" | awk '{print $1}'

Atenciosamente!

    
por 24.04.2014 / 14:30
1

Existe uma ferramenta do Maatkit que pode fazer checksums rápidos em tabelas . É mk-table-checksum

Você provavelmente poderia travar as tabelas, executar o mk-table-checksum e armazenar as somas de verificação, depois desbloquear as tabelas e então olhar os valores para ver se você precisa executar o mysqldump ou não.

    
por 10.06.2011 / 01:21
0

Funciona apenas para tabelas MyISAM

Você pode executar uma consulta MySQL na tabela information_schema:

Exemplo (substitua dbname pelo seu nome de banco de dados):

SELECT UNIX_TIMESTAMP(MAX(UPDATE_TIME)) as last_update 
FROM information_schema.tables 
WHERE TABLE_SCHEMA='dbname' 
GROUP BY TABLE_SCHEMA;
    
por 09.06.2011 / 23:44
0

Essa questão surge de tempos em tempos e a resposta curta é que essas informações não podem ser obtidas de forma confiável por qualquer método pela simples razão de que não são necessariamente registradas.

Para tabelas MyISAM, você pode usar a consulta que Phil postou. Eu não sei sobre nenhum dos outros, mas para o InnoDB, pelo menos, não há nenhuma consulta que retornará as informações desejadas. Nesse caso, você pode considerar o uso de gatilhos para registrar o registro de data e hora em uma tabela sempre que os dados forem alterados, mas, realisticamente, a perda de desempenho provavelmente será maior do que a continuação do despejo.

    
por 10.06.2011 / 01:10
0

Eu encontrei este método, do link

Não tenho certeza se isso poderia ajudar, já que não estou tão preparado no MySql

Obtenha o tamanho do banco de dados, o espaço livre e a última atualização

Para obter o tamanho atual do banco de dados apenas consultando o seu navegador de consulta ou CLI a partir do banco de dados INFORMATION_SCHEMA na tabela TABLES.

SELECT table_schema "Data Base Name", 
sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema ;

Obtenha o espaço livre do banco de dados

SELECT table_schema "Data Base Name", 
sum( data_length + index_length ) / 1024 / 1024 "Data Base Size in MB", 
sum( data_free )/ 1024 / 1024 "Free Space in MB" 
FROM information_schema.TABLES 
GROUP BY table_schema;

Obtenha a última atualização do banco de dados ordenada pelo tempo de atualização e, em seguida, pelo tempo de criação.

SELECT MAX(UPDATE_TIME), MAX(CREATE_TIME), TABLE_SCHEMA 
FROM 'TABLES' 
GROUP BY TABLE_SCHEMA 
ORDER BY 1, 2;
    
por 18.04.2015 / 17:42
0

Devido a não poder obter update_time para tabelas innodb, eu verifico os arquivos db diretamente:

find /var/lib/mysql -name \*.frm | xargs ls -l --time-style="+%m-%d-%Y"  | awk '{print $6,$7}'

Isso me dá dias que eu uso para verificar se as tabelas estão inativas e podem ser arquivadas.

Você está procurando por timestamp unix que precisa apenas de uma mudança no estilo de tempo de ls:

find /var/lib/mysql -name \*.frm | xargs ls -l --time-style="+%s"  | awk '{print $6,$7}'

Isto assume que seus arquivos de banco de dados estão em / var / lib / mysql, mas você pode obter esse local executando a seguinte consulta:

mysql -e "SHOW VARIABLES LIKE 'datadir';"
    
por 13.09.2016 / 22:52

Tags