Назад | Перейти на главную страницу

MySQL, есть ли способ узнать, когда база данных была изменена / модифицирована в последний раз?

Я создаю дамп MySQL 5 баз данных каждый час. 3 из этих баз данных очень редко меняются, поэтому создание дампа MySQL для этих 3 dbs - это пустая трата времени и ресурсов.

Есть ли способ получить секунды эпохи unix, когда в последний раз была изменена / обновлена ​​конкретная база данных? Я бы сравнил его с последним файлом дампа и сбрасывал только другой, если есть изменения.

Итак, вопрос еще раз: как я могу получить дату и время эпохи unix последнего обновления / изменения конкретной базы данных?

Я использую:

    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}'

С уважением!

это не совсем ответ на то, что вы ищете, но я думаю, что это то, что вам нужно: включить двоичное ведение журнала, резервное копирование бинарных журналов и создавайте полные дампы примерно раз в неделю.

Работает только для таблиц MyISAM

Вы можете выполнить запрос MySQL к таблице information_schema:

Пример (замените dbname на имя вашей базы данных):

SELECT UNIX_TIMESTAMP(MAX(UPDATE_TIME)) as last_update 
FROM information_schema.tables 
WHERE TABLE_SCHEMA='dbname' 
GROUP BY TABLE_SCHEMA;

Есть инструмент от Maatkit, который может быстро вычислять контрольные суммы на столы. это mk-table-контрольная сумма

Вероятно, вы могли бы заблокировать таблицы, запустить mk-table-checkum и сохранить контрольные суммы, затем разблокировать таблицы, а затем посмотреть значения, чтобы узнать, нужно ли вам запускать mysqldump или нет.

Я нашел этот метод из http://mysqladministrators.blogspot.it/2012/02/get-database-size.html

Я не уверен, что это может вам помочь, так как я не так подготовлен в MySql

Получите размер базы данных, свободное место и последнее обновление

Чтобы получить текущий размер базы данных, просто запросив в браузере запросов или CLI из базы данных INFORMATION_SCHEMA в таблице 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 ;

Получите свободное место в базе данных

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;

Получите последнее обновление базы данных, упорядоченное по времени обновления, а затем по времени создания.

SELECT MAX(UPDATE_TIME), MAX(CREATE_TIME), TABLE_SCHEMA 
FROM `TABLES` 
GROUP BY TABLE_SCHEMA 
ORDER BY 1, 2;

Этот вопрос возникает время от времени, и краткий ответ заключается в том, что эту информацию нельзя надежно получить каким-либо одним методом по той простой причине, что она не обязательно записывается.

Для таблиц MyISAM вы можете использовать запрос, опубликованный Филом. Я не знаю ни о каких других, но, по крайней мере, для InnoDB нет запроса, который вернет нужную информацию. В этом случае вы можете рассмотреть возможность использования триггеров для записи отметки времени в таблице всякий раз, когда данные изменяются, но на самом деле потеря производительности, скорее всего, будет больше, чем при простом дампе.

Из-за невозможности получить update_time для таблиц innodb я напрямую проверяю файлы db:

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

Это дает мне дни, которые я использую для проверки того, что таблицы неактивны и могут быть заархивированы.

Вы ищете временную метку unix, которой просто нужно изменить стиль времени ls:

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

Предполагается, что ваши файлы базы данных находятся в / var / lib / mysql, но вы можете получить это местоположение, выполнив следующий запрос:

mysql -e "SHOW VARIABLES LIKE 'datadir';"