道者编程

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


最新评论:
1楼 广东省深圳市 电信 发表于 2018-08-16 17:05:30
老陈牛逼
共有 1 条记录  首页 上一页 下一页 尾页 1
我要评论:

看不清楚