MySQL数据库备份实例详解

作者: 云计算机网 分类: 云安全 发布时间: 2017-04-27 09:22

对于任何数据库来说,备份都是非常重要的

数据库复制不能取代备份的作用

比如我们由于误操作,在主数据库上删除了一些数据,由于主从复制的时间很短,在发现时,从数据库上的数据可能也已经被删除了,
我们不能使用从数据库上的数据来恢复主数据库上的数据,只能通过备份进行误删除数据的恢复

一. 备份的分类 1.按备份的结果来分: 逻辑备份

其备份结果为SQL语句,适合于所有存储引擎,恢复时需要较多时间,逻辑备份时,对于MyISAM存储引擎是需要进行锁表操作的,通过使用的mysqldump就是一种逻辑备份工具

物理备份

是对数据库目录的拷贝,其备份结果的大小通常也与备份数据的数据目录大小相同,物理备份和恢复通常比逻辑备份要快,因为只需要对mysql数据目录拷贝即可,也正是因为这点,对于内存表只能备份其结构,无法备份数据(因为其数据存储在内存中,没有实际的物理数据文件)

物理备份的方式
进行物理备份,我们可以采用离线备份和在线备份的方式进行备份

 离线备份:需要对数据库进行停机,或对整个数据库进行锁定的情况下进行
 在线备份:需要使用第三方工具,如  XtraBackup
2. 按备份的数据库的内容来分 2.1 全量备份

是对整个数据库的一个完整备份

2.2 增量备份

是在上次全量或增量备份的基础上,对更改过的数据进行的备份

注意

Mysql官方提供的mysqldump命令并不支持增量备份

通常情况要使用mysqldump来进行增量备份的话,增量备份只能通过备份Mysql的二进制日志来实现

XtraBackup本身就提供了增量备份的功能,所以对于Innodb来说,使用XtraBackup进行备份更加安全高效

无论是使用XtraBackup还是Mysqldump 进行备份,要进行基于时间点的恢复时都需要利用Mysql的二进制日志,所以通常情况下我们需要对Mysql的二进制日志也进行备份

二. 使用mysqldump进行备份

mysqldump 是mysql官方提供的逻辑备份工具,其备份结果是可读的SQL文件

mysqldump 支持多种语法

1. 常用语法 对一个数据库下的一个或多个表进行备份
mysqldump [OPTIONS] database [tables]

备份多个表时,table直接用空格进行分隔

对指定的多个数据库进行备份
mysqldump [OPTIONS] --database [OPTIONS] DB1 [DB2..]
对整个mysql实例下的所有数据库进行备份
mysqldump [OPTIONS] --all-database [OPTIONS]
2. 常用参数
-u,--user = name    #  指定备份时所使用的数据库账号
-p. --password [=name]    # 指定账号的密码
--single-transaction  # 使用此参数会在备份前先执行start transaction命令启动一个事务,以此来获得数据库备份时的数据的一致性,由于是通过事务保证数据的一致性,所以此参数只对Innodb存储引擎有效;当使用此参数进行备份时,要确保没有任何DDL语句在执行,因为Innodb的数据一致性的隔离级别并不能隔离DDL操作

-l, --lock-tables  # 如果没有使用非事务存储引擎,使用此参数保证备份时数据的一致性,在备份时会依次锁住每个数据库下的所有表,一般用于MyISAM存储引擎的备份,使用了此参数,在数据库备份时,只能进行读操作,由于此参数是锁住一个数据库下的所有表,备份时可以保证一个数据库下的所有表的数据一致性,但不能保证整个Mysql实例下的所有数据库的所有表的数据一致性,这也是为什么推荐使用Innodb引擎的一个原因
 
lock-tables 与 single-transaction 参数是互斥的,不能同时使用,所以数据库中如果混合使用了Innodb表和MyISAM表就只能使用lock-tables来进行备份了

-x, --lock-all-tables  # 此参数可以对整个Mysql实例下的所有数据库进行加锁,可以避免lock-tables不能保证整个Mysql实例下的所有数据库的所有表的数据一致性的问题,备份时同样会将数据库变为只读的状态

--master-data = [1/2]    # 无论是时间恢复还是新建slave实例都要用到这个参数,此参数有两个可选值,当值为1时,备份中只记录change_master语句,当值为2时,change_master语句会以注释的形式出现在备份文件中;默认值为1,且当使用了此参数时会忽略lock-tables参数,在备份时如果使用了此参数,但是没有使用single-transaction参数,则会自动使用lock-all-tables参数

如果我们要备份的数据库中包含了存储过程,触发器,数据库调度事件时,要备份这些数据库对象时,必须指定以下参数才能对相应数据库进行备份

-R, --routines     # 指定要备份的数据库中存在的的存储过程
--triggers     # 指定要备份的数据库中存在的的触发器
-E,--events      # 指定要备份的数据库中存在的的调度事件

除了以上参数,还有一些参数在备份时也会用到

--hex-blob    # 因为mysqldump备份导出的是文本文件,如果导出的数据中含有以上类型,在文本格式下,有些字符是不可见的,如果使用了此参数使,将会对数据库中所存在binary、varbinary、blob类型的数据以16进制的形式保存,就不会出现有些字符不可见的情况了
--tab =path    # 使用了此参数会在指定的路径下对数据库的每个表生成两个文件,一个文件用于存储表结构,另一个用于存储表中的数据
-w, --where = '过滤条件'    # 导出指定条件的数据(只支持单表数据条件导出)


 备份账号所需要的权限 : SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, PROCESS
如果使用--tab参数则还需要:FILE权限 
  • MySQL5.7.17在cmake的时候报错如下:

    CMake Error at cmake/boost.cmake:81 (MESSAGE):
    You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=
    This CMake script will look for boost in . If it is not there,
    it will download and unpack it (in that directory) for you.

    If you are inside a firewall, you may need to use an http proxy:
    export http_proxy=http://example.com:80
    Call Stack (most recent call first):
    cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
    CMakeLists.txt:455 (INCLUDE)
    -- Configuring incomplete, errors occurred!
    See also "/root/mysqlsoftware/mysql-5.7.17/CMakeFiles/CMakeOutput.log".
    See also "/root/mysqlsoftware/mysql-5.7.17/CMakeFiles/CMakeError.log".

    解决办法是:

    1.在/usr/local下创建一个名为boost的文件夹
    mkdir -p /usr/local/boost

    2.进入这个新创建的文件夹然后下载boost
    wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

    3.解压
    tar -xvzf boost_1_59_0.tar.gz

    4.继续cmake,添加上红色部分

    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DENABLED_LOCAL_INFILE=ON \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_FEDERATED_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
    -DWITH_PARTITION_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DCOMPILATION_COMMENT='Mysqlma' \
    -DWITH_READLINE=ON \

  • 相关推荐:

  • MySQL5.7.19执行cmake时报错
  • MySQL中索引优缺点、分类
  • Oracle中print
  • Linux下MySQLshell脚本执行错
  • 关系型数据库中常用的表
  • MySQL表结构变更,不可不
  • MySQL存储引擎MyISAM介绍
  • MySQL索引的设计和使用
  • 用简单程序协助MySQL实现
  • MySQL表查询操作实例
  • 网站内容禁止违规转载,转载授权联系中国云计算网