MySQL 元数据存储
要使用此 Apache Druid 扩展,请将 mysql-metadata-storage 包含 在扩展加载列表中。
使用 MySQL 扩展,您可以将 MySQL 用作元数据存储,或者从 MySQL 数据库进行摄取。
该扩展需要一个 Druid 未包含的连接器库。有关安装说明,请参阅 先决条件。
先决条件
要使用 MySQL 扩展,您需要安装以下库之一:
安装 MySQL Connector/J
MySQL 扩展使用 Oracle 的 MySQL JDBC 驱动程序。当前版本的 Druid 使用 8.2.0 版本。其他版本可能无法与此扩展配合使用。
您可以从以下来源之一下载该库:
- MySQL 官网
访问归档页面以获取旧版本产品。 - Maven Central(直接下载)
- 您的包管理器。例如,在基于 Debian 的操作系统上使用 APT 的
libmysql-java。
下载内容包含 MySQL 连接器 JAR 文件,其名称类似于 mysql-connector-j-8.2.0.jar。请将此文件复制到分发包根目录下的 lib 文件夹中,或在其中创建指向该文件的符号链接。
安装 MariaDB Connector/J
此扩展也支持使用 MariaDB 连接器 jar 包。当前版本的 Druid 使用 2.7.3 版本。其他版本可能无法与此扩展配合使用。
您可以从以下来源之一下载该库:
- MariaDB 官网
点击 Show All Files 以访问旧版本产品。 - Maven Central(直接下载)
下载内容包含 MariaDB 连接器 JAR 文件,其名称类似于 maria-java-client-2.7.3.jar。请将此文件复制到分发包根目录下的 lib 文件夹中,或在其中创建指向该文件的符号链接。
要配置 mysql-metadata-storage 扩展以使用 MariaDB 连接器库而非 MySQL,请设置 druid.metadata.mysql.driver.driverClassName=org.mariadb.jdbc.Driver。
连接字符串协议为 jdbc:mysql: 或 jdbc:mariadb:,具体取决于您所使用的 MariaDB 客户端库版本。有关配置连接参数的更多信息,请参阅 MariaDB 文档中关于您所用连接器版本的内容。
设置 MySQL
为了避免在需要对大型元数据表进行模式更改的升级中出现问题,请考虑使用支持即时 ADD COLUMN 语义的 MySQL 版本。例如,MySQL 8。
- 安装 MySQL
使用您常用的包管理器安装 mysql,例如:
- 在 Ubuntu/Debian 上使用 apt:
apt-get install mysql-server - 在 OS X 上使用 Homebrew:
brew install mysql
或者,下载并按照 MySQL Community Server 的安装说明进行操作:https://dev.mysqlserver.cn/downloads/mysql/。
此扩展也支持使用 MariaDB 服务器 (https://mariadb.mysqlserver.cn/download/),在下述说明中可酌情替换为 MariaDB。
- 创建 druid 数据库和用户
连接到安装 MySQL 的机器。
mysql -u root
将以下代码片段粘贴到 mysql 提示符中:
-- create a druid database, make sure to use utf8mb4 as encoding
CREATE DATABASE druid DEFAULT CHARACTER SET utf8mb4;
-- create a druid user
CREATE USER 'druid'@'localhost' IDENTIFIED BY 'password';
-- grant the user all the permissions on the database we just created
GRANT ALL PRIVILEGES ON druid.* TO 'druid'@'localhost';
- 配置您的 Druid 元数据存储扩展
将以下参数添加到您的 Druid 配置中,将 <host> 替换为数据库的位置(主机名和端口)。
druid.extensions.loadList=["mysql-metadata-storage"]
druid.metadata.storage.type=mysql
druid.metadata.storage.connector.connectURI=jdbc:mysql://<host>/druid
druid.metadata.storage.connector.user=druid
druid.metadata.storage.connector.password=diurd
如果使用 MariaDB 连接器库,请设置 druid.metadata.mysql.driver.driverClassName=org.mariadb.jdbc.Driver。
加密 MySQL 连接
此扩展支持加密 MySQL 连接。有关使用 TLS/SSL 加密 MySQL 连接的更多常规信息,请参阅此指南。
配置属性
| 属性 | 描述 | 默认值 | 是否必须 |
|---|---|---|---|
druid.metadata.mysql.ssl.useSSL | 启用 SSL | false | 否 |
druid.metadata.mysql.ssl.clientCertificateKeyStoreUrl | 客户端证书密钥库的文件路径 URL。 | 无 | 否 |
druid.metadata.mysql.ssl.clientCertificateKeyStoreType | 存储客户端证书的密钥库类型。 | 无 | 否 |
druid.metadata.mysql.ssl.clientCertificateKeyStorePassword | 客户端密钥库的 密码提供程序 或字符串密码。 | 无 | 否 |
druid.metadata.mysql.ssl.verifyServerCertificate | 启用服务器证书验证。 | false | 否 |
druid.metadata.mysql.ssl.trustCertificateKeyStoreUrl | 受信任的根证书密钥库的文件路径。 | MySQL 提供的默认信任库 | 如果 verifyServerCertificate 设置为 true 且使用了自定义信任库,则为是 |
druid.metadata.mysql.ssl.trustCertificateKeyStoreType | 存储受信任根证书的密钥库类型。 | JKS | 如果 verifyServerCertificate 设置为 true 且密钥库类型不是 JKS,则为是 |
druid.metadata.mysql.ssl.trustCertificateKeyStorePassword | 信任库的 密码提供程序 或字符串密码。 | 无 | 如果 verifyServerCertificate 设置为 true 且密码不为空,则为是 |
druid.metadata.mysql.ssl.enabledSSLCipherSuites | 使用这些密码套件覆盖现有的密码套件。 | 无 | 否 |
druid.metadata.mysql.ssl.enabledTLSProtocols | 使用这些协议覆盖 TLS 协议。 | 无 | 否 |
MySQL 输入源
MySQL 扩展提供了一个 SQL 输入源实现,用于将数据从 MySQL 数据库摄取到 Druid。有关输入源参数的更多信息,请参阅 SQL 输入源。
{
"type": "index_parallel",
"spec": {
"dataSchema": {
"dataSource": "some_datasource",
"dimensionsSpec": {
"dimensionExclusions": [],
"dimensions": [
"dim1",
"dim2",
"dim3"
]
},
"timestampSpec": {
"format": "auto",
"column": "ts"
},
"metricsSpec": [],
"granularitySpec": {
"type": "uniform",
"segmentGranularity": "DAY",
"queryGranularity": {
"type": "none"
},
"rollup": false,
"intervals": null
},
"transformSpec": {
"filter": null,
"transforms": []
}
},
"ioConfig": {
"type": "index_parallel",
"inputSource": {
"type": "sql",
"database": {
"type": "mysql",
"connectorConfig": {
"connectURI": "jdbc:mysql://some-rds-host.us-west-1.rds.amazonaws.com:3306/druid",
"user": "admin",
"password": "secret"
}
},
"sqls": [
"SELECT * FROM some_table"
]
},
"inputFormat": {
"type": "json"
}
},
"tuningConfig": {
"type": "index_parallel"
}
}
}