Difference between revisions of "MySQL"

From OpenKM Documentation
Jump to: navigation, search
Line 10: Line 10:
 
You need to modify your MySQL server configuration file and increase the value of the '''max_allowed_packet''' property. Don't forget to restart the MySQL after any change in this file. In Debian based distros like Ubuntu, this configuration file is located at ''/etc/mysql/my.cnf''.}}
 
You need to modify your MySQL server configuration file and increase the value of the '''max_allowed_packet''' property. Don't forget to restart the MySQL after any change in this file. In Debian based distros like Ubuntu, this configuration file is located at ''/etc/mysql/my.cnf''.}}
  
== OpenKM 5.0 ==
+
* [[MySQL-OpenKM 5.0 | OpenKM 5.0]]
=== Database creation ===
+
* [[MySQL-OpenKM 4.1 | OpenKM 4.1]]
Starting with OpenKM 5.0, only two databases are needed:
 
<source lang="sql">
 
DROP DATABASE IF EXISTS okm_repo;
 
DROP DATABASE IF EXISTS okm_app;
 
 
 
CREATE DATABASE okm_repo DEFAULT CHARACTER SET utf8;
 
CREATE DATABASE okm_app DEFAULT CHARACTER SET utf8;
 
 
 
CREATE USER openkm@localhost IDENTIFIED BY '*secret*';
 
GRANT ALL ON okm_app.* TO openkm@localhost WITH GRANT OPTION;
 
</source>
 
 
 
=== Repository configuration ===
 
<source lang="xml">
 
<?xml version="1.0"?>
 
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN"
 
                            "http://jackrabbit.apache.org/dtd/repository-1.6.dtd">
 
<Repository>
 
    <!-- virtual file system where the repository stores global state
 
        (e.g. registered namespaces, custom node types, etc.) -->
 
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
        <param name="path" value="${rep.home}/repository"/>
 
    </FileSystem>
 
 
 
    <!-- Security configuration -->
 
    <Security appName="OpenKM">
 
        <!-- Access manager: FQN of class implementing the AccessManager interface -->
 
        <AccessManager class="com.openkm.core.OKMAccessManager"/>
 
        <!-- <AccessManager class="org.apache.jackrabbit.core.security.SimpleAccessManager"/> -->
 
        <!-- <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager"> -->
 
            <!-- <param name="config" value="${rep.home}/access.xml"/> -->
 
        <!-- </AccessManager> -->
 
    </Security>
 
 
 
    <!-- Location of workspaces root directory and name of default workspace -->
 
    <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
 
 
 
    <!-- Workspace configuration template:
 
        used to create the initial workspace if there's no workspace yet -->
 
    <Workspace name="${wsp.name}">
 
        <!-- Virtual file system of the workspace:
 
            class: FQN of class implementing the FileSystem interface -->
 
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
            <param name="path" value="${wsp.home}"/>
 
        </FileSystem>
 
 
 
        <!-- Persistence manager of the workspace:
 
            class: FQN of class implementing the PersistenceManager interface -->
 
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
 
          <param name="driver" value="com.mysql.jdbc.Driver"/>
 
          <param name="url" value="jdbc:mysql://localhost:3306/okm_repo?autoReconnect=true"/>
 
          <param name="schema" value="mysql"/>
 
          <param name="user" value="openkm"/>
 
          <param name="password" value="*****"/>
 
          <param name="schemaObjectPrefix" value="${wsp.name}_"/>
 
          <param name="externalBLOBs" value="false"/>
 
        </PersistenceManager>
 
 
 
        <!-- Search index and the file system it uses.
 
            class: FQN of class implementing the QueryHandler interface -->
 
        <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
 
            <param name="path" value="${wsp.home}/index"/>
 
            <param name="textFilterClasses" value="
 
            org.apache.jackrabbit.extractor.PlainTextExtractor,
 
            org.apache.jackrabbit.extractor.MsWordTextExtractor,
 
            org.apache.jackrabbit.extractor.MsExcelTextExtractor,
 
            org.apache.jackrabbit.extractor.MsPowerPointTextExtractor,
 
            org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,
 
            org.apache.jackrabbit.extractor.RTFTextExtractor,
 
            org.apache.jackrabbit.extractor.HTMLTextExtractor,
 
            org.apache.jackrabbit.extractor.XMLTextExtractor,
 
            org.apache.jackrabbit.extractor.PngTextExtractor,
 
            org.apache.jackrabbit.extractor.MsOutlookTextExtractor,
 
            com.openkm.extractor.PdfTextExtractor,
 
            com.openkm.extractor.AudioTextExtractor,
 
            com.openkm.extractor.ExifTextExtractor,
 
            com.openkm.extractor.TiffTextExtractor,
 
            com.openkm.extractor.SourceCodeTextExtractor,
 
            com.openkm.extractor.MsOffice2007TextExtractor"/>
 
            <param name="extractorPoolSize" value="2"/>
 
            <param name="supportHighlighting" value="false"/>
 
            <param name="indexingConfiguration" value="${wsp.home}/../../../indexing_configuration.xml"/>
 
        </SearchIndex>
 
    </Workspace>
 
 
 
    <!-- Configures the versioning -->
 
    <Versioning rootPath="${rep.home}/version">
 
        <!-- Configures the filesystem to use for versioning for the respective
 
            persistence manager -->
 
        <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
            <param name="path" value="${rep.home}/version" />
 
        </FileSystem>
 
 
 
        <!-- Configures the persistence manager to be used for persisting version state.
 
            Please note that the current versioning implementation is based on
 
            a 'normal' persistence manager, but this could change in future
 
            implementations. -->
 
        <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
 
          <param name="driver" value="com.mysql.jdbc.Driver"/>
 
          <param name="url" value="jdbc:mysql://localhost:3306/okm_repo?autoReconnect=true"/>
 
          <param name="schema" value="mysql"/>
 
          <param name="user" value="openkm"/>
 
          <param name="password" value="*****"/>
 
          <param name="schemaObjectPrefix" value="version_"/>
 
          <param name="externalBLOBs" value="false"/>
 
        </PersistenceManager>
 
    </Versioning>
 
 
 
    <!-- Search index for content that is shared repository wide
 
        (/jcr:system tree, contains mainly versions) -->
 
    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
 
        <param name="path" value="${rep.home}/repository/index"/>
 
        <param name="textFilterClasses" value=""/>
 
        <param name="extractorPoolSize" value="2"/>
 
        <param name="supportHighlighting" value="false"/>
 
    </SearchIndex>
 
 
 
    <!-- DataStore improve file handling performance -->
 
    <DataStore class="org.apache.jackrabbit.core.data.FileDataStore">
 
        <param name="path" value="${rep.home}/repository/datastore"/>
 
        <param name="minRecordLength" value="100"/>
 
    </DataStore>
 
