Configurar MySQL y MariaDB
Preliminares
Sección titulada «Preliminares»Compruebe si su instalación de MySQL tiene habilitado el motor InnoDB:
$ MySQL -h localhost -u root -p> show engines;Si se está usando otro motor por defecto, hay dos opciones:
- Usar el dialecto com.openkm.db.dialect.MySQL5InnoDBDialect y evitar cambiar el Storage Engine por defecto de MySQL.
- Cambiar el motor por defecto.
Cambiar el motor por defecto
Sección titulada «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
Cambiar el juego de caracteres por defecto
Sección titulada «Cambiar el juego de caracteres por defecto»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
character-set-server = utf8collation-server = utf8_general_ci/etc/mysql/mariadb.conf.d/50-client.cnf
default-character-set = utf8/etc/mysql/mariadb.conf.d/50-MySQL-clients.cnf
default-character-set = utf8Una vez modificado, debe reiniciar el servidor de base de datos.
Creación de la base de datos
Sección titulada «Creación de la base de datos»Crear una base de datos y un usuario
Sección titulada «Crear una base de datos y un usuario»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:
$ MySQL show -h localhost -u root -p --status okmdb;Más información en MySQL: Case Sensitivity in String Searches
Crear una base de datos en persa
Sección titulada «Crear una base de datos en persa»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_cicharacter_set_server = utf8mb4Establezca 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;Configurar su openkm.properties
Sección titulada «Configurar su openkm.properties»Edite el fichero $TOMCAT_HOME/openkm.properties
spring.jpa.hibernate.ddl-auto=create-onlyspring.jpa.properties.hibernate.dialect=com.openkm.db.dialect.MySQL5InnoDBDialectZona horaria de MySQL
Sección titulada «Zona horaria de MySQL»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í:
SELECT * FROM MySQL.time_zone_nameAsí, por ejemplo, podría configurar su conexión JDBC así si la zona horaria de su sistema es UTC+1:
spring.datasource.url=jdbc:mysql://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/MadridDonde Europe/Madrid es un valor válido tomado de la tabla time_zone_name.
Configurar los orígenes de datos de Tomcat
Sección titulada «Configurar los orígenes de datos de Tomcat»Edite el fichero $TOMCAT_HOME/openkm.properties y habilite el recurso llamado JDBC/OpenKMDS
spring.datasource.driver-class-name=com.mysql.jdbc.Driverspring.datasource.url=jdbc:mysql://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madridspring.datasource.username=openkmspring.datasource.password=*secret*MariaDB:
Sección titulada «MariaDB:»spring.datasource.driver-class-name=org.mariadb.jdbc.Driverspring.datasource.url=jdbc:mariadb://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madridspring.datasource.username=openkmspring.datasource.password=*secret*Configurar el login de la aplicación
Sección titulada «Configurar el login de la aplicación»Edite el fichero $TOMCAT_HOME/openkm.properties
authentication.openkm.database=trueEjecutar la aplicación
Sección titulada «Ejecutar la aplicación»Al arrancar OpenKM, la aplicación creará automáticamente una estructura de base de datos vacía.
Información adicional
Sección titulada «Información adicional»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:
c:\> mysqld --remove MySQL57o
c:\> sc delete MySQL57Crear el servicio:
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"Migrar de Windows a Linux
Sección titulada «Migrar de Windows a Linux»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:
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_BASEGROUP BY NBS_PARENT, LOWER(NBS_NAME) HAVING COUNT(*) > 1;Los duplicados que se encuentren deben renombrarse para que dejen de considerarse iguales.
Solución de problemas
Sección titulada «Solución de problemas»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:
> file okmdb.sqlokmdb.sql: Little-endian UTF-16 Unicode text, with very long lines, with CRLF line terminatorsSi el fichero está en formato UTF-16, conviértalo a UTF-8. Por ejemplo, use el comando:
> iconv -f utf-16 -t utf-8 okmdb.sql > okmdb-good.sql