数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小。上一篇针对使用xtrabackup工具进行物理备份和数据恢复做了一个详细讲解,本篇主要谈谈如何使用mysql自带的备份工具mysqldump进行逻辑备份和数据恢复。如果还围观看过上一篇文章的可以先行查询上一篇文章关于使用xtrabackup进行数据备份与恢复:Mysql备份与恢复(1)---物理备份。

前言
上一篇可能存在一个问题,最后一步恢复数据到/var/lib/mysql目录成功,但是最后重启数据库启动不起来,数据库日志一般存放路径为:/var/log/mysqld.log,经过定位日志可以查看到错误日志原因:

  • 2019-10-14T07:43:22.351861Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

  • 2019-10-14T07:43:22.351885Z 0 [ERROR] InnoDB: The innodb_system data file 'ibdata1' must be writable

  • 2019-10-14T07:43:22.351892Z 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error

  • 2019-10-14T07:43:22.952508Z 0 [ERROR] Plugin 'InnoDB' init function returned error.

  • 2019-10-14T07:43:22.952596Z 0 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.

  • 2019-10-14T07:43:22.952606Z 0 [ERROR] Failed to initialize builtin plugins.

  • 2019-10-14T07:43:22.952613Z 0 [ERROR] Aborting

很明显是因为共享表文件ibdata1不可写,所以解决方案很简单:将/var/lib/mysql下的文件权限改成可写,使用命令:

  • chmod -R 777 /var/lib/mysql

然后重启mysql服务,可以发现mysql服务已经成功启动,而且备份数据也成功进行恢复了。

物理备份和逻辑备份的区别

逻辑备份

优点:

  • 备份成sql文件,恢复数据很简单。

  • 逻辑备份与存储引擎无关,所以可以通用备份。

  • 有助于避免数据损坏。

缺点:

  • 数据恢复速度较慢。

  • 需要数据库服务正常时安排cpu去进行还原操作。

物理备份

优点:

  • 容易跨平台,基于文件的物理备份。

  • 恢复数据很快,实际上就是将备份文件拷贝回原路径。

缺点:

  • 数据量大的话文件大。

  • 备份文件存储在磁盘本地,如果磁盘出问题容易造成备份文件丢失。

mysqldump逻辑备份

mysqldump是mysql自带的一个简单的备份工具,由于操作简单而且对不同的存储引擎通用,所以比较受欢迎。逻辑备份实际上是将数据库的数据被分成一个sql文件,然后恢复数据时只需要用图形化工具导入这个sql文件或者dos下使用source命令引入就可恢复数据。首先我们先看下mysqldump的基本语法:

  • mysqldump -uroot -proot -h127.0.0.1 -P3306 test test> test.sql

命令还有几个可传参数:

  • --all-databases:备份全部数据库。

  • -t:不导出创建表的语句。

  • -d:不导出数据。

  • -R:导出存储过程和函数。

  • --default-character-set:指定编码

  • --result-file:指定导出文件路径及文件名。

  • --skip-triggers:不导出触发器。

1. 备份前踩坑

如果系统中存在两个mysql版本,执行mysqldump命令就会报错,报错信息如下:

  • mysqldump: Couldn't execute 'SET OPTION SQL_QUOTE_SHOW_CREATE=1': You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'OPTION SQL_QUOTE_SHOW_CREATE=1' at line 1 (1064)

首先使用mysqldump --version命令查看mysqldump当前版本,看是否和mysql版本一致:

  • mysqldump Ver 10.13 Distrib 5.5.29, for Win64 (x86)

再使用rpm -qa | grep -i mysql命令查看mysql版本

  • mysql-community-libs-5.7.27-1.el7.x86_64
  • mysql-community-server-5.7.27-1.el7.x86_64
  • mysql57-community-release-el7-8.noarch
  • mysql-community-common-5.7.27-1.el7.x86_64
  • mysql-community-libs-compat-5.7.27-1.el7.x86_64
  • perl-DBD-MySQL-4.023-6.el7.x86_64
  • mysql-community-client-5.7.27-1.el7.x86_64

可以看到mysql版本与mysqldump版本不一致造成的报错原因,使用whereis mysqld查看mysql安装路径:

  • /usr/local/mysql/bin/mysqld

然后将同处于bin目录下的mysqldump拷贝到/usr/bin/目录下覆盖旧版本的mysqldump即可解决版本不一致的问题:

  • cp /usr/local/mysql/bin/mysqldump /usr/bin/mysqldump

