Nosso esquema fica assim:
- tabela
tblTrip
: armazena data e hora de início e fim da viagem - tabela
tblTripData
: mantém todos os dados da viagem - tabela
tblTripEvent
: armazena os eventos relacionados à viagem em particular.
Então temos mais duas tabelas, tblTripEmail
e tblTripSms
, que armazenam o e-mail e SMS que foram enviados de acordo com os eventos.
Queremos manter apenas os dados de viagem de 3 meses, gostaríamos de, de tempos em tempos, excluir e arquivar o restante para ser armazenado no banco de dados off-line.
Qual é o melhor mecanismo para armazenar em um banco de dados offline? Não tenho certeza de como o particionamento seria útil porque as tabelas estão vinculadas umas às outras aqui.
Abaixo está a tabela desc para tblTripData
CREATE TABLE IF NOT EXISTS `tblTripData` (
`tripDataID` int(11) NOT NULL AUTO_INCREMENT,
`tripID` int(5) NOT NULL,
`deviceSerialNumber` varchar(20) NOT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`speed` float NOT NULL,
`course` int(3) NOT NULL,
`gpsdateTimer` datetime NOT NULL,
`insertDateTime` datetime NOT NULL,
`odoMeter` float NOT NULL DEFAULT '0',
`driverID` int(5) NOT NULL,
`eventAlertID` int(11) NOT NULL DEFAULT '0',
`tripDataInsertDateTime` datetime NOT NULL
PRIMARY KEY (`tripDataID`),
KEY `dateTime` (`gpsdateTimer`),
KEY `tripID` (`tripID`),
KEY `eventAlertID` (`eventAlertID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Experimente o pt-archiver do Percona Toolkit, ele permite transferir dados em tempo real entre duas instâncias do MySQL.
Você pode, por exemplo, usar a
--where
opção de filtrar o conjunto de resultados por data.É particularmente bem projetado para suas necessidades, porque você pode transferir dados e excluí-los da fonte no mesmo comando.
A página oficial está aqui: pt-archiver
Um exemplo :
Adicione a opção
--dry-run
se quiser testar.Adicione a opção
--no-delete
se desejar manter os dados no banco de dados de origem.