Skip to content
Other versions

Loading…

Configuring MySQL and MariaDB

Check if your MySQL installation has the InnoDB engine enabled:

Terminal window
$ MySQL -h localhost -u root -p
> show engines;

In the case of another default engine, there are two options:

  1. Use the com.openkm.db.dialect.MySQL5InnoDBDialect dialect and avoid changing the default MySQL Storage Engine.
  2. Change the default engine

Modify the MySQL configuration file named my.cnf

and under [mysqld], add

default-storage-engine = innodb

In Ubuntu 16.04, the default charset configured in MariaDB and MySQL is utf8mb4, but we recommend switching to utf8. To get the recommended charset, you have to modify these files:

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

Terminal window
character-set-server = utf8
collation-server = utf8_general_ci

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

Terminal window
default-character-set = utf8

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

Terminal window
default-character-set = utf8

Once modified, the database server needs to be restarted.

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;

You can check the database engine with the following command:

Terminal window
$ MySQL show -h localhost -u root -p --status okmdb;

More information at MySQL: Case Sensitivity in String Searches

Edit the file $TOMCAT_HOME/openkm.properties

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

If you want to set your timezone in your JDBC connection according to the timezone configured in your system, you can first see the mappings for both MySQL and MariaDB like this:

Terminal window
SELECT * FROM MySQL.time_zone_name

So, for example, you could configure your JDBC connection like this if your system timezone is UTC+1:

Terminal window
spring.data source.url=jdbc:mysql://localhost:3306/okmdb?autoReconnect=true&useUnicode=true&characterEncoding=UTF8&nullNamePatternMatchesAll=true&serverTimezone=Europe/Madrid

Where Europe/Madrid is a valid value taken from the table time_zone_name.

Edit the file $TOMCAT_HOME/openkm.properties and enable the resource named 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*

Edit the file $TOMCAT_HOME/openkm.properties

authentication.openkm.database=true

During OpenKM startup, the application will automatically create an empty database structure. 

Remove and create MySQL service in Windows.

Section titled “Remove and create MySQL service in Windows.”

If you have the MySQL Windows service, you can remove it with one of these command lines:

Terminal window
c:\> mysqld --remove MySQL57

or

Terminal window
c:\> sc delete MySQL57

Create the service:

Terminal window
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"

When you migrate from Windows to Linux, you must convert lowercase table names to uppercase. The following script will help with it:

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