<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta name="author" content="Olivier Lamy" />
    <meta name="Date-Creation-yyyymmdd" content="20111006" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Archiva Documentation &#x2013; Apache Archiva Databases</title>
    <link rel="stylesheet" href="../css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="../css/site.css" />
    <link rel="stylesheet" href="../css/print.css" media="print" />
      <script type="text/javascript" src="../js/apache-maven-fluido-1.6.min.js"></script>
      <!-- Google Analytics -->
    <script type="text/javascript">
      var _gaq = _gaq || [];
      _gaq.push(['_setAccount', 'UA-140879-5']);
      _gaq.push(['_trackPageview']);
      (function() {
        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
      })();
    </script>
      </head>
    <body class="topBarDisabled">
      <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><a href="../../../" id="bannerLeft"><img src="../../../images/archiva.png"  alt="Apache Archiva"/></a></div>
        <div class="pull-right"><a href="http://www.apache.org/" id="bannerRight"><img src="https://www.apache.org/images/asf_logo_wide_2016.png"  alt="Apache Software Foundation"/></a></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li class=""><a href="http://www.apache.org/" class="externalLink" title="Apache">Apache</a><span class="divider">/</span></li>
      <li class=""><a href="../index.html" title="Apache Archiva">Apache Archiva</a><span class="divider">/</span></li>
      <li class=""><a href="../../../index.html" title="Apache Archiva">Apache Archiva</a><span class="divider">/</span></li>
    <li class="active ">Apache Archiva Databases</li>
        <li id="publishDate" class="pull-right"><span class="divider">|</span> Last Published: 2018-11-04</li>
          <li id="projectVersion" class="pull-right">Version: 3.0.0-SNAPSHOT</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
<ul class="nav nav-list">
          <li class="nav-header">Introduction</li>
    <li><a href="../quick-start.html" title="Quick Start"><span class="none"></span>Quick Start</a>  </li>
    <li><a href="../tour/index.html" title="Feature Tour"><span class="none"></span>Feature Tour</a>  </li>
    <li><a href="../release-notes.html" title="Release Notes"><span class="none"></span>Release Notes</a>  </li>
    <li><a href="../../../download.html" title="Downloads"><span class="none"></span>Downloads</a>  </li>
          <li class="nav-header">Users Guide</li>
    <li><a href="../userguide/browsing.html" title="Browsing"><span class="none"></span>Browsing</a>  </li>
    <li><a href="../userguide/searching.html" title="Searching"><span class="none"></span>Searching</a>  </li>
    <li><a href="../userguide/delete-artifact.html" title="Deleting an Artifact"><span class="none"></span>Deleting an Artifact</a>  </li>
    <li><a href="../userguide/using-repository.html" title="Using as a repository"><span class="none"></span>Using as a repository</a>  </li>
    <li><a href="../userguide/deploy.html" title="Deploying to repository"><span class="none"></span>Deploying to repository</a>  </li>
    <li><a href="../userguide/virtual-repositories.html" title="Configuring Virtual Repositories"><span class="none"></span>Configuring Virtual Repositories</a>  </li>
    <li><a href="../userguide/rss.html" title="Rss Feeds in Archiva"><span class="none"></span>Rss Feeds in Archiva</a>  </li>
    <li><a href="../userguide/querying-artifacts.html" title="Querying Artifacts"><span class="none"></span>Querying Artifacts</a>  </li>
          <li class="nav-header">Administrators Guide</li>
    <li><a href="../adminguide/installing.html" title="Installing Archiva"><span class="icon-chevron-right"></span>Installing Archiva</a>  </li>
    <li class="active"><a href="#"><span class="none"></span>Databases</a>
  </li>
    <li><a href="../adminguide/repositories-content-storage.html" title="Repositories Content Storage"><span class="none"></span>Repositories Content Storage</a>  </li>
    <li><a href="../adminguide/security.html" title="Security"><span class="icon-chevron-right"></span>Security</a>  </li>
    <li><a href="../adminguide/configuration.html" title="Archiva Configuration"><span class="icon-chevron-right"></span>Archiva Configuration</a>  </li>
    <li><a href="../adminguide/webservices/rest.html" title="REST Apis"><span class="none"></span>REST Apis</a>  </li>
    <li><a href="../adminguide/configuration-files.html" title="Configuration Files"><span class="none"></span>Configuration Files</a>  </li>
    <li><a href="../adminguide/system-status.html" title="System Status"><span class="none"></span>System Status</a>  </li>
    <li><a href="../adminguide/logging.html" title="Log Files"><span class="icon-chevron-right"></span>Log Files</a>  </li>
    <li><a href="../adminguide/reports.html" title="Reports"><span class="none"></span>Reports</a>  </li>
          <li class="nav-header">Customising Archiva</li>
    <li><a href="../customising/writing-consumer.html" title="Writing a Consumer Plugin"><span class="none"></span>Writing a Consumer Plugin</a>  </li>
          <li class="nav-header">More Information</li>
    <li><a href="http://cwiki.apache.org/confluence/display/ARCHIVA/Index" class="externalLink" title="Archiva Wiki"><span class="none"></span>Archiva Wiki</a>  </li>
          <li class="nav-header">ASF</li>
    <li><a href="http://www.apache.org/foundation/how-it-works.html" class="externalLink" title="How Apache Works"><span class="none"></span>How Apache Works</a>  </li>
    <li><a href="http://www.apache.org/foundation/" class="externalLink" title="Foundation"><span class="none"></span>Foundation</a>  </li>
    <li><a href="http://www.apache.org/foundation/sponsorship.html" class="externalLink" title="Sponsoring Apache"><span class="none"></span>Sponsoring Apache</a>  </li>
    <li><a href="http://www.apache.org/foundation/thanks.html" class="externalLink" title="Thanks"><span class="none"></span>Thanks</a>  </li>
          <li class="nav-header">Project Documentation</li>
    <li><a href="../project-info.html" title="Project Information"><span class="icon-chevron-right"></span>Project Information</a>  </li>
  </ul>