2. 数据备份

刚才说过了命令,我们使用mysqldump是可以进行多种不同方案的备份的。接下来我们简单看几种备案方案:

(1) 全库备份:使用全库备份会将所有数据库中的数据全部备份到同一个sql文件中。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 --all-databases> /usr/local/all.sql

(2) 备份单个数据库:将lxy数据库中的数据备份到sql文件lxy.sql中。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy> /usr/local/lxy.sql

(3) 备份lxy数据库中的users表到user_test.sql文件。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy users> /usr/local/user_test.sql

(4) 只备份lxy数据库的表结构,不备份数据到lxy1.sql文件中。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d> /usr/local/lxy1.sql

(5) 备份lxy数据库的表结构和存储过程,不备份数据到lxy2.sql中。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -d -R> /usr/local/lxy2.sql

(6) 不备份表结构,只备份数据到lxy3.sql。

  • mysqldump -uroot -proot -h49.235.28.88 -P3306 lxy -t> /usr/local/lxy3.sql

数据恢复

表级恢复

(1) 登录mysql,选择对应的数据库,然后设置编码。

(2) 使用source命令导入备份数据。

  • source /usr/local/all.sql

单库恢复

(1) 登录Mysql,删除要恢复的旧数据库。

(2) 使用source命令导入备份数据。

全库恢复

(1) 退出mysql,使用mysql命令恢复数据。

  • mysql < /usr/local/all.sql -p

然后在控制台输入密码,密码不会显示别以为没有输入成功。

mysqldump全量备份 + mysqlbinlog增量备份

刚才已经将mysql全量备份及数据恢复的方式讲完了,可以发现mysqldump的使用方式很简单,但是使用mysqldump进行数据备份会存在一个问题:恢复数据时会丢失掉从备份点开始的更新数据,所以我们需要结合mysqlbinlog进行二进制日志增量备份,首先修改/etc/my.cnf文件,在[mysqld]下启用二进制日志:

  • log_bin=mysql-bin

开启二进制日志,数据库的任何更新操作都会记录到二进制日志中。接下来看下mysqldump全量备份 + mysqlbinlog增量备份如何进行操作:

首先进行全量备份,添加--flush-logs参数生成新的二进制日志文件:

  • mysqldump --single-transaction --flush-logs --master-data=2 > /usr/local/all1.sql

所以说实际上备份有两个文件:mysqldump全量备份生成的/usr/local/all1.sql以及二进制日志文件/var/lib/mysql/mysql-bin.000003文件。所以恢复数据时,我们需要分成两部分去进行恢复数据:

先恢复全量备份的数据:

  • mysql < /usr/local/all1.sql -p

然后输入密码确认恢复数据。

然后恢复增量备份:

  • mysqlbinlog /var/lib/mysql/mysql-bin.000003 | mysql -p

这样就可以将数据恢复到恢复点时的数据。而且mysqlbinlog可以通过时间间隔来精确地恢复某个时刻的数据,我们看看bonlog几个可传参数:

  • --start-datetime:从某个时间点开始恢复数据

  • --stop-datetime:恢复截止到某个时间内的数据

  • --start-position:开始恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。

  • --end-position:截止恢复数据的位置信息,位置信息可以从日志文件的log_pos中获取。

比如我们需要恢复2019-01-01到2019-09-09的数据,我们在恢复增量日志时就可以这么书写mysqlbinlog命令:

  • mysqlbinlog --start-datetime="2019-01-01 00:00:00" --stop-datetime="2019-09-09 23:59:59" /var/lib/mysql/mysql-bin.000003 | mysql -p

欢迎关注公众号:程序猿周先森。

欢迎关注公众号:程序猿周先森。文章原创于微信公众号,本平台不定时更新。

