<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Druid">
<meta name="keywords" content="druid,kafka,database,analytics,streaming,real-time,real time,apache,open source">
<meta name="author" content="Apache Software Foundation">

<title>Druid | MySQL Metadata Store</title>

<link rel="alternate" type="application/atom+xml" href="/feed">
<link rel="shortcut icon" href="/img/favicon.png">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.7.2/css/all.css" integrity="sha384-fnmOCqbTlWIlj8LyTjo7mOUStjsKC4pOpQbqyi7RrhN7udi9RwhKkMHpvLbHG9Sr" crossorigin="anonymous">

<link href='//fonts.googleapis.com/css?family=Open+Sans+Condensed:300,700,300italic|Open+Sans:300italic,400italic,600italic,400,300,600,700' rel='stylesheet' type='text/css'>

<link rel="stylesheet" href="/css/bootstrap-pure.css?v=1.1">
<link rel="stylesheet" href="/css/base.css?v=1.1">
<link rel="stylesheet" href="/css/header.css?v=1.1">
<link rel="stylesheet" href="/css/footer.css?v=1.1">
<link rel="stylesheet" href="/css/syntax.css?v=1.1">
<link rel="stylesheet" href="/css/docs.css?v=1.1">

<script>
  (function() {
    var cx = '000162378814775985090:molvbm0vggm';
    var gcse = document.createElement('script');
    gcse.type = 'text/javascript';
    gcse.async = true;
    gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
        '//cse.google.com/cse.js?cx=' + cx;
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(gcse, s);
  })();
</script>


  </head>

  <body>
    <!-- Start page_header include -->
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>

<div class="top-navigator">
  <div class="container">
    <div class="left-cont">
      <a class="logo" href="/"><span class="druid-logo"></span></a>
    </div>
    <div class="right-cont">
      <ul class="links">
        <li class=""><a href="/technology">Technology</a></li>
        <li class=""><a href="/use-cases">Use Cases</a></li>
        <li class=""><a href="/druid-powered">Powered By</a></li>
        <li class=""><a href="/docs/latest/design/">Docs</a></li>
        <li class=""><a href="/community/">Community</a></li>
        <li class="header-dropdown">
          <a>Apache</a>
          <div class="header-dropdown-menu">
            <a href="https://www.apache.org/" target="_blank">Foundation</a>
            <a href="https://www.apache.org/events/current-event" target="_blank">Events</a>
            <a href="https://www.apache.org/licenses/" target="_blank">License</a>
            <a href="https://www.apache.org/foundation/thanks.html" target="_blank">Thanks</a>
            <a href="https://www.apache.org/security/" target="_blank">Security</a>
            <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank">Sponsorship</a>
          </div>
        </li>
        <li class=" button-link"><a href="/downloads.html">Download</a></li>
      </ul>
    </div>
  </div>
  <div class="action-button menu-icon">
    <span class="fa fa-bars"></span> MENU
  </div>
  <div class="action-button menu-icon-close">
    <span class="fa fa-times"></span> MENU
  </div>
</div>

<script type="text/javascript">
  var $menu = $('.right-cont');
  var $menuIcon = $('.menu-icon');
  var $menuIconClose = $('.menu-icon-close');

  function showMenu() {
    $menu.fadeIn(100);
    $menuIcon.fadeOut(100);
    $menuIconClose.fadeIn(100);
  }

  $menuIcon.click(showMenu);

  function hideMenu() {
    $menu.fadeOut(100);
    $menuIconClose.fadeOut(100);
    $menuIcon.fadeIn(100);
  }

  $menuIconClose.click(hideMenu);

  $(window).resize(function() {
    if ($(window).width() >= 840) {
      $menu.fadeIn(100);
      $menuIcon.fadeOut(100);
      $menuIconClose.fadeOut(100);
    }
    else {
      $menu.fadeOut(100);
      $menuIcon.fadeIn(100);
      $menuIconClose.fadeOut(100);
    }
  });
</script>

<!-- Stop page_header include -->


    <div class="container doc-container">
      
      

      
      <p> Looking for the <a href="/docs/0.19.0/">latest stable documentation</a>?</p>
      

      <div class="row">
        <div class="col-md-9 doc-content">
          <p>
            <a class="btn btn-default btn-xs visible-xs-inline-block visible-sm-inline-block" href="#toc">Table of Contents</a>
          </p>
          <!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements.  See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership.  The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License.  You may obtain a copy of the License at
  ~
  ~   http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<h1 id="mysql-metadata-store">MySQL Metadata Store</h1>

<p>To use this Apache Druid (incubating) extension, make sure to <a href="../../operations/including-extensions.html">include</a> <code>mysql-metadata-storage</code> as an extension.</p>

