阡陌 发表于 2024-2-22 22:34:31

Linux 系统 MySQL 数据库自动备份


备份 MySQL 要用到 mysqldump。mysqldump 是 MySQL 自带的逻辑备份工具,它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的 insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。

## mysqldump 的基本用法

```bash
mysqldump database
```

- 如果你不给定任何表,整个数据库将被导出。
- 通过执行 `mysqldump --help`,你能得到你 mysqldump 的版本支持的选项表。

此外,mysqldump 还支持很多其他选项,例如:

- `--all-databases, -A`:备份所有数据库。
- `--databases, -B`:用于备份多个数据库。如果没有该选项,mysqldump 把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldump 把每个名字都当作为数据库名。
- `--force, -f`:即使发现 sql 错误,也忽略错误继续备份。
- `--host=host_name, -h host_name`:备份指定主机上的数据库。
- `--no-data, -d`:只导出表结构,不导出数据。
- `--password[=password], -p`:连接数据库使用的密码。
- `--port=port_num, -P port_num`:指定连接数据库的端口号。

在使用 mysqldump 时,你需要根据你的需求选择合适的选项。同时,你也需要确保你有足够的权限来访问和备份数据库。

请注意,mysqldump 生成的备份文件是 SQL 脚本,你可以使用任何文本编辑器打开和查看。当你需要恢复数据时,你可以使用 mysql 命令来执行这个 SQL 脚本,将数据恢复到数据库中。

在使用 mysqldump 进行备份和恢复时,请务必小心操作,避免数据丢失或损坏。建议在正式操作前,先在一个测试环境中进行验证,确保操作的正确性和安全性。



## 手动备份

```bash
$ mysqldump -u root -p 数据库名 > 数据库名.sql
Enter password:
```

直接生成压缩文件:

```bash
$ mysqldump -u root -p 数据库名 | gzip > 数据库名.sql.gz
Enter password:
```

如何才能做到不输入密码?毕竟要做到定时自动备份总不能到备份时间后人工敲密码吧。

使用 `~/.my.cnf` 配置文件:

1. 在 MySQL 用户的家目录下创建一个名为 `.my.cnf` 的配置文件。例如,如果 MySQL 用户是 `root`,则文件路径为`/root/.my.cnf`。

2. 在该文件中添加以下内容:

   ```ini
   
   user=your_mysql_username
   password=your_mysql_password
   ```

   将 `your_mysql_username` 和 `your_mysql_password` 替换为您的 MySQL 用户名和密码。

3. 设置文件的权限,确保只有文件所有者可以读取它:

   ```bash
   chmod 600 ~/.my.cnf
   ```

4. 现在,当您以该用户身份运行 `mysqldump` 命令时(不要带 `-p` 参数),它将自动从 `.my.cnf` 文件中读取用户名和密码,而无需手动输入。



## 定时自动播放

创建备份脚本:

```sh
#!/bin/sh

dbname='数据库名'

mysqldump -u root $dbname | gzip > /data/backup/db/$dbname-`date +"%Y%m%d"`.sql.gz

```

设置文件的执行权限:

```
chmod 755 db_backup.sh
```

配置定时任务:

```
$ crontab -e

0 1 * * * "/绝对路径/db_backup.sh"
```

这样就可以每天在凌晨 1 点钟执行备份任务了。



页: [1]
查看完整版本: Linux 系统 MySQL 数据库自动备份