mysql数据库备份及还原

作为备忘: 数据库定时备份及还原方式

备份

使用mysqldump来备份数据

备份命令格式

mysqldump -h主机名 -P端口 -u用户名 -p密码 -database 数据库名 > 文件名.sql

备份MySQL数据库为带删除表的格式

备份MySQL数据库为带删除表的格式,能够让该备份覆盖已有数据库而不需要手动删除原有数据库。

mysqldump --add-drop-table -uusername -ppassword -database databasename > backupfile.sql

压缩备份

mysqldump -hhostname -uusername -ppassword -database databasename | gzip > backupfile.sql.gz

备份MySQL数据库某个(些)表

mysqldump -hhostname -uusername -ppassword databasename specific_table1 specific_table2 > backupfile.sql

同时备份多个MySQL数据库

mysqldump -hhostname -uusername -ppassword –databases databasename1 databasename2 databasename3 > multibackupfile.sql

仅备份份数据库结构

mysqldump –no-data –databases databasename1 databasename2 databasename3 > structurebackupfile.sql

备份服务器上所有数据库

mysqldump –all-databases > allbackupfile.sql

还原

还原数据库命令

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

还原压缩的MySQL数据库

gunzip < backupfile.sql.gz | mysql -uusername -ppassword databasename

使用source导入数据库

1
2
3
mysql -p // 进入命令行
use home-photo // 进入目标数据库
source backup.sql // 导入数据库

添加自动备份定时任务

新建sh脚本

1
2
3
4
5
6
7
8
9
10
#!/bin/bash
# 目录地址
BACKUP_ROOT=/home/mysqlbak
BACKUP_FILEDIR=$BACKUP_ROOT/data

# 备份
time=` date +%Y%m%d%H%M%S `
mysqldump home_photo > $BACKUP_FILEDIR/home_photo_$time.sql
# 删除7天前的旧数据(目前未起作用)
find $BACKUP_FILEDIR -name "home_photo_*.sql" -type f -mtime +7 -exec rm { } \; > /dev/null 2>&1

将脚本添加到定时任务

1
2
crontab -e 添加任务
crontab -l 查看任务

编辑crontab

1
2
// 每天3点启动备份脚本
00 3 * * * /home/mysqlbak/scripts/backup.sh

注: 定时脚本需要重启系统才会起作用