数据库备份
mysqldump这个命令相信大家都知道,但是实际使用过的人可能不多,再加上繁多的参数设置更是让人望而止步,除了项目负责人要对数据负责。
这里就简单记录一下他的常用方式:
//最直接的用法 -h连接地址 -u用户名 -p 密码 -P端口 -B 指定导出数据库 > 数据库备份名称-前面可以加上路径
mysqldump -hlocalhost -uusername -ppassword -P3306 -B database > backup_database.sql
//其他常用参数
--all-databases ,-A 导出全部数据库。
--allow-keywords 允许创建是关键词的列名字
--tables 指定备份表名
--single-transaction 导出数据之前提交一个BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。
不出意外的话,mysql5.6以后的版本在执行以上命令的时候系统会有如下提示
mysqldump: [Warning] Using a password on the command line interface can be insecure.
大致意思是,在命令行直接使用明文密码是不安全的。虽然可以用后输入密码的方式解决,但是数据库备份正常是要放在定时脚本去执行,没法手动输入密码。最直接的解决方法是,在my.cnf文件里加入以下配置
[mysqldump]
user=username
password=password
然后mysqldump 命令后面就不需要再加上 -u -p参数了。
mysqldump -hlocalhost -P3306 -B database > backup_database.sql
定时脚本备份数据库,每日凌晨执行
vim backup.sh
#!/bin/sh
# 数据库连接信息
DB_USER="user"
DB_PASS="pwd"
DB_HOST="host"
# 需备份数据库列表 多个按照空格分割
DB_NAME=("backup_test" "back_test2")
# mysqldump 路径、备份文件存储路径、日期
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/backup/mysql"
DATE=`date +%F`
for var in ${DB_NAME[@]};
do
$BIN_DIR/mysqldump --opt --single-transaction --master-data=2 -u$DB_USER -p$DB_PASS -h$DB_HOST $DB_NAME > $BCK_DIR/db_$var$DATE.sql
done
#删除超过7天的备份文件
BACKUPDIR="/home/backup/mysql/data" #定义备份文件路径
KEEPTIME=7 #定义需要删除的文件距离当前的天数
DELFILE=`find $BACKUPDIR -type f -mtime +$KEEPTIME -exec ls {} \;` #找到天数大于7天的文件
for delfile in ${DELFILE} #循环删除满足天数大于七天的文件
do
rm -rf $delfile
done
恢复数据库
mysql恢复数据库大致有两种方法
1、mysql命令行
mysql -uroot -ppass;登录数据库
mysql> use backup_db;
mysql> source backup_db.sql; //可以加上路径
2、不需要登录mysql直接恢复数据库
mysql -uroot -ppass backup_db < backup_db.sql; //需要注意的是,这里的命令是mysql,而不是mysqldump