Configurando 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 motor de almacenamiento 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
Después, bajo [mysqld], añada
default-storage-engine = innodb
Cambiar el charset por defecto
Sección titulada «Cambiar el charset por defecto»En Ubuntu 16.04, el charset configurado por defecto en MariaDB y MySQL es utf8mb4, pero recomendamos cambiar a utf8. Para obtener el charset 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 el collation y charset persa en el fichero de configuración my.ini (requiere reiniciar el servicio):
collation_server = utf8mb4_persian_cicharacter_set_server = utf8mb4Establezca el collation y charset 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 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 de esta forma 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 MySQL en Windows, 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 ayuda a hacerlo:
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 entre mayúsculas y 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 de forma que los nombres de nodo se tratan de forma insensible a mayúsculas/minúsculas. Este collation también ignora las diferencias de acentuación, por lo que los 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 encontrados deben renombrarse para que dejen de tratarse como iguales.
Resolución de problemas
Sección titulada «Resolució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 esté causado por 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