数据库完全备份还原及还原某一张表

数据库备份和还原是非常重要的,这里将备份还原的常用命令进行总结。

数据库备份

1.备份某个数据库

1
2
mysqldump -u root -p[密码] [选项] [数据库名] [表名] > /备份路径/备份文件名
# 备份库到目录下,-p之后可跟密码,也可不写。不写就在回车之后输入密码验证。 备份文件后缀都为.sql

2.创建一个数据库school,对school库的info1、info2表备份

1
mysqldump -u root -p123123 school info1 info2 > /root/info.sql

3.备份多个数据库

1
2
mysqldump -u root -p --databases mysql study > /root/mysql_study.sql
# --databases 数据库名 数据库名...

4.备份所有数据库

1
2
3
mysqldump -u root -p --opt --all-databases > /root/all.sql
# --opt 表示激活了Mysqldump命令的quick,add-drop-table,add-locks,extended-insert,lock-tables参数,也就是通过--opt参数在使用Mysqldump导出Mysql数据库信息时不需要再附加上述这些参数。
# --all-databases 表示所有数据库;

5.备份数据库中的表

1
2
mysqldump -u root -p study info > /root/study_info.sql
# 备份info表

6.备份数据库的表结构

1
2
mysqldump -u root -p -d study info > /root/study_info_table_structure.sql
# -d 库名+表名 表示表结构

数据库还原

登录后使用source还原

1
source /root/school.sql

直接使用mysql命令还原

1
mysql -u root -p123123 school < /root/school.sql

还原某张表

1
2
3
4
# 使用sed命令将user表的表结构抽取出导出到新的sql文件中
sed -e'/./{H;$!d;}' -e 'x;/CREATE TABLE `users`/!d;q' xxxbackup.sql > 1.sql
# 使用grep 将所有包含 INSERT INTO `users` 的行追加到新sql文件中
grep 'INSERT INTO `users`' xxxbackup.sql >> 1.sql

通过binlog文件导出指定时间段sql操作

1
2
3
4
1 首先将binlog文件导出指定时间段的内容:

```bash
mysqlbinlog --start-datetime='2017-09-10 00:00:00' --stop-datetime='2017-09-10 01:01:01' -d 库名 二进制文件

2 将指定的表操作内容过滤到指定文件

1
grep -B3 -w tb_name data.sql |grep -v  '^--$' > tb_name.sql

3 导出update操作的sql

1
cat tb_name.sql| grep "UPDATE" > update_XX.sql