</Repository>
 
</source>
 
 
 
More info about this at [http://jackrabbit.apache.org/jackrabbit-configuration.html Jackrabbit Configuration].
 
 
 
== OpenKM 4.1 and before ==
 
=== Database creation ===
 
The first thing to do is create the required databases where the tables will be created:
 
 
 
<source lang="sql">
 
DROP DATABASE IF EXISTS okm_repository;
 
DROP DATABASE IF EXISTS okm_activity;
 
DROP DATABASE IF EXISTS okm_auth;
 
DROP DATABASE IF EXISTS okm_dashboard;
 
DROP DATABASE IF EXISTS okm_workflow;
 
 
 
CREATE DATABASE okm_repository DEFAULT CHARACTER SET utf8;
 
CREATE DATABASE okm_activity DEFAULT CHARACTER SET utf8;
 
CREATE DATABASE okm_auth DEFAULT CHARACTER SET utf8;
 
CREATE DATABASE okm_dashboard DEFAULT CHARACTER SET utf8;
 
CREATE DATABASE okm_workflow DEFAULT CHARACTER SET utf8;
 
 
 
GRANT USAGE ON *.* TO 'openkm'@'%' IDENTIFIED BY '*secret*';
 
GRANT ALL PRIVILEGES ON *.* TO 'openkm'@'%';
 
</source>
 
 
 
=== Repository configuration ===
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<!DOCTYPE Repository PUBLIC "-//The Apache Software Foundation//DTD Jackrabbit 1.4//EN"
 
                            "http://jackrabbit.apache.org/dtd/repository-1.4.dtd">
 
<Repository>
 
  <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
    <param name="path" value="${rep.home}/repository"/>
 
  </FileSystem>
 
  <Security appName="OpenKM">
 
    <AccessManager class="es.git.openkm.core.OKMAccessManager"/>
 
  </Security>
 
  <Workspaces rootPath="${rep.home}/workspaces" defaultWorkspace="default"/>
 
  <Workspace name="${wsp.name}">
 
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
      <param name="path" value="${wsp.home}"/>
 
    </FileSystem>
 
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
 
      <param name="driver" value="com.mysql.jdbc.Driver"/>
 
      <param name="url" value="jdbc:mysql://localhost:3306/okm_repository?autoReconnect=true"/>
 
      <param name="schema" value="mysql"/>
 
      <param name="user" value="openkm"/>
 
      <param name="password" value="*secret*"/>
 
      <param name="schemaObjectPrefix" value="${wsp.name}_"/>
 
      <param name="externalBLOBs" value="false"/>
 
    </PersistenceManager>
 
    <SearchIndex class="org.apache.jackrabbit.core.query.lucene.SearchIndex">
 
      <param name="path" value="${wsp.home}/index"/>
 
      <param name="useCompoundFile" value="true"/>
 
      <param name="minMergeDocs" value="100"/>
 
      <param name="volatileIdleTime" value="3"/>
 
      <param name="maxMergeDocs" value="100000"/>
 
      <param name="mergeFactor" value="10"/>
 
      <param name="bufferSize" value="10"/>
 
      <param name="cacheSize" value="1000"/>
 
      <param name="forceConsistencyCheck" value="false"/>
 
      <param name="autoRepair" value="true"/>
 
      <param name="analyzer" value="org.apache.lucene.analysis.standard.StandardAnalyzer"/>
 
      <param name="respectDocumentOrder" value="false"/>
 
      <param name="indexingConfiguration" value="$ {wsp.home}/../../../indexing_configuration.xml"/>
 
      <param name="textFilterClasses" value="
 
org.apache.jackrabbit.core.query.lucene.TextPlainTextFilter,
 
org.apache.jackrabbit.extractor.PdfTextExtractor,
 
org.apache.jackrabbit.extractor.HTMLTextExtractor,
 
org.apache.jackrabbit.extractor.XMLTextExtractor,
 
org.apache.jackrabbit.extractor.RTFTextExtractor,
 
org.apache.jackrabbit.extractor.OpenOfficeTextExtractor,
 
es.git.openkm.extractor.MsExcelTextExtractor,
 
es.git.openkm.extractor.MsPowerPointTextExtractor,
 
es.git.openkm.extractor.MsWordTextExtractor,
 
es.git.openkm.extractor.MsOffice2007TextExtractor,
 
es.git.openkm.extractor.ExifTextExtractor,
 
es.git.openkm.extractor.TiffTextExtractor,
 
es.git.openkm.extractor.AudioTextExtractor" />
 
    </SearchIndex>
 
  </Workspace>
 
  <Versioning rootPath="${rep.home}/version">
 
    <FileSystem class="org.apache.jackrabbit.core.fs.local.LocalFileSystem">
 
      <param name="path" value="${rep.home}/version"/>
 
    </FileSystem>
 
    <PersistenceManager class="org.apache.jackrabbit.core.persistence.bundle.MySqlPersistenceManager">
 
      <param name="driver" value="com.mysql.jdbc.Driver"/>
 
      <param name="url" value="jdbc:mysql://localhost:3306/okm_repository?autoReconnect=true"/>
 
      <param name="schema" value="mysql"/>
 
      <param name="user" value="openkm"/>
 
      <param name="password" value="*secret*"/>
 
      <param name="schemaObjectPrefix" value="version_"/>
 
      <param name="externalBLOBs" value="false"/>
 
    </PersistenceManager>
 
  </Versioning>
 
  <!-- Also see DatabaseDataStore-->
 
  <DataStore class="org.apache.jackrabbit.core.data.FileDataStore"/>
 
</Repository>
 
</source>
 
 
 
More info about this at [http://jackrabbit.apache.org/jackrabbit-configuration.html Jackrabbit Configuration].
 
 
 
=== Table creation ===
 
In this OpenKM 4.1 release you can create the databases automatically configuring the '''system.database''' property in '''OpenKM.cfg'''.
 
 
 
<source lang="java">
 
system.database=mysql
 
</source>
 
 
 
{{Warning|This configuration property should be set before the repository creation. Once the document repository has been initialized don't modify it because can damage your documents. If your repository has been already configured with another database (default one is an embedded one called HSQL) you can't switch to another database simply changing this property.}}
 
 
 
=== OpenKM 4.0 and older ===
 
<source lang="sql">
 
#
 
# Generic activity database definition
 
#
 
CREATE TABLE activity(act_date TIMESTAMP, act_user VARCHAR(32), act_token VARCHAR(48), act_action VARCHAR(48), act_item VARCHAR(256), act_params VARCHAR(256));
 
</source>
 
 
 
<source lang="sql">
 
#
 
# Generic auth database definition
 
#
 
CREATE TABLE users(usr_id VARCHAR(32), usr_name VARCHAR(64), usr_pass VARCHAR(32) NOT NULL, usr_email VARCHAR(32) NOT NULL, usr_active BOOLEAN, PRIMARY KEY(usr_id));
 
CREATE TABLE roles(rol_id VARCHAR(32), PRIMARY KEY(rol_id));
 
CREATE TABLE user_role(ur_user VARCHAR(32), ur_role VARCHAR(32), PRIMARY KEY(ur_user, ur_role));
 
CREATE TABLE mail_accounts(ma_id INTEGER AUTO_INCREMENT, ma_user VARCHAR(32), ma_mhost VARCHAR(32), ma_muser VARCHAR(32), ma_mpass VARCHAR(32), ma_mfolder VARCHAR(32), ma_active BOOLEAN, PRIMARY KEY(ma_id));
 
CREATE TABLE twitter_accounts(ta_id INTEGER AUTO_INCREMENT, ta_user VARCHAR(32), ta_tuser VARCHAR(32), ta_active BOOLEAN, PRIMARY KEY(ta_id));
 
 
 
# INSERT DEFAULT USER / ROLES
 
INSERT INTO users (usr_id, usr_name, usr_pass, usr_email, usr_active) VALUES ('okmAdmin', 'Administrator', '21232f297a57a5a743894a0e4a801fc3', '', true);
 
INSERT INTO roles (rol_id) VALUES ('AdminRole');
 
INSERT INTO roles (rol_id) VALUES ('UserRole');
 
INSERT INTO user_role (ur_user, ur_role) VALUES ('okmAdmin', 'AdminRole');
 
</source>
 
 
 
<source lang="sql">
 
#
 
# Generic dashboard stats database definition
 
#
 
CREATE TABLE dashboard_stats(ds_user VARCHAR(32), ds_source VARCHAR(64), ds_node VARCHAR(256), ds_date TIMESTAMP);
 
</source>
 
 
 
== Workflow engine ==
 
You have to modify the file ''WEB-INF/classes/hibernate.cfg.xml'' located inside the OpenKM.war archive. These are the entries to change:
 
 
 
<source lang="xml">
 
<!-- hibernate dialect -->
 
<property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
 
</source>
 
 
 
to
 
 
 
<source lang="xml">
 
<!-- hibernate dialect -->
 
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
 
</source>
 
 
 
And in [[File:Jbpm.jpdl.mysql.sql]] are the sententeces needed to create the tables. More info about this at:
 
* [http://docs.jboss.org/jbpm/v3/userguide/thejbpmdatabase.html The jBPM Database]
 
* [http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-optional-dialects Hibernate: SQL Dialects]
 
 
 
== JBoss datasources ==
 
<source lang="xml">
 
<?xml version="1.0" encoding="UTF-8"?>
 
<datasources>
 
  <!-- OpenKM User Activity -->
 
  <local-tx-datasource>
 
    <jndi-name>OKMActivityDS</jndi-name>
 
    <connection-url>jdbc:mysql://localhost:3306/okm_activity?autoReconnect=true</connection-url>
 
    <driver-class>com.mysql.jdbc.Driver</driver-class>
 
    <user-name>openkm</user-name>
 
    <password>*secret*</password>
 
    <min-pool-size>5</min-pool-size>
 
    <max-pool-size>20</max-pool-size>
 
    <idle-timeout-minutes>0</idle-timeout-minutes>
 
    <track-statements/>
 
    <prepared-statement-cache-size>32</prepared-statement-cache-size>
 
    <metadata>
 
      <type-mapping>MySQL</type-mapping>
 
    </metadata>
 
  </local-tx-datasource>
 
 
  <!-- OpenKM User Auth -->
 
  <local-tx-datasource>
 
    <jndi-name>OKMAuthDS</jndi-name>
 
    <connection-url>jdbc:mysql://localhost:3306/okm_auth?autoReconnect=true</connection-url>
 
    <driver-class>com.mysql.jdbc.Driver</driver-class>
 
    <user-name>openkm</user-name>
 
    <password>*secret*</password>
 
    <min-pool-size>5</min-pool-size>
 
    <max-pool-size>20</max-pool-size>
 
    <idle-timeout-minutes>0</idle-timeout-minutes>
 
    <track-statements/>
 
    <prepared-statement-cache-size>32</prepared-statement-cache-size>
 
    <metadata>
 
      <type-mapping>MySQL</type-mapping>
 
    </metadata>
 
  </local-tx-datasource>
 
 
  <!-- OpenKM Dashboard Stats -->
 
  <local-tx-datasource>
 
    <jndi-name>OKMDashboardStatsDS</jndi-name>
 
    <connection-url>jdbc:mysql://localhost:3306/okm_dashboard?autoReconnect=true</connection-url>
 
    <driver-class>com.mysql.jdbc.Driver</driver-class>
 
    <user-name>openkm</user-name>
 
    <password>*secret*</password>
 
    <min-pool-size>5</min-pool-size>
 
    <max-pool-size>20</max-pool-size>
 
    <idle-timeout-minutes>0</idle-timeout-minutes>
 
    <track-statements/>
 
    <prepared-statement-cache-size>32</prepared-statement-cache-size>
 
    <metadata>
 
      <type-mapping>MySQL</type-mapping>
 
    </metadata>
 
  </local-tx-datasource>
 
 
  <!-- OpenKM Workflow -->
 
  <local-tx-datasource>
 
    <jndi-name>OKMWorkflowDS</jndi-name>
 
    <connection-url>jdbc:mysql://localhost:3306/okm_workflow?autoReconnect=true</connection-url>
 
    <driver-class>com.mysql.jdbc.Driver</driver-class>
 
    <user-name>openkm</user-name>
 
    <password>*secret*</password>
 
    <min-pool-size>5</min-pool-size>
 
    <max-pool-size>20</max-pool-size>
 
    <idle-timeout-minutes>0</idle-timeout-minutes>
 
    <track-statements/>
 
    <prepared-statement-cache-size>32</prepared-statement-cache-size>
 
    <metadata>
 
      <type-mapping>MySQL</type-mapping>
 
    </metadata>
 
  </local-tx-datasource>
 
</datasources>
 
</source>
 
 
 
More info about this at [http://www.jboss.org/file-access/default/members/jbossas/freezone/docs/Server_Configuration_Guide/4/html/Connectors_on_JBoss-Configuring_JDBC_DataSources.html Configuring JDBC DataSources].
 
 
 
== Login configuration ==
 
Due to the nature of HSQL database and the booleans, you need a little modification in the ''$JBOSS_HOME/server/default/conf/login-config.xml''. Edit this file and change:
 
 
 
<source lang="xml" highlight="6">
 
<!-- OpenKM -->
 
<application-policy name = "OpenKM">
 
  <authentication>
 
      <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required">
 
        <module-option name="dsJndiName">java:/OKMAuthDS</module-option>
 
        <module-option name="principalsQuery">select usr_pass as PASSWD from users where usr_id=? and usr_active='true'</module-option>
 
        <module-option name="rolesQuery">select ur_role as ROLEID, 'Roles' from user_role where ur_user=?</module-option>
 
        <module-option name="hashAlgorithm">md5</module-option>
 
        <module-option name="hashEncoding">hex</module-option>
 
      </login-module>
 
  </authentication>
 
</application-policy>
 
</source>
 
 
 
to
 
 
 
<source lang="xml" highlight="6">
 
<!-- OpenKM -->
 
<application-policy name = "OpenKM">
 
  <authentication>
 
      <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag = "required">
 
        <module-option name="dsJndiName">java:/OKMAuthDS</module-option>
 
        <module-option name="principalsQuery">select usr_pass as PASSWD from users where usr_id=? and usr_active=true</module-option>
 
        <module-option name="rolesQuery">select ur_role as ROLEID, 'Roles' from user_role where ur_user=?</module-option>
 
        <module-option name="hashAlgorithm">md5</module-option>
 
        <module-option name="hashEncoding">hex</module-option>
 
      </login-module>
 
  </authentication>
 
</application-policy>
 
</source>
 
  
 
[[Category: Installation Guide]]
 
[[Category: Installation Guide]]
[[Category:OKM Network]]
+
[[Category: OKM Network]]

Revision as of 13:08, 16 September 2010

Download MySQL JDBC driver from MySQL Home Page and move it to $JBOSS_HOME/server/default/lib.


Nota clasica.png If you get an error like this:
Packet for query is too large (1708726 > 1048576).
You can change this value on the server by setting the max_allowed_packet' variable.
You need to modify your MySQL server configuration file and increase the value of the max_allowed_packet property. Don't forget to restart the MySQL after any change in this file. In Debian based distros like Ubuntu, this configuration file is located at /etc/mysql/my.cnf.