> For the complete documentation index, see [llms.txt](https://mariadb.com/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://mariadb.com/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-hotcopy.md).

# mariadb-hotcopy

`mariadb-hotcopy` is a Perl script that was originally written and contributed by Tim Bunce. It uses [FLUSH TABLES](/docs/server/reference/sql-statements/administrative-sql-statements/flush-commands/flush.md), [LOCK TABLES](/docs/server/reference/sql-statements/transactions/lock-tables.md), and cp or scp to make a database backup.

{% hint style="info" %}
Previously, the client was called `mysqlhotcopy`. It can still be accessed under this name, via a symlink in Linux, or an alternate binary in Windows.
{% endhint %}

It is a fast way to make a backup of the database or single tables, but it can be run only on the same machine where the database directories are located. `mariadb-hotcopy` works only for backing up [MyISAM](/docs/server/server-usage/storage-engines/myisam-storage-engine.md) and [ARCHIVE](/docs/server/server-usage/storage-engines/archive.md) tables. It runs on Unix and NetWare.

To use `mariadb-hotcopy`, you must have read access to the files for the tables that you are backing up, the `SELECT` [privilege](/docs/server/reference/sql-statements/account-management-sql-statements/grant.md) for those tables, the `RELOAD` privilege (to be able to execute `FLUSH TABLES`), and the `LOCK TABLES` privilege (to be able to lock the tables).

```bash
shell> mariadb-hotcopy db_name [/path/to/new_directory]
shell> mariadb-hotcopy db_name_1 ... db_name_n /path/to/new_directory
```

Back up tables in the given database that match a regular expression:

```bash
shell> mariadb-hotcopy db_name./regex/
```

The regular expression for the table name can be negated by prefixing it with a tilde (`~`):

```bash
shell> mariadb-hotcopy db_name./~regex/
```

`mariadb-hotcopy` supports the following options, which can be specified on the command line or in the \[`mariadb-hotcopy`] and \[`client`] option file groups.

#### `--help`, `-?`

Display a help message and exit.

#### `--addtodest`

Do not rename target directory (if it exists); merely add files to it.

#### `--allowold`

Do not abort if a target exists; rename it by adding an \_old suffix.

#### `--checkpoint`=*db\_name.tbl\_name*

Insert checkpoint entries into the specified database *db\_name* and table *tbl\_name*.

#### `--chroot`=*directory*

Base *directory* of the chroot jail in which mariadbd operates. The path value should match that of the\
`--chroot` option given to `mariadbd`.

#### `--debug`

Enable debug output.

#### `--dryrun`, `-n`

Report actions without performing them.

#### `--flushlog`

Flush logs after all tables are locked.

#### `--host`=*host\_name*, `-h` *host\_name*

The *host name* of the local host to use for making a TCP/IP connection to the local server. By default, the connection is made to localhost using a Unix socket file.

#### `--keepold`

Do not delete previous (renamed) target when done.

#### `--method`=*method*

The *method* for copying files (`cp` or `scp`). The default is `cp`.

#### `--noindices`

Do not include full index files for MyISAM tables in the backup. This makes the backup smaller and faster. The indexes for reloaded tables can be reconstructed later with [myisamchk -rq](/docs/server/clients-and-utilities/myisam-clients-and-utilities/myisamchk.md).

#### `--old-server`

Connect to old MySQL server (before MySQL 5.5) which doesn't have [FLUSH TABLES WITH READ LOCK](/docs/server/reference/sql-statements/administrative-sql-statements/flush-commands/flush.md) fully implemented.

#### `--password`=*password*, `-p`*password*

The *password* to use when connecting to the server. The password value is mandatory for this option, unlike for other MariaDB programs. Specifying a password on the command line should be considered insecure. You can use an option file to avoid giving the password on the command line.

#### `--port`=*port-number*, `-P` *port-number*

The TCP/IP *port number* to use when connecting to the local server.

#### `--quiet`, `-q`

Be silent except for errors.

#### `--record\_log\_pos`=*db\_name*.*tbl\_name*

Record master and slave status in the specified database *db\_name* and table *tbl\_name*.

#### `--regexp`=*expression*

Copy all databases with names that match the given regular *expression*.

#### `--resetmaster`

Reset the binary log after locking all the tables.

#### `--resetslave`

Reset the `master.info` file after locking all the tables.

#### `--socket`=*socket-file*, `-S` *socket-file*

The Unix *socket file* to use for connections to localhost.

#### `--suffix`=*string*

The *suffix string* to use for names of copied databases.

#### `--tmpdir`=*directory*

The temporary *directory*. The default is `/tmp`.

#### `--user`=*username*, `-u` *username*

The MariaDB *username* to use when connecting to the server.

Use perldoc for additional `mariadb-hotcopy` documentation, including information about the structure of the tables needed for the`--checkpoint` and \`\`--record`_log_pos` options:

```bash
shell> perldoc mariadb-hotcopy
```

## See Also

* [mariadb-dump](/docs/server/clients-and-utilities/backup-restore-and-import-clients/mariadb-dump.md)
* [mariadb-backup](/docs/server/server-usage/backup-and-restore/mariadb-backup.md)

<sub>*This page is licensed: CC BY-SA / Gnu FDL*</sub>

{% @marketo/form formId="4316" %}