<form id="search-form" action="https://www.google.com/search" method="get" >
      <input value="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/" name="sitesearch" type="hidden"/>
  <input class="search-query" name="q" id="query" type="text" />
</form>
<script type="text/javascript">asyncJs( 'https://cse.google.com/brand?form=search-form' )</script>
          <hr />
          <div id="poweredBy">
              <div class="clear"></div>
              <div class="clear"></div>
                          <div id="twitter">
        <a href="https://twitter.com/archiva" class="twitter-follow-button" data-show-count="false" data-align="left" data-size="medium" data-show-screen-name="true" data-lang="en">Follow archiva</a>
    <script type="text/javascript">!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
        </div>
                  <div class="clear"></div>
              <div class="clear"></div>
  <a href="http://maven.apache.org/" title="Built by Maven" class="poweredBy"><img class="builtBy" alt="Built by Maven" src="../images/logos/maven-feather.png" /></a>
              </div>
          </div>
        </div>
        <div id="bodyColumn"  class="span10" >
<div class="section">
<h2><a name="Apache_Archiva_Database"></a>Apache Archiva Database</h2>
<p>Archiva uses an external database for one purpose:</p>
<ul>
<li>As a default user store for security</li></ul>
<p>Generally, it is unnecessary to configure anything - the built in embedded database is suitable for the artifact management, and if an external authentication mechanism is not needed, the user database.</p>
<p>However, it is possible to configure an external database as needed.</p>
<div class="section">
<h3><a name="Configuring_an_external_database"></a>Configuring an external database</h3>
<p>Archiva uses JNDI data sources to locate the databases to use:</p>
<ul>
<li><tt>jdbc/users</tt> - the user store</li></ul>
<p>Configuring an external database for either or both of these sources depends is configured in <tt>jetty.xml</tt> if you are using the <a href="./standalone.html"> standalone installation</a>, or in the application server configuration if you are using the <a href="./webapp.html"> web application installation</a>.</p>
<p>By default the archiva and users databases are stored in the <tt>databases</tt> directory where Archiva is installed. To change the path, just edit all instances of the &quot;DatabaseName&quot; property in <tt>conf/jetty.xml</tt> (see below). </p>
<p><b>Note:</b> If you are using MySQL as your database, Archiva fails when the users database created is initially set to UTF-8 for the character encoding. As a workaround, set the database to UTF-8 encoding after it has been populated. See <a class="externalLink" href="http://jira.codehaus.org/browse/MRM-1373"> MRM-1373</a> for more details.</p>
<div class="source"><pre class="prettyprint">&lt;!-- omitted xml --&gt;

