Ir al contenido

Configurar MySQL y MariaDB

Compruebe si su instalación de MySQL tiene habilitado el motor InnoDB:

Ventana de terminal
$ MySQL -h localhost -u root -p
> show engines;

Si se está usando otro motor por defecto, hay dos opciones:

  1. Usar el dialecto com.openkm.db.dialect.MySQL5InnoDBDialect y evitar cambiar el Storage Engine por defecto de MySQL.
  2. Cambiar el motor por defecto.

Modifique el fichero de configuración de MySQL llamado my.cnf

Luego, bajo [mysqld], añada

default-storage-engine = innodb

En Ubuntu 16.04, el juego de caracteres configurado por defecto en MariaDB y MySQL es utf8mb4, pero recomendamos cambiar a utf8. Para obtener el juego de caracteres recomendado, debe modificar estos ficheros:

/etc/mysql/mariadb.conf.d/50-server.cnf

Ventana de terminal
character-set-server = utf8
collation-server = utf8_general_ci

/etc/mysql/mariadb.conf.d/50-client.cnf

Ventana de terminal
default-character-set = utf8

/etc/mysql/mariadb.conf.d/50-MySQL-clients.cnf

Ventana de terminal
default-character-set = utf8

Una vez modificado, debe reiniciar el servidor de base de datos.

DROP DATABASE IF EXISTS okmdb;
CREATE DATABASE okmdb DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_bin;
CREATE USER openkm@localhost IDENTIFIED BY '*secret*';
GRANT ALL ON okmdb.* TO openkm@localhost WITH GRANT OPTION;

Puede comprobar el motor de la base de datos con lo siguiente:

Ventana de terminal
$ MySQL show -h localhost -u root -p --status okmdb;

Más información en MySQL: Case Sensitivity in String Searches

Establezca la collation y el juego de caracteres persa en el fichero de configuración my.ini (requiere reiniciar el servicio):

collation_server = utf8mb4_persian_ci
character_set_server = utf8mb4

Establezca la collation y el juego de caracteres persa en la sesión actual de MySQL (tras reiniciar el servicio, se usarán los valores por defecto de my.ini):

SET collation_server = 'utf8mb4_persian_ci';
SET character_set_server = 'utf8mb4';

Base de datos:

CREATE DATABASE okmdb CHARACTER SET utf8mb4 COLLATE utf8mb4_persian_ci;
CREATE USER openkm@localhost IDENTIFIED BY 'k4M0j4lBi#ed';
GRANT ALL ON okmdb.* TO openkm@localhost WITH GRANT OPTION;

Edite el fichero $TOMCAT_HOME/openkm.properties

spring.jpa.hibernate.ddl-auto=create-only
spring.jpa.properties.hibernate.dialect=com.openkm.db.dialect.MySQL5InnoDBDialect

Si quiere establecer su zona horaria en la conexión JDBC para que coincida con la zona horaria configurada en su sistema, primero puede ver los mapeos tanto para MySQL como para MariaDB así:

Ventana de terminal
SELECT * FROM MySQL.time_zone_name

Así, por ejemplo, podría configurar su conexión JDBC así si la zona horaria de su sistema es UTC+1:

Ventana de terminal
spring.datasource.url=jdbc:mysql://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madrid

Donde Europe/Madrid es un valor válido tomado de la tabla time_zone_name.

Edite el fichero $TOMCAT_HOME/openkm.properties y habilite el recurso llamado JDBC/OpenKMDS

spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madrid
spring.datasource.username=openkm
spring.datasource.password=*secret*
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.datasource.url=jdbc:mariadb://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madrid
spring.datasource.username=openkm
spring.datasource.password=*secret*

Edite el fichero $TOMCAT_HOME/openkm.properties

authentication.openkm.database=true

Al arrancar OpenKM, la aplicación creará automáticamente una estructura de base de datos vacía.

Eliminar y crear el servicio de MySQL en Windows.

Sección titulada «Eliminar y crear el servicio de MySQL en Windows.»

Si tiene un servicio de Windows de MySQL, puede eliminarlo con una de estas líneas de comando:

Ventana de terminal
c:\> mysqld --remove MySQL57

o

Ventana de terminal
c:\> sc delete MySQL57

Crear el servicio:

Ventana de terminal
c:\> "C:\Program Files\MySQL\MySQL Server 5.7\bin\mysqld.exe" --install MYSQL57 --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.7\my.ini"

Cuando migre de Windows a Linux, debe convertir los nombres de tabla en minúsculas a mayúsculas. El siguiente script ayudará con ello:

select concat('rename table ', table_name, ' to ' , upper(table_name) , ';') from information_schema.tables where table_schema = 'okmdb';

Nombres de nodo insensibles a mayúsculas/minúsculas

Sección titulada «Nombres de nodo insensibles a mayúsculas/minúsculas»

Por defecto, la base de datos distingue mayúsculas/minúsculas. Sin embargo, ejecutando:

ALTER TABLE OKM_NODE_BASE MODIFY NBS_NAME varchar(256) COLLATE utf8mb3_general_ci;

se modifica la columna NBS_NAME para que los nombres de nodo se traten sin distinguir mayúsculas/minúsculas. Esta collation también ignora las diferencias de acentuación, por lo que nombres con y sin acentos se consideran equivalentes.

Como consecuencia, no será posible tener dos documentos como “Más temas.txt” y “mas temas.txt”, ya que para el índice de la tabla se interpretan como la misma cadena y la restricción de unicidad fallará.

Si esto ocurre, el sistema puede lanzar un error como:

Ventana de terminal
ERROR 1062 (23000): Duplicate entry '483ab139-9c20-44a9-8534-ed124a8f37ba-NULL' for key 'IDX_NODE_BASE_PARNAM'

Esto significa que ambos valores se consideran idénticos y el índice único los detecta como duplicados.

Para identificar los nodos problemáticos, puede ejecutar la siguiente consulta:

SELECT NBS_PARENT, NBS_NAME, COUNT(*) FROM OKM_NODE_BASE
GROUP BY NBS_PARENT, LOWER(NBS_NAME) HAVING COUNT(*) > 1;

Los duplicados que se encuentren deben renombrarse para que dejen de considerarse iguales.

Error “ASCII ‘\\0’ appeared in the statement” al importar un volcado de base de datos.

Sección titulada «Error “ASCII ‘\\0’ appeared in the statement” al importar un volcado de base de datos.»

Es posible que el error se deba a la codificación del fichero SQL. Debería comprobar el formato del fichero. Por ejemplo, con el comando:

Ventana de terminal
> file okmdb.sql
okmdb.sql: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminators

Si el fichero está en formato UTF-16, conviértalo a UTF-8. Por ejemplo, use el comando:

Ventana de terminal
> iconv -f utf-16 -t utf-8 okmdb.sql > okmdb-good.sql