Limpiar datos antiguos del registro de actividad
Existe una tabla llamada OKM_ACTIVITY donde OpenKM guarda un registro con las acciones realizadas por los usuarios sobre todos los nodos. Esta tabla puede llegar a contener fácilmente varios millones de filas, lo que puede afectar al rendimiento de la base de datos. Normalmente solo le interesarán los datos de actividad más recientes (por ejemplo, del último año) y mantener el resto de datos fuera de la base de datos. Por ello, es buena práctica realizar un proceso de limpieza: exportar los datos de actividad más antiguos y luego eliminarlos de la base de datos.
Cree un fichero llamado clean_okm_activity.sh en la carpeta /root/:
#!/bin/sh## BEGIN CONFIG ##DATABASE_PASS="*secret*"BACKUP_DIR="/mnt/backup/okm_activity"## END CONFIG ##
mysqldump -h localhost -u root -p$DATABASE_PASS -w"ACT_DATE < (NOW() - INTERVAL 365 DAY)" --no-create-info okmdb OKM_ACTIVITY > $BACKUP_DIR/okm_activity_$(date +\%Y.\%m.\%d_\%H.\%M.\%S).sqlmysql -h localhost -u root -p$DATABASE_PASS okmdb < /root/delete.sqlConvierta clean_okm_activity.sh en un fichero ejecutable:
$ chmod +x clean_okm_activity.shCree un fichero llamado delete.sql en la carpeta /root/:
DELETE FROM OKM_ACTIVITY WHERE ACT_DATE < (NOW() - INTERVAL 365 DAY);ANALYZE TABLE OKM_ACTIVITY;Configurar crontab
Sección titulada «Configurar crontab»Para instalar la tarea de cron, ejecute:
$ sudo mkdir /root/logs$ sudo crontab -eY añada estas líneas según su configuración personal:
MAILTO=nomail@openkm.com@daily /root/clean_okm_activity.sh | tee /root/logs/okm_activity.$(date +\%Y.\%m.\%d_\%H.\%M.\%S).logWindows
Sección titulada «Windows»Cree un fichero llamado clean_okm_activity.bat en la carpeta c:\backup:
set SQLFILE_DATE=%DATE:~6,4%.%DATE:~3,2%.%DATE:~0,2%set SQLFILE_TIME=%TIME:~0,2%.%TIME:~3,2%set SQLFILE=c:\backup\okm_activity-%SQLFILE_DATE%-%SQLFILE_TIME%.sqlset DATABASE_PASS=*secret*
mysqldump -h localhost -u root -p%DATABASE_PASS% -w"ACT_DATE < (NOW() - INTERVAL 365 DAY)" --no-create-info okmdb OKM_ACTIVITY > %SQLFILE%mysql -h localhost -u root -p%DATABASE_PASS% okmdb < delete.sqlCree un fichero llamado delete.sql en la carpeta c:\backup:
DELETE FROM OKM_ACTIVITY WHERE ACT_DATE < (NOW() - INTERVAL 365 DAY);ANALYZE TABLE OKM_ACTIVITY;Replicación de base de datos con tablas federadas
Sección titulada «Replicación de base de datos con tablas federadas»El procedimiento para usar tablas FEDERATED es muy sencillo. Normalmente, tiene dos servidores en ejecución, ya sea en el mismo host o en hosts distintos. (Es posible que una tabla FEDERATED use otra tabla gestionada por el mismo servidor, aunque tiene poco sentido hacerlo.)
Antes de nada, debe habilitar las tablas federadas en el servidor de producción. Detenga el servicio MySQL de producción y edite el fichero de configuración de MySQL (my.cnf o my.ini, según su sistema operativo). Vaya a la sección [mysqld] y añada lo siguiente:
[mysqld]# To enable federated featurefederatedInicie su servicio MySQL de producción y ejecute el siguiente comando desde su herramienta cliente de MySQL preferida:
SHOW CREATE TABLE okm_activity;Obtendrá algo similar a:
CREATE TABLE `okm_activity` ( `ACT_ID` bigint(20) NOT NULL AUTO_INCREMENT, `ACT_ACTION` varchar(127) COLLATE utf8_bin DEFAULT NULL, `ACT_DATE` datetime DEFAULT NULL, `ACT_IP` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACT_ITEM` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACT_PARAMS` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `ACT_PATH` longtext COLLATE utf8_bin, `ACT_TENANT` bigint(20) DEFAULT NULL, `ACT_USER` varchar(64) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`ACT_ID`), KEY `IDX_ACTIVITY_TENANT` (`ACT_TENANT`), KEY `IDX_ACTIVITY_DATE` (`ACT_DATE`), KEY `IDX_ACTIVITY_TNTUSRACT` (`ACT_TENANT`,`ACT_USER`,`ACT_ACTION`), KEY `IDX_ACTIVITY_TNTDATACT` (`ACT_TENANT`,`ACT_DATE`,`ACT_ACTION`) ) ENGINE=innodb DEFAULT CHARSET=utf8 COLLATE=utf8_binCree la tabla “okm_activity” en su servidor MySQL de respaldo.
Cree la tabla federada en su servidor MySQL de producción (observe que hemos cambiado el nombre de la tabla, sustituido ENGINE=innodb por ENGINE=FEDERATED, y añadido el enlace de conexión):
CREATE TABLE `okm_activity_remote` ( `ACT_ID` bigint(20) NOT NULL AUTO_INCREMENT, `ACT_ACTION` varchar(127) COLLATE utf8_bin DEFAULT NULL, `ACT_DATE` datetime DEFAULT NULL, `ACT_IP` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACT_ITEM` varchar(64) COLLATE utf8_bin DEFAULT NULL, `ACT_PARAMS` varchar(4000) COLLATE utf8_bin DEFAULT NULL, `ACT_PATH` longtext COLLATE utf8_bin, `ACT_TENANT` bigint(20) DEFAULT NULL, `ACT_USER` varchar(64) COLLATE utf8_bin DEFAULT NULL, PRIMARY KEY (`ACT_ID`), KEY `IDX_ACTIVITY_TENANT` (`ACT_TENANT`), KEY `IDX_ACTIVITY_DATE` (`ACT_DATE`), KEY `IDX_ACTIVITY_TNTUSRACT` (`ACT_TENANT`,`ACT_USER`,`ACT_ACTION`), KEY `IDX_ACTIVITY_TNTDATACT` (`ACT_TENANT`,`ACT_DATE`,`ACT_ACTION`) ) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_bin CONNECTION='mysql://user:poassword@server_b:3306/okmdb/okm_activity';Finalmente, puede ejecutar periódicamente un script como este desde su servidor MySQL de producción:
select (NOW() - INTERVAL 1 DAY) into @dump_date;insert into okm_activity_remote select * from okm_activity where act_date < @dump_date;delete from okm_activity where act_date < @dump_date;analyze table okm_activity;