<div class="note caution">
The MySQL extension requires the MySQL Connector/J library which is not included in the Druid distribution. 
Refer to the following section for instructions on how to install this library.
</div>

<h2 id="installing-the-mysql-connector-library">Installing the MySQL connector library</h2>

<p>This extension uses Oracle&#39;s MySQL JDBC driver which is not included in the Druid distribution and must be
installed separately. There are a few ways to obtain this library:</p>

<ul>
<li>It can be downloaded from the MySQL site at: https://dev.mysql.com/downloads/connector/j/</li>
<li>It can be fetched from Maven Central at: http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.38/mysql-connector-java-5.1.38.jar</li>
<li>It may be available through your package manager, e.g. as <code>libmysql-java</code> on APT for a Debian-based OS</li>
</ul>

<p>This should fetch a JAR file named similar to &#39;mysql-connector-java-x.x.xx.jar&#39;.</p>

<p>Copy or symlink this file to <code>extensions/mysql-metadata-storage</code> under the distribution root directory.</p>

<h2 id="setting-up-mysql">Setting up MySQL</h2>

<ol>
<li>Install MySQL</li>
</ol>

<p>Use your favorite package manager to install mysql, e.g.:
  - on Ubuntu/Debian using apt <code>apt-get install mysql-server</code>
  - on OS X, using <a href="http://brew.sh/">Homebrew</a> <code>brew install mysql</code></p>

<p>Alternatively, download and follow installation instructions for MySQL
  Community Server here:
  <a href="http://dev.mysql.com/downloads/mysql/">http://dev.mysql.com/downloads/mysql/</a></p>

<ol>
<li>Create a druid database and user</li>
</ol>

<p>Connect to MySQL from the machine where it is installed.</p>
<div class="highlight"><pre><code class="language-bash" data-lang="bash"><span></span>  &gt; mysql -u root
</code></pre></div>
<p>Paste the following snippet into the mysql prompt:</p>
<div class="highlight"><pre><code class="language-sql" data-lang="sql"><span></span>  <span class="c1">-- create a druid database, make sure to use utf8mb4 as encoding</span>
  <span class="k">CREATE</span> <span class="k">DATABASE</span> <span class="n">druid</span> <span class="k">DEFAULT</span> <span class="nb">CHARACTER</span> <span class="k">SET</span> <span class="n">utf8mb4</span><span class="p">;</span>

  <span class="c1">-- create a druid user</span>
  <span class="k">CREATE</span> <span class="k">USER</span> <span class="s1">&#39;druid&#39;</span><span class="o">@</span><span class="s1">&#39;localhost&#39;</span> <span class="n">IDENTIFIED</span> <span class="k">BY</span> <span class="s1">&#39;diurd&#39;</span><span class="p">;</span>

  <span class="c1">-- grant the user all the permissions on the database we just created</span>
  <span class="k">GRANT</span> <span class="k">ALL</span> <span class="k">PRIVILEGES</span> <span class="k">ON</span> <span class="n">druid</span><span class="p">.</span><span class="o">*</span> <span class="k">TO</span> <span class="s1">&#39;druid&#39;</span><span class="o">@</span><span class="s1">&#39;localhost&#39;</span><span class="p">;</span>
</code></pre></div>
<ol>
<li>Configure your Druid metadata storage extension:</li>
</ol>

<p>Add the following parameters to your Druid configuration, replacing <code>&lt;host&gt;</code>
  with the location (host name and port) of the database.</p>
<div class="highlight"><pre><code class="language-properties" data-lang="properties"><span></span><span class="na">  druid.extensions.loadList</span><span class="o">=</span><span class="s">[&quot;mysql-metadata-storage&quot;]</span>
<span class="na">  druid.metadata.storage.type</span><span class="o">=</span><span class="s">mysql</span>
<span class="na">  druid.metadata.storage.connector.connectURI</span><span class="o">=</span><span class="s">jdbc:mysql://&lt;host&gt;/druid</span>
<span class="na">  druid.metadata.storage.connector.user</span><span class="o">=</span><span class="s">druid</span>
<span class="na">  druid.metadata.storage.connector.password</span><span class="o">=</span><span class="s">druid</span>
</code></pre></div>
<h2 id="encrypting-mysql-connections">Encrypting MySQL connections</h2>

<p>This extension provides support for encrypting MySQL connections. To get more information about encrypting MySQL connections using TLS/SSL in general, please refer to this <a href="https://dev.mysql.com/doc/refman/5.7/en/using-encrypted-connections.html">guide</a>.</p>

<h2 id="configuration">Configuration</h2>