&lt;New id=&quot;users&quot; class=&quot;org.mortbay.jetty.plus.naming.Resource&quot;&gt;
  &lt;Arg&gt;jdbc/users&lt;/Arg&gt;
  &lt;Arg&gt;
    &lt;New class=&quot;org.apache.derby.jdbc.EmbeddedDataSource&quot;&gt;
      &lt;Set name=&quot;DatabaseName&quot;&gt;/path/to/database/directory/users&lt;/Set&gt;
      &lt;Set name=&quot;user&quot;&gt;sa&lt;/Set&gt;
      &lt;Set name=&quot;createDatabase&quot;&gt;create&lt;/Set&gt;
    &lt;/New&gt;
  &lt;/Arg&gt;
&lt;/New&gt;

&lt;New id=&quot;usersShutdown&quot; class=&quot;org.mortbay.jetty.plus.naming.Resource&quot;&gt;
  &lt;Arg&gt;jdbc/usersShutdown&lt;/Arg&gt;
  &lt;Arg&gt;
    &lt;New class=&quot;org.apache.derby.jdbc.EmbeddedDataSource&quot;&gt;
      &lt;Set name=&quot;DatabaseName&quot;&gt;/path/to/database/directory/users&lt;/Set&gt;
      &lt;Set name=&quot;user&quot;&gt;sa&lt;/Set&gt;
      &lt;Set name=&quot;shutdownDatabase&quot;&gt;shutdown&lt;/Set&gt;
    &lt;/New&gt;
  &lt;/Arg&gt;
&lt;/New&gt;
&lt;!-- omitted xml --&gt;</pre></div></div>
<div class="section">
<h3><a name="Backing_up_the_database"></a>Backing up the database</h3>
<p>While it is a good idea to back up both databases, it is not strictly necessary to back up the repository database on a regular basis. Should any data loss be suffered, this database can be regenerated by deleting it's contents and re-scanning the repositories.</p>
<p>If you are using the default user security mechanism, it is important to back up the users database on a regular basis to ensure that the user passwords and information are not lost in the event of corruption. With the default embedded storage this is simply a matter of making a copy of the database directory on the filesystem. If you have configured an external database as the source for user information, please refer to your database documentation for backup instructions.</p></div>
<div class="section">
<h3><a name="MySql_setup"></a>MySql setup</h3>
<div class="source"><pre class="prettyprint">  create database archiva character set utf8;

  GRANT ALL PRIVILEGES ON archiva.* TO 'archivauser'@'localhost' IDENTIFIED BY 'archivauserpassword'</pre></div>
<p>Replace &quot;archivauser&quot; and &quot;archivauserpassword&quot; with a username and password of your choice. If Archiva is not running on the same server as your MySQL database server, replace &quot;localhost&quot; with the hostname or IP address of the Archiva server.</p></div></div>
        </div>
      </div>
    </div>
    <hr/>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
<div class="row span12">Apache Archiva :: Documentation, Archiva :: Documentation, Apache, the Apache feather logo, and the Apache Archiva :: Documentation project logos are trademarks of The Apache Software Foundation.</div>
      <div class="row span12">
        <a href="http://archiva.apache.org/docs/3.0.0-SNAPSHOT/privacy-policy.html">Privacy Policy</a>
      </div>
        </div>
                          <div id="ohloh" class="pull-right">
      <script type="text/javascript" src="https://www.ohloh.net/p/6670/widgets/project_basic_stats.js"></script>
    </div>
        </div>
    </footer>
    </body>
</html>