当前位置: 首页 > news >正文

mysql数据库备份 dump_mysqldump备份和恢复MySQL数据库

简单介绍:

通过MySQLdump命令可以将指定的库和表全部导出为sql脚本,可以在不同版块的Mysql上面使用。例如需要升级Mysql数据库可以使用mysqldump先备份所有数据库,然后直接在升级后的Mysql数据库导入即可。

基本操作:

备份单个数据库,或者库中的特定表(库名后面加表名)

mysqldump备份jiaowu库

[root@localhost ~]# mysqldump -uroot -p jiaowu > /root/jiaowu.sql

删除jiaowu的数据库

mysql> DROP DATABASE jiaowu;

删除之后导入备份文件说是没有jiaowu数据库

注意:mysqldump备份出来的数据库都是插入语句,还原的时候没有办法创建数据库需要手动创建数据库

[root@localhost ~]# mysql < jiaowu.sql

ERROR 1046 (3D000) at line 22: No database selected

手动创建jiaowu的数据库

mysql> CREATE DATABASE jiaowu;

还原jiaowu数据库

[root@localhost ~]# mysql jiaowu < jiaowu.sql

如果是生产环境备份时需要锁定所有表,不然在备份的时候有用户写入数据,会造成时间点不一样

锁定所有表

mysql> FLUSH TABLES WITH READ LOCK;

释放锁

mysql> UNLOCK TABLES;

参数说明:

--master-data={0|1|2}

0: 不记录二进制日志文件记录位置;

1:以CHNAGE MASTER TO的方式记录位置,可用于恢复后直接启动从服务器;

2:以CHANGE MASTER TO的方式记录位置,但默认为被注释;

备份jiaowu数据库

[root@localhost ~]# mysqldump -uroot -p --master-data=2 jiaowu > /root/jiaowu-`date +%F-%H-%M-%S`.sql

查看二进制日志记录位置

[root@localhost ~]# vim jiaowu-2014-11-27-17-02-38.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000005', MASTER_LOG_POS=9749;

--lock-all-tables:锁定所有表

--flush-logs: 执行日志滚动

如果指定库中的表类型均为InnoDB,可使用--single-transaction启动热备,不要和--lock-all-tables一块使用

备份多个库: 备份的时候自动创建库名,还原的时候不需要手动创建库

--all-databases: 备份所有库

--databases DB_NAME,DB_NAME,...: 备份指定库

--events 备份事件调度器的

--routines 备份存储过程和存储函数的

--triggers 备份触发器

模拟实验:备份所有库,并且所有库坏掉了如何还原

使用root用户备份所有库,滚动日志文件,记录二进制文件位置和路径,同时锁定所有库

[root@localhost ~]# mysqldump -uroot -p --lock-all-table --flush-logs --all-databases --master-data=2 > /root/alldatabases.sqlEnter password:

查看备份的数据库发现滚动的日志到了000007了

[root@localhost ~]# less alldatabases.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000007', MASTER_LOG_POS=107;

删除以前的滚动日志文件(生产环境建议先复制然后再删除)

mysql> PURGE BINARY LOGS TO 'mysql-bin.000007';

Query OK, 0 rows affected (0.19 sec)

mysql> SHOW BINARY LOGS;

+------------------+-----------+

| Log_name        | File_size |

+------------------+-----------+

| mysql-bin.000007 |      107 |

+------------------+-----------+

查看tutors表中数据

mysql> USE jiaowu;

Database changed

mysql> SELECT * FROM tutors;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|  1 | HongQigong  | M      |  93 |

|  2 | HuangYaoshi  | M      |  63 |

|  3 | Miejueshitai | F      |  72 |

|  4 | OuYangfeng  | M      |  76 |

|  5 | YiDeng      | M      |  90 |

|  6 | YuCanghai    | M      |  56 |

|  7 | Jinlunfawang | M      |  67 |

|  8 | HuYidao      | M      |  42 |

|  9 | NingZhongze  | F      |  49 |

+-----+--------------+--------+------+

删除年龄大于80的行

mysql> DELETE FROM tutors WHERE Age>80;

Query OK, 2 rows affected (0.00 sec)

然后一天过去了,要做增量备份

滚动日志

mysql> FLUSH LOGS;

Query OK, 0 rows affected (0.01 sec)

mysql> SHOW BINARY LOGS;

+------------------+-----------+

| Log_name        | File_size |

+------------------+-----------+

| mysql-bin.000007 |      343 |

| mysql-bin.000008 |      107 |

+------------------+-----------+

备份日志文件

[root@localhost ~]# cd /mydate/date/

[root@localhost date]# cp mysql-bin.000007 /root/

第二天往表中插入一行数据

mysql> INSERT INTO tutors (Tname) VALUES ('zhangsan');

删除数据库,但是把二进制日志文件复制出去,假设日志文件和数据不在同一目录存储,不然如果连二进制日志文件也删除了就没有办法做时间点恢复了

[root@localhost date]# cp mysql-bin.000008 /root/

[root@localhost date]# rm -rf ./*

这时就会发现MySQL停止不了了,所以只要关闭进程

[root@localhost date]# service mysqld stop

MySQL server PID file could not be found!                  [失败]

[root@localhost date]# killall mysqld

