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]