Mysql备份与恢复
1:备份基本格式:
mysqldump -uroot -p123 --databases 88 -l -F > /tmp/88.sql
把88数据库导出到/tmp目录
-l:--lock-tables的简写,读锁,备份的时候加这个命令,所有的写入都不能操作,备份完以后自动解锁,主要是保证数据库完整性,-l不能用大写
-F:--flush-logs的简写,刷新日志,重新生成新的日志。
运行一下上面的命令

执行成功,这里有一个提示,不管它,MySQL 5.6 开始在命令行输入密码,就会提示这些安全警告信息。
如果数据量大,可以导出压缩:
mysqldump -uroot -p123 --databases 88 -l -F | gzip > /tmp/88.sql.gz

单独导出表:导出88数据库的goods和user表
mysqldump -uroot -p123 --databases 88 --tables goods user -l -F > /tmp/88.sql
--tables:导出表
2:定时备份
(1):建立备份脚本,我这里选择/usr/local/bak
vi auto_bak_db.sh(2):备份脚本
#!/bin/bash
rq=`date +%Y-%m-%d-%H` #日期
#数据库信息
host=127.0.0.1
user=root
password=123
dbname=changan
#放在这个目录
path=/tmp/add
mysqldump -h${host} -u${user} -p${password} --databases ${dbname} > ${path}/${dbname}${rq}.sql
#进入目录准备压缩
cd ${path}
# 压缩
tar -zcPvf ${dbname}${rq}.sql.tar.gz ${dbname}${rq}.sql
# 删除刚刚备份的sql文件,保留压缩文件
rm -f ${path}/${dbname}${rq}.sql
#for循环清除15天前日志
for rmfile in `find $path -mtime +14`;
do rm -f $rmfile;
done
(3):添加脚本执行权限chmod +x auto_bak_db.sh(4):定时执行
# crontab -e 01 03 * * * /usr/local/bak/auto_bak_db.sh每天凌晨03点01分的时候程序执行备份。
3:导入数据库(恢复)两种方式
(1):source
mysql>source /tmp/88.sql
如果在某个数据库导入表,先进入数据库,use 数据库,然后执行以上命令
导入多个数据库,假如导入5个数据库,可以先写一个总文件,把其他5个需要导入的分别写入到这个总文件,然后直接导入这一个sql文件即可:
all.sql
source /tmp/1.sql source /tmp/2.sql source /tmp/3.sql source /tmp/4.sql source /tmp/5.sql执行:
mysql>source /tmp/all.sql #一次导入多个
(2):mysql
mysql -uroot -p123 -v -f < /tmp/g.sql #导入g.sql数据库 mysql -uroot -p123 88 -v -f < /tmp/g.sql #导入g.sql数据库到88数据库-v:查看导入的详细信息
-f:导入过程中遇到错误时,可以skip过去,执行执行后面的语句
区别:两种导入,source是在mysql命令行执行,mysql是shell命令执行,据说后一种要快一些。