Mysql备份与恢复(2)---逻辑备份的更多相关文章

  1. Mysql备份与恢复(1)---物理备份

    数据库对企业来说最重要的莫过于其中的数据,所以做好数据库的备份是一个不可或缺的工作.数据库及时备份可以帮助我们在数据库出现异常宕机时及时的使用备份数据进行恢复工作,将因为数据库宕机产生的影响降低到最小 ...

  2. MYSQL的备份与恢复--逻辑备份mysqldump

    目录 0.备份与恢复概述 1.逻辑备份-完整备份与恢复 2.逻辑备份-增量备份与恢复 (1)环境准备 (2)恢复全量数据 (3)恢复增量备份 3.新来的开发妹子删了库! (1)模拟环境准备 (2)全备 ...

  3. MySQL的备份与恢复理解与备份策略

    MySQL的备份主要分为逻辑备份和物理备份 逻辑备份 在MySQL中逻辑备份的最大优点是对各种存储引擎都可以用同样的方法来备份.而物理备份则不同,不同的存储引擎有着不同的备份方法.Mysql中的逻辑备 ...

  4. 【第八章】MySQL数据库备份—逻辑备份

    一.数据库备份 1.命令简介: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql1)关于数据库名: -A, --all-databases       ...

  5. Data Base mysql备份与恢复

    mysql  备份与恢复 为什么要备份: 由于系统使用到了MySQL 数 据库,所以每天的工作,就设计到了MySQL数据库的备份问题.但如果每天手工来做MySQL数据库的定时备份,工作量不说,时间还不 ...

  6. MySQL定时逻辑备份

    当项目数据量不大时,备份可以采用逻辑备份. 数据库可以搭建一主一从,从库每天凌晨三点全量逻辑备份. 然后同时记录二进制文件,用来进行基于时间点的数据恢复. 其他备份方案详见我的思维导图:MySQL备份 ...

  7. mysqldump常用于MySQL数据库逻辑备份

    mysqldump常用于MySQL数据库逻辑备份. 1.各种用法说明 A. 最简单的用法: mysqldump -uroot -pPassword [database name] > [dump ...

  8. MySQL逻辑备份利器-mydumper

    关于mydumper的简介和下载请访问:https://launchpad.net/mydumper 简言之,mydumper是多线程逻辑备份,对于表和数据量很大的情况下,建议使用mydumper提高 ...

  9. mysql 开发进阶篇系列 48 物理备份与恢复(xtrabackup 的增量备份与恢复,以及备份总结)

    一.增量备份概述 xtrabackup  和innobackupex  二个工具都支持增量备份,这意味着能复制自上次备份以来更改的数据.可以在每个完整备份之间执行许多增量备份,因此,您可以设置一个备份 ...

随机推荐

  1. php统计近一周和近30天的用户数据

    https://blog.csdn.net/shenpengchao/article/details/59073589 先上一张效果图 这边用的是echarts插件http://echarts.bai ...

  2. js常见运算符

    博客地址 :https://www.cnblogs.com/sandraryan/

  3. poj 3335 Rotating Scoreboard (Half Plane Intersection)

    3335 -- Rotating Scoreboard 给出一个多边形,要求判断它的内核是否存在. 还是半平面交的题,在这道题中,公告板允许其所在位置与直线共线也算是可见,于是我们就可以将每一条直线微 ...

  4. Spring Security实现禁止用户重复登陆(配置及原理)

    系统使用了Spring Security做权限管理,现在对于系统的用户,需要改动配置,实现无法多地登陆.   一.SpringMVC项目,配置如下: 首先在修改Security相关的XML,我这里是s ...

  5. P1001 A+B+C Problem

    题目描述 输入三个整数 \(a,b,c\) ,计算它们的和并将结果输出. 输入格式 输入一行,三个整数 \(a,b,c\) ,每个整数之间以一个空格隔开 \((0 \le a,b,c \le 1000 ...

  6. 机器学习——SVM

    整理自: https://blog.csdn.net/woaidapaopao/article/details/77806273?locationnum=9&fps=1 带核的SVM为什么能分 ...

  7. LuoguP3045牛券Cow Coupons

    LuoguP3045 [USACO12FEB]牛券Cow Coupons 果然我贪心能力还是太差了 ZR讲过的原题我回来对做法没有一丁点印象 有时候有这样一种题目 每个数有两种不同的价值 你可以选择价 ...

  8. PowerShell 通过 WMI 获取系统信息

    本文告诉大家如何通过 WMI 使用 Win32_OperatingSystem 获取设备厂商 通过下面代码可以获取 系统版本和系统是专业版还是教育版 Get-WmiObject Win32_Opera ...

  9. CMD操纵Mysql命令大全

    连接:mysql -h主机地址 -u用户名 -p用户密码 (注:u与root可以不用加空格,其它也一样)断开:exit (回车) 创建授权:grant select on 数据库.* to 用户名@登 ...

  10. CAS5.3 单点登录/登出/springboot/springmvc

    环境: jdk:1.8 cas server:5.3.14 + tomcat 8.5 cas client:3.5.1 客户端1:springmvc 传统web项目(使用web.xml) 客户端2:s ...