# Source: https://docs.hypermode.com/dgraph/admin/import-mysql.md

# Import MySQL Data

<Info>
  We're overhauling Dgraph's docs to make them clearer and more approachable. If
  you notice any issues during this transition or have suggestions, please
  [let us know](https://github.com/hypermodeinc/docs/issues).
</Info>

You can use the Dgraph migration tool to convert a MySQL database tables into a
schema and RDF file, and then load the resulting dataset into Dgraph.

## Deriving a Dgraph schema from SQL

Before converting the data, the migration tool needs to derive the schema of
each predicate. Dgraph follows two simple rules for converting the schema:

1. For plain attributes, there is usually a one-to-one mapping between a SQL
   data type and the Dgraph datatype. For instance, a `Body` column in the
   `Posts` table is of type `text`, and hence, the predicate `posts.Body` is of
   type `string`: `posts.Body: string .`
2. The predicates representing inter-object relationships, like
   `posts.OwnerUserId.`, simply have the type `[uid]`, meaning following the
   predicate leads us to a set of other objects.

### Using the migration tool

You can run the Dgraph migrate tool using this command:

```sh
dgraph migrate [flags]
```

1. Create a `config.properties` file that has the following settings and values
   shouldn't be in quotes:

   ```txt
   user = <SQL_DB_USERNAME>
   password = <SQL_DB_PASSWORD>
   db = <SQL_DB>
   ```

2. Export the SQL database into `schema.txt` and `sql.rdf` file:

   ```sh
   dgraph migrate --config config.properties --output_schema schema.txt --output_data sql.rdf
   ```

   An output similar to this appears:

   ```txt
   Dumping table xyz
   Dumping table constraints xyz
   ...
   ```

<Note>
  If you are connecting to a remote DB hosted on AWS, Google Cloud, and others,
  you need to pass the flags `--host`, and `--port`. For description of the
  various flags in the migration tool, see [command line
  options](dgraph/cli/command-reference#dgraph-migrate).
</Note>

After the migration is complete, two new files are available:

* an RDF file `sql.rdf` containing all the N-Quad entries
* a schema file `schema.txt`.

### Importing the data

The two files can then be imported into Dgraph using the
[Dgraph Live Loader](/dgraph/admin/live-loader) or
[Bulk Loader](/dgraph/admin/bulk-loader). Sometimes you might want to customize
your schema. For example, you might add an index to a predicate, or change an
inter-object predicate (edge) from unidirectional to bidirectional by adding the
`@reverse` directive. If you would like such customizations, you should do it by
editing the schema file generated by the migration tool before feeding the files
to the Live Loader or Bulk Loader.

To import the data into Dgraph using the Live Loader to Dgraph Zero and Alpha
servers running on the default ports use:

```sh
dgraph live -z localhost:5080 -a localhost:9080 --files sql.rdf --format=rdf --schema schema.txt
```