初始化MySQL数据库

[root@localhost date]# cd /usr/local/mysql/

[root@localhost mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydate/date/

首先还原完全备份的数据库文件

[root@localhost ~]# mysql -uroot -p < alldatabases.sql

这时数据就恢复到了完全备份之前

被删除的大于80岁的两个用户还存在

mysql> USE jiaowu;

Database changed

mysql> SELECT * FROM tutors;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|  1 | HongQigong  | M      |  93 |

|  2 | HuangYaoshi  | M      |  63 |

|  3 | Miejueshitai | F      |  72 |

|  4 | OuYangfeng  | M      |  76 |

|  5 | YiDeng      | M      |  90 |

|  6 | YuCanghai    | M      |  56 |

|  7 | Jinlunfawang | M      |  67 |

|  8 | HuYidao      | M      |  42 |

|  9 | NingZhongze  | F      |  49 |

+-----+--------------+--------+------+

9 rows in set (0.00 sec)

将第一次和第二次备份的二进制文件转化为sql文件,然后导入第一次的增量备份和第二次的增量备份

[root@localhost ~]# mysqlbinlog mysql-bin.000007 > diyici.sql

[root@localhost ~]# mysqlbinlog mysql-bin.000008 > dierci.sql

[root@localhost ~]# mysql -uroot -p < diyici.sql

Enter password:

[root@localhost ~]# mysql -uroot -p < dierci.sql

Enter password:

这时数据就恢复了

mysql> SELECT * FROM tutors;

+-----+--------------+--------+------+

| TID | Tname        | Gender | Age  |

+-----+--------------+--------+------+

|  2 | HuangYaoshi  | M      |  63 |

|  3 | Miejueshitai | F      |  72 |

|  4 | OuYangfeng  | M      |  76 |

|  6 | YuCanghai    | M      |  56 |

|  7 | Jinlunfawang | M      |  67 |

|  8 | HuYidao      | M      |  42 |

|  9 | NingZhongze  | F      |  49 |

|  10 | zhangsan    | M      | NULL |

+-----+--------------+--------+------+

注意:生产环境:在恢复数据库的时候关闭二进制日志文件,不然就产生很多没有用的记录,数据恢复完成后开启记录二进制日志文件

临时性关闭二进制日志记录

mysql> SET sql_log_bin=0;

Query OK, 0 rows affected (0.00 sec)

开启二进制日志文件记录

mysql> SET sql_log_bin=1;

Query OK, 0 rows affected (0.00 sec)

0b1331709591d260c1c78e86d0c51c18.png

相关文章:

  • java servlet 3.0_Java Servlet和Servlet 3.0的新特性
  • java 回溯_正则表达式知识详解之回溯引用 (java版示例)
  • java后台线程_67.Java后台线程
  • java 远程 shell脚本_Java 远程调用 shell脚本
  • python自动化数据驱动_Selenium2+python自动化之数据驱动(ddt)
  • java圆和椭圆的关系_圆与椭圆 - brifuture - 博客园
  • java attributelist_java集合类(二)List学习
  • java ccf认证解答_CCF认证考试(java)---窗口
  • java 平滑 停止_设计Java应用程序的平滑停止
  • java开发按键精灵_Java 按键精灵
  • java同步开销_java – 为什么对Map的同步访问会增加大量的开销
  • java字节码常量池_Java字节码常量池深度剖析与字节码整体结构分解
  • java控制语句案例_Java基础之流程控制(示例代码)
  • mysql 怎么设置ip地址_Mysql如何设置用户指定ip地址操作数据库
  • android_iphone和java三个平台一致的加密方法_Android、iPhone和Java三个平台一致的加密工具...
  • ----------
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • Go 语言编译器的 //go: 详解
  • Javascript Math对象和Date对象常用方法详解
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • React as a UI Runtime(五、列表)
  • Ruby 2.x 源代码分析:扩展 概述
  • Vue全家桶实现一个Web App
  • Web Storage相关
  • 从输入URL到页面加载发生了什么
  • 讲清楚之javascript作用域
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 聊聊springcloud的EurekaClientAutoConfiguration
  • 三分钟教你同步 Visual Studio Code 设置
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • ​第20课 在Android Native开发中加入新的C++类
  • $(function(){})与(function($){....})(jQuery)的区别
  • $.ajax()
  • $L^p$ 调和函数恒为零
  • (安卓)跳转应用市场APP详情页的方式
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (附源码)计算机毕业设计高校学生选课系统
  • (六)软件测试分工
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (转)Linux下编译安装log4cxx
  • ... fatal error LINK1120:1个无法解析的外部命令 的解决办法
  • .java 指数平滑_转载:二次指数平滑法求预测值的Java代码
  • .net core webapi 部署iis_一键部署VS插件:让.NET开发者更幸福
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • .Net Remoting(分离服务程序实现) - Part.3
  • .NET 使用 XPath 来读写 XML 文件
  • .net 怎么循环得到数组里的值_关于js数组
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .net和jar包windows服务部署
  • .Net中间语言BeforeFieldInit
  • @Async注解的坑,小心
  • @media screen 针对不同移动设备
  • [20140403]查询是否产生日志
  • [Angular] 笔记 8:list/detail 页面以及@Input