---
title: Manually upgrade from InfluxDB 1.x to 2.9
description: To manually upgrade from InfluxDB 1.x to InfluxDB 2.9, migrate data, create v1-compatible authorizations, and create database and retention policy (DBRP) mappings.
url: https://docs.influxdata.com/influxdb/v2/install/upgrade/v1-to-v2/manual-upgrade/
estimated_tokens: 6526
product: InfluxDB OSS v2
version: v2
---

# Manually upgrade from InfluxDB 1.x to 2.9

This page documents an earlier version of InfluxDB OSS. [InfluxDB 3 Core](/influxdb3/core/) is the latest stable version.

#### API token hashing is enabled by default in InfluxDB OSS 2.9.0

Stronger token security: tokens are stored as hashes on disk, so a copy of the database file doesn’t expose usable tokens. Existing tokens are hashed on first startup and the original strings can’t be recovered afterward — **capture any plaintext tokens you still need before you upgrade**.

For more information, see [Token hashing](/influxdb/v2/admin/tokens/#token-hashing).

To manually upgrade from InfluxDB 1.x to InfluxDB 2.9:

1. [Install InfluxDB 2.9](#install-influxdb-21)
2. [Migrate custom configuration settings](#migrate-custom-configuration-settings)
3. [Create DBRP mappings](#create-dbrp-mappings)
4. [Create authorizations](#create-authorizations)
5. [Migrate time series data](#migrate-time-series-data)
6. [Migrate continuous queries](#migrate-continuous-queries)
7. [Query data with InfluxQL](#query-data-with-influxql)

## Install InfluxDB 2.9

[Download, install, and set up InfluxDB 2.9](/influxdb/v2/get-started/).

#### Required 2.x credentials

All InfluxDB 2.9 `influx` CLI examples below assume the required **host**, **organization**, and **API token** credentials are provided by your [`influx` CLI configuration](/influxdb/v2/reference/cli/influx/#provide-required-authentication-credentials).

## Migrate custom configuration settings

If you’re using custom configuration settings in your InfluxDB 1.x instance, do the following:

1. Compare 1.x and 2.9 configuration settings:
    
    [](#view-configuration-option-parity)
    
    View configuration option parity
    
    | 1.x configuration option | 2.9 configuration option |
    | --- | --- |
    | [data] |  |
    | dir | engine-path |
    | wal-dir | engine-path |
    | wal-fsync-delay | storage-wal-fsync-delay |
    | index-version |  |
    | trace-logging-enabled |  |
    | query-log-enabled |  |
    | strict-error-handling |  |
    | validate-keys | storage-validate-keys |
    | cache-max-memory-size | storage-cache-max-memory-size |
    | cache-snapshot-memory-size | storage-cache-snapshot-memory-size |
    | cache-snapshot-write-cold-duration | storage-cache-snapshot-write-cold-duration |
    | compact-full-write-cold-duration | storage-compact-full-write-cold-duration |
    | max-concurrent-compactions | storage-max-concurrent-compactions |
    | compact-throughput |  |
    | compact-throughput-burst | storage-compact-throughput-burst |
    | tsm-use-madv-willneed | storage-tsm-use-madv-willneed |
    | max-series-per-database |  |
    | max-values-per-tag |  |
    | max-index-log-file-size | storage-max-index-log-file-size |
    | series-id-set-cache-size | storage-series-id-set-cache-size |
    |  |  |
    | [retention] |  |
    | check-interval | storage-retention-check-interval |
    |  |  |
    | [shard-precreation] |  |
    | check-interval | storage-shard-precreator-check-interval |
    | advance-period | storage-shard-precreator-advance-period |
    |  |  |
    | [http] |  |
    | flux-enabled |  |
    | flux-log-enabled | flux-log-enabled |
    | bind-address | http-bind-address |
    | auth-enabled |  |
    | realm |  |
    | log-enabled |  |
    | suppress-write-log |  |
    | access-log-path |  |
    | access-log-status-filters |  |
    | write-tracing |  |
    | pprof-enabled | pprof-disabled |
    | pprof-auth-enabled |  |
    | debug-pprof-enabled |  |
    | ping-auth-enabled |  |
    | https-enabled |  |
    | https-certificate | tls-cert |
    | https-private-key | tls-key |
    | shared-secret |  |
    | max-row-limit |  |
    | max-connection-limit |  |
    | unix-socket-enabled |  |
    | bind-socket |  |
    | max-body-size |  |
    | max-concurrent-write-limit |  |
    | max-enqueued-write-limit |  |
    | enqueued-write-timeout | http-write-timeout |
    |  |  |
    | [logging] |  |
    | format |  |
    | level | log-level |
    | suppress-logo |  |
    |  |  |
    | [tls] |  |
    | ciphers | tls-strict-ciphers |
    | min-version | tls-min-version |
    | max-version |  |
    
    #### 1.x configuration groups not in 2.9
    
    The following 1.x configuration groups **do not** apply to InfluxDB 2.9:
    
    -   meta
    -   coordinator
    -   monitor
    -   subscriber
    -   graphite
    -   collectd
    -   opentsdb
    -   udp
    -   continuous\_queries
    
2. Apply your 1.x custom settings to the comparable InfluxDB 2.9 settings using `influxd` flags, environment variables, or a 2.9 configuration file. For more information about configuring InfluxDB 2.9, see [Configuration options](/influxdb/v2/reference/config-options/).
    
3. **Restart `influxd`**.
    

## Create DBRP mappings

InfluxDB database and retention policy (DBRP) mappings associate database and retention policy combinations with InfluxDB 2.9 [buckets](/influxdb/v2/reference/glossary/#bucket). These mappings allow InfluxDB 1.x clients to successfully query and write to InfluxDB 2.9 buckets while using the 1.x DBRP convention.

*For more information about DBRP mapping, see [Database and retention policy mapping](/influxdb/v2/reference/api/influxdb-1x/dbrp/).*

**To map a DBRP combination to an InfluxDB 2.9 bucket:**

1. **Create a bucket**  
    [Create an InfluxDB 2.9 bucket](/influxdb/v2/admin/buckets/create-bucket/). We recommend creating a bucket for each unique 1.x database and retention policy combination using the following naming convention:
    
    ```sh
    # Naming convention
    db-name/rp-name
    
    # Example
    telegraf/autogen
    ```
    
2. **Create a DBRP mapping**  
    Use the [`influx v1 dbrp create` command](/influxdb/v2/reference/cli/influx/v1/dbrp/create/) to create a DBRP mapping. Provide the following:
    
    -   database name
    -   retention policy name *(not retention period)*
    -   [bucket ID](/influxdb/v2/admin/buckets/view-buckets/)
    -   *(optional)* `--default` flag if you want the retention policy to be the default retention policy for the specified database
    
    <!-- Tabbed content: Select one of the following options -->
    
    
    **DB with one RP:**
    
    ```sh
    influx v1 dbrp create \
      --db example-db \
      --rp example-rp \
      --bucket-id 00xX00o0X001 \
      --default
    ```
    
    
    
    **DB with multiple RPs:**
    
    ```sh
    # Create telegraf/autogen DBRP mapping with autogen
    # as the default RP for the telegraf DB
    
    influx v1 dbrp create \
      --db telegraf \
      --rp autogen \
      --bucket-id 00xX00o0X001 \
      --default
    
    # Create telegraf/downsampled-daily DBRP mapping that
    # writes to a different bucket
    
    influx v1 dbrp create \
      --db telegraf \
      --rp downsampled-daily \
      --bucket-id 00xX00o0X002
    ```
    
    
    
    <!-- End tabbed content -->
    
3. **Confirm the DBRP mapping was created**  
    Use the [`influx v1 dbrp list`](/influxdb/v2/reference/cli/influx/v1/dbrp/list/) to list existing DBRP mappings.
    
    ```sh
    influx v1 dbrp list
    ```
    

For information about managing DBRP mappings, see the [`influx v1 dbrp` command documentation](/influxdb/v2/reference/cli/influx/v1/dbrp/).

## Create authorizations

InfluxDB 2.9 requires authentication and provides two authentication methods:

-   [Token authentication](#token-authentication)
-   [1.x compatible authorizations](#1x-compatible-authorizations)

### Token authentication

Use [InfluxDB 2.9 token authentication](/influxdb/v2/admin/tokens/) to authenticate requests to InfluxDB 2.9.

##### Recommended if:

-   Your 1.x instance **does not have authentication enabled**.

#### Use tokens with basic authentication

To use tokens with InfluxDB clients that require an InfluxDB username and password, provide an arbitrary user name and pass the token as the password.

### 1.x-compatible authorizations

InfluxDB 2.9 provides a [1.x compatibility API](/influxdb/v2/reference/api/influxdb-1x/) that lets you authenticate using a username and password as in InfluxDB 1.x. If authentication is enabled in your InfluxDB 1.x instance, [create a 1.x-compatible authorization](#create-a-1x-compatible-authorization) with the same username and password as your InfluxDB 1.x instance to allow external clients to connect to your InfluxDB 2.9 instance without any change.

##### Recommended if:

-   Your 1.x instance **has authentication enabled**.
-   You’re using **InfluxDB 1.x clients or client libraries** configured with InfluxDB usernames and passwords.

1.x compatibility authorizations are separate from credentials used to log into the InfluxDB 2.9 user interface (UI).

#### Create a 1.x-compatible authorization

Use the InfluxDB 2.9 [`influx v1 auth create` command](/influxdb/v2/reference/cli/influx/v1/auth/create/) to create a 1.x-compatible authorization that grants read/write permissions to specific 2.9 buckets. Provide the following:

-   list of [bucket IDs](/influxdb/v2/admin/buckets/view-buckets/) to grant read or write permissions to
-   new v1 auth username
-   new v1 auth password *(when prompted)*

<!-- Tabbed content: Select one of the following options -->

**Single bucket:**

```sh
influx v1 auth create \
  --read-bucket 00xX00o0X001 \
  --write-bucket 00xX00o0X001 \
  --username example-user
```

**Multiple buckets:**

```sh
influx v1 auth create \
  --read-bucket 00xX00o0X001 \
  --read-bucket 00xX00o0X002 \
  --write-bucket 00xX00o0X001 \
  --write-bucket 00xX00o0X002 \
  --username example-user
```

<!-- End tabbed content -->

For information about managing 1.x compatible authorizations, see the [`influx v1 auth` command documentation](/influxdb/v2/reference/cli/influx/v1/auth/).

## Migrate time series data

To migrate time series data from your InfluxDB 1.x instance to InfluxDB 2.9:

1. Use the **InfluxDB 1.x** [`influx_inspect export` command](/influxdb/v1/tools/influx_inspect/#export) to export time series data as line protocol. Include the `-lponly` flag to exclude comments and the data definition language (DDL) from the output file.
    
    *We recommend exporting each DBRP combination separately to easily write data to a corresponding InfluxDB 2.9 bucket.*
    
    ```sh
    # Syntax
    influx_inspect export \
      -database <database-name> \
      -retention <retention-policy-name> \
      -out <output-file-path> \
      -lponly
    
    # Example
    influx_inspect export \
      -database example-db \
      -retention example-rp \
      -out /path/to/example-db_example-rp.lp \
      -lponly
    ```
    
2. Use the **InfluxDB 2.9** [`influx write` command](/influxdb/v2/reference/cli/influx/write/) to write the exported line protocol to InfluxDB 2.9.
    
    ```sh
    # Syntax
    influx write \
      --bucket <bucket-name> \
      --file <path-to-line-protocol-file>
    
    # Example
    influx write \
      --bucket example-db/example-rp \
      --file /path/to/example-db_example-rp.lp
    ```
    
3. Repeat steps 1-2 for each bucket.
    

## Migrate continuous queries

For information about migrating InfluxDB 1.x continuous queries to InfluxDB 2.9 tasks, see [Migrate continuous queries to tasks](/influxdb/v2/upgrade/v1-to-v2/migrate-cqs/).

## Query data with InfluxQL

InfluxDB 2.9 supports querying data with both Flux and InfluxQL. For more information about querying InfluxDB 2.9 with InfluxQL, see [Query data with InfluxQL](/influxdb/v2/query-data/influxql/).

#### Related

-   [Upgrade from InfluxDB 1.x to 2.9](/influxdb/v2/install/upgrade/v1-to-v2/)
-   [Migrate continuous queries to tasks](/influxdb/v2/install/upgrade/v1-to-v2/migrate-cqs/)
