对于生产的数据,做好定时备份是保证数据安全的必要措施。一旦出现数据丢失或者误删除,可用最近的一次备份,做数据还原。从而将数据的损失降低到最低。

常用的备份命令

1. 备份单个数据库

1
mysqldump -hhost -uusername -ppassword dbname > /path_to_backup/backup_name.sql

备份并压缩

1
mysqldump -hhost -uusername -ppassword dbname | gzip > /path_to_backup/backup_name.sql.gz

2. 备份多个数据库

1
mysqldump -hhost -uusername -ppassword databases dbname1 dbname2 dbname3 > /path_to_backup/backup_name.sql

3. 备份单个数据库里指定表的数据

1
mysqldump -hhost -uusername -ppassword dbname table1 table2 table3 > /path_to_backup/backup_name.sql

4. 仅备份数据库的结构

1
mysqldump -no-data -databases dbname > /path_to_backup/backup_name.sql

5. 备份所有的数据库

1
mysqldump -all-databases > /path_to_backup/backup_name.sql

常用的还原命令

1. 使用无压缩的数据备份文件还原

1
mysql -hhost -uusername -ppassword dbname < /path_to_backup/backup_name.sql

2. 使用已压缩的数据备份文件还原

1
gunzip < /path_to_backup/backup_name.sql.gz | mysql -hhost -uusername -ppassword dbname

一键迁移到新数据库

1
mysqldump -hhost -uusername -ppassword dbname | mysql -hnew_host -uusername -ppassword -C dbname

定时备份

以上的操作完全是手工操作,在实际生产环境不现实。因此需要做成定时自动备份的,这时就可以借助于Linux上的Crontab来实现。

1. 创建备份脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/bin/sh

# This is a mysql database backup shell script for aquarium database.

# set mysql info
hostname="localhost"
username="xxx"
password="xxx"
database="xxx"

# set backup info
backup_path="/path/to/backup"
date=$(date +%Y%m%d_%H%M%S)

# execute backup
if [ ! -d $backup_path ]; then
mkdir -p $backup_path
fi
mysqldump -h$hostname -u$username -p$password $database | gzip > $backup_path/$database_$date.sql.gz

2. 创建定时任务

键入 crontab -e 进入编辑模式,加入下面一行内容:

1
2
# 添加定时计划,例如:每天凌晨2点执行
0 2 * * * /path/to/backup.sh

:wq 保存退出。

至此,自动定时备份已经完成。