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命令执行,据说后一种要快一些。