<table><thead>
<tr>
<th>Property</th>
<th>Description</th>
<th>Default</th>
<th>Required</th>
</tr>
</thead><tbody>
<tr>
<td><code>druid.metadata.mysql.ssl.useSSL</code></td>
<td>Enable SSL</td>
<td><code>false</code></td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.clientCertificateKeyStoreUrl</code></td>
<td>The file path URL to the client certificate key store.</td>
<td>none</td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.clientCertificateKeyStoreType</code></td>
<td>The type of the key store where the client certificate is stored.</td>
<td>none</td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.clientCertificateKeyStorePassword</code></td>
<td>The <a href="../../operations/password-provider.html">Password Provider</a> or String password for the client key store.</td>
<td>none</td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.verifyServerCertificate</code></td>
<td>Enables server certificate verification.</td>
<td>false</td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.trustCertificateKeyStoreUrl</code></td>
<td>The file path to the trusted root certificate key store.</td>
<td>Default trust store provided by MySQL</td>
<td>yes if <code>verifyServerCertificate</code> is set to true and a custom trust store is used</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.trustCertificateKeyStoreType</code></td>
<td>The type of the key store where trusted root certificates are stored.</td>
<td>JKS</td>
<td>yes if <code>verifyServerCertificate</code> is set to true and keystore type is not JKS</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.trustCertificateKeyStorePassword</code></td>
<td>The <a href="../../operations/password-provider.html">Password Provider</a> or String password for the trust store.</td>
<td>none</td>
<td>yes if <code>verifyServerCertificate</code> is set to true and password is not null</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.enabledSSLCipherSuites</code></td>
<td>Overrides the existing cipher suites with these cipher suites.</td>
<td>none</td>
<td>no</td>
</tr>
<tr>
<td><code>druid.metadata.mysql.ssl.enabledTLSProtocols</code></td>
<td>Overrides the TLS protocols with these protocols.</td>
<td>none</td>
<td>no</td>
</tr>
</tbody></table>

        </div>
        <div class="col-md-3">
          <div class="searchbox">
            <gcse:searchbox-only></gcse:searchbox-only>
          </div>
          <div id="toc" class="nav toc hidden-print">
          </div>
        </div>
      </div>
    </div>

    <!-- Start page_footer include -->
<footer class="druid-footer">
<div class="container">
  <div class="text-center">
    <p>
    <a href="/technology">Technology</a>&ensp;·&ensp;
    <a href="/use-cases">Use Cases</a>&ensp;·&ensp;
    <a href="/druid-powered">Powered by Druid</a>&ensp;·&ensp;
    <a href="/docs/latest/">Docs</a>&ensp;·&ensp;
    <a href="/community/">Community</a>&ensp;·&ensp;
    <a href="/downloads.html">Download</a>&ensp;·&ensp;
    <a href="/faq">FAQ</a>
    </p>
  </div>
  <div class="text-center">
    <a title="Join the user group" href="https://groups.google.com/forum/#!forum/druid-user" target="_blank"><span class="fa fa-comments"></span></a>&ensp;·&ensp;
    <a title="Follow Druid" href="https://twitter.com/druidio" target="_blank"><span class="fab fa-twitter"></span></a>&ensp;·&ensp;
    <a title="GitHub" href="https://github.com/apache/druid" target="_blank"><span class="fab fa-github"></span></a>
  </div>
  <div class="text-center license">
    Copyright © 2020 <a href="https://www.apache.org/" target="_blank">Apache Software Foundation</a>.<br>
    Except where otherwise noted, licensed under <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">CC BY-SA 4.0</a>.<br>
    Apache Druid, Druid, and the Druid logo are either registered trademarks or trademarks of The Apache Software Foundation in the United States and other countries.
  </div>
</div>
</footer>

<script async src="https://www.googletagmanager.com/gtag/js?id=UA-131010415-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'UA-131010415-1');
</script>
<script>
  function trackDownload(type, url) {
    ga('send', 'event', 'download', type, url);
  }
</script>
<script src="//code.jquery.com/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script src="/assets/js/druid.js"></script>
<!-- stop page_footer include -->


    <script>
    $(function() {
      $(".toc").load("/docs/0.15.0-incubating/toc.html");

      // There is no way to tell when .gsc-input will be async loaded into the page so just try to set a placeholder until it works
      var tries = 0;
      var timer = setInterval(function() {
        tries++;
        if (tries > 300) clearInterval(timer);
        var searchInput = $('input.gsc-input');
        if (searchInput.length) {
          searchInput.attr('placeholder', 'Search');
          clearInterval(timer);
        }
      }, 100);
    });
    </script>
  </body>
</html>
