精华内容
下载资源
问答
  • #MySQL中数据备份方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。什么是冷备份?所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。在前面的...

    数据备份有哪些种?#

    MySQL中数据备份的方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。

    什么是冷备份?

    所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。

    在前面的文章中,白日梦跟大家分享过MySQL的表空间。看过那篇文章的同学都是知道,MySQL中的数据最终都存储在表空间中的。表空间 == 表空间文件。其实而所谓的空间,本质上对应着存在于操作系统磁盘上的肉眼能看到的物理文件。

    下面你可以看一下我的MySQL的表空间文件都是怎么配置的,以及它们都在哪里。

    MySQL版本:5.7 ,并且我在 my.cnf 配置文件中添加了如下的配置。

    Copy# 表示每一个数据库单独使用一个表空间innodb_file_per_table=on

    然后我创建数据库:stusy。

    创建数据表:test_backup。

    进入到如下的目录中,你可以看到MySQL为我们创建的数据库表创建出了单独的目录,而目录中的有 .frm、.idb文件就是冷备份需要备份的文件。

    94064d47bebbd250eb363d62b9d59ad9.png

    什么是逻辑备份?

    逻辑备份指的是使用 mysqldump 工具去备份数据。使用mysqldump进行数据库的逻辑备份也是在做的各位RD需要掌握的技能。日常开发中难免会有将线上的数据备份到测试环境使用的场景。

    为啥说mysqldump是逻辑备份?原因大概是:你使用mysqldump去备份最终得到的参数其实是一堆sql,再通过回放sql的形式完成数据的恢复。白日梦之前的文章中跟大家分享过(可自行查看历史文章哈)。在MySQL中数据表、数据行其实是逻辑存上的概念。像数据页这种概念是物理真实存在的。所以你用mysqldump得到一堆sql,自然称得上是逻辑备份喽。

    下文中具体说,mysqldump实战。

    什么是热备份?

    所谓热备份其实是指:直接对运行中的数据库进行备份。相对于冷备份,热备份还是比较复杂的。你想啊,对处于运行过程中的数据库进行备份,肯定就得将一些增量的数据也备份进去。

    通常人们会使用一款叫:xtraback 的工具完成数据库的热备份。

    除此之外,我了解有一款Golang写的开源工具 ghost,在github上还是挺火的。它是一款支持做无损DDL的工具(后面会专门有一篇文章讲这个工具的原理)。这款工具在实现支持无损DDL功能时,有一部分逻辑本质上也是在支持增量数据的备份。

    ghost的实现手段是:添加binlog监听事件,监听到binlog event后去解析binlog得到sql,再回放这个SQL。就像是从库使用主库对binlog进行数据恢复一样。

    什么是快照备份?

    再了解一下什么是快照备份:

    快照备份不是数据库本身提供的能力,本质上它是借助于文件系统的快照功能来实现的对数据库的备份。

    我们知道的Linux服务器本质上也是电脑的,它会有自己的磁盘,无论是固态硬盘,还是机械磁盘。反正会有这种固态存储。还需要进一步对磁盘进行分区。然后才有将Linux文件系统中的目录都会挂载在不同的分区上。这么做的目的,简单来说就像你的window有C盘、D盘、E盘。D盘中的出问题后不会影响E盘一样。

    快照备份要求:数据库的所有数据文件都要放在一个数据分区中。

    常见的支持快照工具的文件系统和设备有:FreeBSD、UFS文件系统、Solaris的ZFS文件系统。GNU/Linux的LVM(Logical Volume Manager)

    实用的mysqldump备份方式#

    本小节看几个实战mysqldump备份case。

    测试环境:创建如下表

    CopyCREATE TABLE `test_backup2` (  `id` int(11) NOT NULL AUTO_INCREMENT,  `name` varchar(255) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    数据表中写入3条数据

    8c420b6f55f19e70bd4090e6bbfe3511.png

    mysqldump语法

    Copymysqldump [arguments] > file_name;

    1、备份指定的数据库

    通过参数--databases 指定你要备份的数据库

    Copy# mysqldump  -uroot -p --databases db1 db2 db3 > 自定义名.sql; ./mysqldump  -uroot -p --databases stusy > test_backup.sql; 
    d0b7752bcf6603609bab4ecf1c016a61.png

    因为我开启了GTID,所以直接执行如上的命令行有报错提示说:如果我只想完成数据的dump,需要在命令行中添加上它提示的那些参数。

    Copy# 如果你没有开启GTID选项,它提示我加的这些参数你都没有必要添加的。#  --triggers 备份触发器#  --routines 备份存储过程和函数#  --events 备份事件调度器./mysqldump --set-gtid-purged=OFF --databases stusy --triggers --routines --events -uroot -p > test_backup.sql; 

    查看产出的SQL文件:

    注意点:使用参数 --databases 参数。最终产出的SQL中为你创建数据库了。

    a95da1b533e9ab2cf5e189503df9ece5.png

    文件开始和结束的部分有很多注释,这些注释可以用来设置MYSQL数据的各项参数。一般用来保证还原数据时可以更加有效准确的工作。

    2、备份指定数据库中的指定数据表: 通过参数 `--tables` 指定你要备份的数据表。

    Copy# mysqldump  -uroot -p --databases db1 db2 db3 --tables t1 t2 > 自定义名.sql;  ./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events -uroot -p > test_backup.sql; 

    3、对一个架构进行备份

    不使用--databases,直接写数据库名。对整库架构进行备份

    Copy./mysqldump --set-gtid-purged=OFF --triggers --routines --events -uroot -p mysql> mysql_backup.sql; 

    查看备份的结果

    注意点:相对于使用 --databases 参数来说。最终产出的SQL中!!没有!!为你创建数据库。

    e4a2cdfe8e339cc42dbee9cffbd71e74.png

    4、重点理解参数:--single-transaction

    如果你想获得一份“一致性备份”可以使用该参数。那什么是一致性备份呢?

    todo 下面的:我劝!这位年轻人不讲MVCC,耗子尾汁! 贴上链接。

    添加--single-transaction参数后,mysqldump会自动帮你执行 start transaction 开启事务的SQL。如果你看过白日梦之前写的 “我劝!这位年轻人不讲MVCC,耗子尾汁!”,想必你一定了解,MVCC的实现原理,回到现在的这个问题中,也就是说,只要你执行开启事务的语句就会得到一个一致性可重复读的视图(read view)。说白了:此次执行mysqldump得到的SQL文件中的数据,就是你执行的该命令的那个瞬间,打下的快照的数据。

    注意:如果你不使用--single-transaction参数,会自动添加上--lock-all-tables。此外,还需要知道当我们使用参数--single-transaction获取到的那个一致性实图并不能隔离DDL(表级别的操作,比如添加列)。所以你要确保在备份时没有其他的DDL语句执行。

    5、重点理解参数:--master-data

    Copy# 当值为1时,转存文件中会有change master 语句。--master-data = 1# 当值为2时,转存文件中当 change master 语句会被注释。--master-data = 2

    下面分别让 --master-data 为不同的值。查看产出。

    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=2 -uroot -p > test_backup.sql; 
    8f73f021789ffe4afaf54509fbe5ca3c.png
    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=1 -uroot -p > test_backup.sql; 
    fc4f5be4d2642819465d8f335f8fa541.png

    一般搭建过mysql集群的同学都知道这条change master sql语句的作用是: 从库认主库的命令。

    是的,使用参数--master-data=1得到的备份文件通常主要作用是创建一个replication(从库)。

    上面介绍了工作中常用的几种用法和注意点。

    其实mysqldump支持的参数多达几十个。你可以使用 --help查看它们。

    如果上面的参数不能满足你的需求。你可去官网查阅:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

    得先知道什么是GTID#

    GTID (global transcation identifier)它是MySQL5.6版本中添加进来的新特性 ,使用GTID可以唯一的标识一个事物。

    我用大白话描述一下GTID常见的作用:

    比如一条update有语句进入MySQL之后经历如下过程:

    Copy1. 写undolog 2. 写redolog(prepare)3. 写binlog 4. 写redolog(commit)# 这也是所谓的两阶段提交

    不管你有没有自己搭建过MySQL集群,你一定听说过MySQL集群!主库将自己成功执行过的事物都写在binlog,然后集群中的从库会dump主库记录的binlog回放出数据,完成数据同步。当我们将GTID相关的配置打开后,update语句经历如下过程:

    Copy1. 写undolog # 回滚2. 写redolog(prepare)# 保证提交的不会丢失3. 写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID 4. 写binlog # 主从同步事物使用5. 写redolog(commit)

    也就是说mysql会在binlog中多为我们记录一行gtid。这个gtid和当前事物唯一对应。不会重复。

    这时当从库向主库发送同步数据当请求时:bin-log和gtid都会传送到slave端,从库在回放日志同步数据时,同样会使用gtid写bin-log,这样主库和从库之间的数据,就通过GTID强制性的关联并且保持同步了。

    下图截取自binlog一条事务,你可以看到里面会记录gtid。

    fa8baa2a01e1500fd7db647c2792208d.png

    这时如果从库想在主库同步数据,只需要告诉主库自己有哪些gtid就好了,主库会把从库没有的gtid对应的事务日志给从库让它去同步数据。

    而在这种方式出现之前,主从之间同步数据时,从库需要告诉主库自己已经同步到binlog.0000x,position=yyy的地方了。这个binlog.0000x,position=yyy需要人为地去查看一下。不能说查看这两个信息比较麻烦,但是肯定不如GTID来的方便。

    看一条binlog长啥样#

    为了对小白友好一点,再看一下这张图:

    b00a448f0efd9cbd73deb7fa859e1fbe.png

    首先你得知道,像select这种查询类型的sql,是不会被记录进binlog中的,binlog中只会记录对数据库作出修改的写入或者更新的sq。就像上图中,你可以看我图中begin、xxx、commit。

    另外binlog中是有位点的,人们一般把称它叫:position。其实所谓的位点就是上图中的at xxx中的xxx。

    每一个事物都有自己的开启、结束位点,换句话说我们可以通过开始和结束的位点找到一个或者是好多和事物。就上图来说,这个事物的start-positon=956,stop-position=1230。

    这个位点有啥用呢?

    作用1:搭建主从集群时,通过下面的命令告诉从库,应该从主库的哪个binlog的哪个位点开始同步数据

    CopyCHANGE MASTER TO    MASTER_HOST='10.157.23.158',    MASTER_USER='mysqlsync',    MASTER_PASSWORD='mysqlsync123',    MASTER_PORT=8882,    MASTER_LOG_FILE='mysql-bin.000008',    MASTER_LOG_POS=1013; # 这就是位点

    作用2:数据恢复时,指定从哪个位点恢复到哪个位点。或者跳过哪个位点,下面我们一起看下基于binlog的数据恢复。

    数据恢复#

    不知道你有没有误删过数据库中的数据,之前我就误删过。不过还好是测试环境的。

    其实误删数据后是可以通过binlog将数据恢复出来的。既然是使用binlog恢复数据,前提是你的MySQL开启了binlog(默认情况下mysql不会帮你记录binlog,如果你还不知道什么是binlog也没关系,白日梦前面的文章有分享,你可以去看下)。

    大部分情况下,DBA同学会将你使用的MySQL binlog打开。你可以像下面这样验证一下自己使用的数据库binlog是否打开了。如果没有打开binlog,数据可能真的没办法恢复。

    97adf35c5f6690373c5bfdd5ff6a401a.png

    线上的数据库不断承接流量,binlog会不断滚动变大,你要赶在binlog被清理之前去恢复数据。

    下面一起看看如何使用binlog恢复数据,下面看我的实验步骤:

    先查看我的所有的binlog:

    33dd886094adfc2eca028ec1b946407c.png

    然后我把数据库中的数据全部删除。

    cd9ea7153a1f1f1482d9b24ef1cfea2b.png

    情况一:没有开启GITD

    如果你的MySQL没有开启GTID。直接使用下面的命令,就能把你指定的binlog中指定范围的positon的数据回放出来。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p

    除了用位点缩小范围,还可以指定开始时间和结束时间来缩小范围。

    思考这样的情况:

    假设你没有赶在binlog被清理之前去恢复数据,当你去恢复数据时上图中delete sql之前的binlog已经被删除了。那怎么办?

    这时你可以通过最近的全量备份把delete之前的数据恢复出来,然后delete之后的增量数据,通过mysqlbinlog工具恢复出来,注意别忘了通过positon跳过这个delete,不然一执行会放出来delete语句,数据又全被删除了。

    如果你没有全量备份,binlog也不全了。那估计就悬了!

    情况二:开启GITD

    开启GTID的MySQL,同样执行这行命令恢复数据会遇到下面的错误。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p
    8f8cd9767841532b76310387d57f74da.png

    为啥报错了。因为你用binlog回放数据,其实就是让mysql重新执行一下binlog中记录的逻辑,问题就出在binlog中记录了set next_gtid=xxx,因为gtid唯一的,是不能重复的。

    所以需要添加参数--skip-gtids=true

    Copy[root@dev-changwu-01 bin]#  ./mysqlbinlog --skip-gtids=true --start-position=684 --stop-position=1485 ../var/mysql-bin.000003 | ./mysql -uroot -pEnter password:

    原文链接:https://www.cnblogs.com/ZhuChangwu/p/14250836.html

    如果觉得本文对你有帮助,可以转发关注支持一下

    展开全文
  • #MySQL中数据备份方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。什么是冷备份?所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。在前面的...

    数据备份有哪些种?#

    MySQL中数据备份的方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。

    什么是冷备份?

    所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。

    在前面的文章中,白日梦跟大家分享过MySQL的表空间。看过那篇文章的同学都是知道,MySQL中的数据最终都存储在表空间中的。表空间 == 表空间文件。其实而所谓的空间,本质上对应着存在于操作系统磁盘上的肉眼能看到的物理文件。

    下面你可以看一下我的MySQL的表空间文件都是怎么配置的,以及它们都在哪里。

    MySQL版本:5.7 ,并且我在 my.cnf 配置文件中添加了如下的配置。

    Copy# 表示每一个数据库单独使用一个表空间

    innodb_file_per_table=on

    然后我创建数据库:stusy。

    创建数据表:test_backup。

    进入到如下的目录中,你可以看到MySQL为我们创建的数据库表创建出了单独的目录,而目录中的有 .frm、.idb文件就是冷备份需要备份的文件。

    什么是逻辑备份?

    逻辑备份指的是使用 mysqldump 工具去备份数据。使用mysqldump进行数据库的逻辑备份也是在做的各位RD需要掌握的技能。日常开发中难免会有将线上的数据备份到测试环境使用的场景。

    为啥说mysqldump是逻辑备份?原因大概是:你使用mysqldump去备份最终得到的参数其实是一堆sql,再通过回放sql的形式完成数据的恢复。白日梦之前的文章中跟大家分享过(可自行查看历史文章哈)。在MySQL中数据表、数据行其实是逻辑存上的概念。像数据页这种概念是物理真实存在的。所以你用mysqldump得到一堆sql,自然称得上是逻辑备份喽。

    下文中具体说,mysqldump实战。

    什么是热备份?

    所谓热备份其实是指:直接对运行中的数据库进行备份。相对于冷备份,热备份还是比较复杂的。你想啊,对处于运行过程中的数据库进行备份,肯定就得将一些增量的数据也备份进去。

    通常人们会使用一款叫:xtraback 的工具完成数据库的热备份。

    除此之外,我了解有一款Golang写的开源工具 ghost,在github上还是挺火的。它是一款支持做无损DDL的工具(后面会专门有一篇文章讲这个工具的原理)。这款工具在实现支持无损DDL功能时,有一部分逻辑本质上也是在支持增量数据的备份。

    ghost的实现手段是:添加binlog监听事件,监听到binlog event后去解析binlog得到sql,再回放这个SQL。就像是从库使用主库对binlog进行数据恢复一样。

    什么是快照备份?

    再了解一下什么是快照备份:

    快照备份不是数据库本身提供的能力,本质上它是借助于文件系统的快照功能来实现的对数据库的备份。

    我们知道的Linux服务器本质上也是电脑的,它会有自己的磁盘,无论是固态硬盘,还是机械磁盘。反正会有这种固态存储。还需要进一步对磁盘进行分区。然后才有将Linux文件系统中的目录都会挂载在不同的分区上。这么做的目的,简单来说就像你的window有C盘、D盘、E盘。D盘中的出问题后不会影响E盘一样。

    快照备份要求:数据库的所有数据文件都要放在一个数据分区中。

    常见的支持快照工具的文件系统和设备有:FreeBSD、UFS文件系统、Solaris的ZFS文件系统。GNU/Linux的LVM(Logical Volume Manager)

    实用的mysqldump备份方式#

    本小节看几个实战mysqldump备份case。

    测试环境:创建如下表

    CopyCREATE TABLE `test_backup2` (

    `id` int(11) NOT NULL AUTO_INCREMENT,

    `name` varchar(255) DEFAULT NULL,

    PRIMARY KEY (`id`)

    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

    数据表中写入3条数据

    mysqldump语法

    Copymysqldump [arguments] > file_name;

    1、备份指定的数据库

    通过参数--databases 指定你要备份的数据库

    Copy# mysqldump -uroot -p --databases db1 db2 db3 > 自定义名.sql;

    ./mysqldump -uroot -p --databases stusy > test_backup.sql;

    因为我开启了GTID,所以直接执行如上的命令行有报错提示说:如果我只想完成数据的dump,需要在命令行中添加上它提示的那些参数。

    Copy# 如果你没有开启GTID选项,它提示我加的这些参数你都没有必要添加的。

    # --triggers 备份触发器

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

    # --events 备份事件调度器

    ./mysqldump --set-gtid-purged=OFF --databases stusy --triggers --routines --events -uroot -p > test_backup.sql;

    查看产出的SQL文件:

    注意点:使用参数 --databases 参数。最终产出的SQL中为你创建数据库了。文件开始和结束的部分有很多注释,这些注释可以用来设置MYSQL数据的各项参数。一般用来保证还原数据时可以更加有效准确的工作。

    2、备份指定数据库中的指定数据表: 通过参数 `--tables` 指定你要备份的数据表。

    Copy# mysqldump -uroot -p --databases db1 db2 db3 --tables t1 t2 > 自定义名.sql;

    ./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events -uroot -p > test_backup.sql;

    3、对一个架构进行备份

    不使用--databases,直接写数据库名。对整库架构进行备份

    Copy./mysqldump --set-gtid-purged=OFF --triggers --routines --events -uroot -p mysql> mysql_backup.sql;

    查看备份的结果

    注意点:相对于使用 --databases 参数来说。最终产出的SQL中!!没有!!为你创建数据库。

    4、重点理解参数:--single-transaction

    如果你想获得一份“一致性备份”可以使用该参数。那什么是一致性备份呢?

    todo 下面的:我劝!这位年轻人不讲MVCC,耗子尾汁! 贴上链接。

    添加--single-transaction参数后,mysqldump会自动帮你执行 start transaction 开启事务的SQL。如果你看过白日梦之前写的 “我劝!这位年轻人不讲MVCC,耗子尾汁!”,想必你一定了解,MVCC的实现原理,回到现在的这个问题中,也就是说,只要你执行开启事务的语句就会得到一个一致性可重复读的视图(read view)。说白了:此次执行mysqldump得到的SQL文件中的数据,就是你执行的该命令的那个瞬间,打下的快照的数据。

    注意:如果你不使用--single-transaction参数,会自动添加上--lock-all-tables。此外,还需要知道当我们使用参数--single-transaction获取到的那个一致性实图并不能隔离DDL(表级别的操作,比如添加列)。所以你要确保在备份时没有其他的DDL语句执行。

    5、重点理解参数:--master-data

    Copy# 当值为1时,转存文件中会有change master 语句。

    --master-data = 1

    # 当值为2时,转存文件中当 change master 语句会被注释。

    --master-data = 2

    下面分别让 --master-data 为不同的值。查看产出。

    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=2 -uroot -p > test_backup.sql;

    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=1 -uroot -p > test_backup.sql;

    一般搭建过mysql集群的同学都知道这条change master sql语句的作用是: 从库认主库的命令。

    是的,使用参数--master-data=1得到的备份文件通常主要作用是创建一个replication(从库)。上面介绍了工作中常用的几种用法和注意点。

    其实mysqldump支持的参数多达几十个。你可以使用 --help查看它们。

    如果上面的参数不能满足你的需求。你可去官网查阅:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

    得先知道什么是GTID#

    GTID (global transcation identifier)它是MySQL5.6版本中添加进来的新特性 ,使用GTID可以唯一的标识一个事物。

    我用大白话描述一下GTID常见的作用:

    比如一条update有语句进入MySQL之后经历如下过程:

    Copy1. 写undolog

    2. 写redolog(prepare)

    3. 写binlog

    4. 写redolog(commit)

    # 这也是所谓的两阶段提交

    不管你有没有自己搭建过MySQL集群,你一定听说过MySQL集群!主库将自己成功执行过的事物都写在binlog,然后集群中的从库会dump主库记录的binlog回放出数据,完成数据同步。当我们将GTID相关的配置打开后,update语句经历如下过程:

    Copy1. 写undolog # 回滚

    2. 写redolog(prepare)# 保证提交的不会丢失

    3. 写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID

    4. 写binlog # 主从同步事物使用

    5. 写redolog(commit)

    也就是说mysql会在binlog中多为我们记录一行gtid。这个gtid和当前事物唯一对应。不会重复。

    这时当从库向主库发送同步数据当请求时:bin-log和gtid都会传送到slave端,从库在回放日志同步数据时,同样会使用gtid写bin-log,这样主库和从库之间的数据,就通过GTID强制性的关联并且保持同步了。

    下图截取自binlog一条事务,你可以看到里面会记录gtid。

    这时如果从库想在主库同步数据,只需要告诉主库自己有哪些gtid就好了,主库会把从库没有的gtid对应的事务日志给从库让它去同步数据。

    而在这种方式出现之前,主从之间同步数据时,从库需要告诉主库自己已经同步到binlog.0000x,position=yyy的地方了。这个binlog.0000x,position=yyy需要人为地去查看一下。不能说查看这两个信息比较麻烦,但是肯定不如GTID来的方便。

    看一条binlog长啥样#

    为了对小白友好一点,再看一下这张图:

    首先你得知道,像select这种查询类型的sql,是不会被记录进binlog中的,binlog中只会记录对数据库作出修改的写入或者更新的sq。就像上图中,你可以看我图中begin、xxx、commit。

    另外binlog中是有位点的,人们一般把称它叫:position。其实所谓的位点就是上图中的at xxx中的xxx。

    每一个事物都有自己的开启、结束位点,换句话说我们可以通过开始和结束的位点找到一个或者是好多和事物。就上图来说,这个事物的start-positon=956,stop-position=1230。

    这个位点有啥用呢?

    作用1:搭建主从集群时,通过下面的命令告诉从库,应该从主库的哪个binlog的哪个位点开始同步数据

    CopyCHANGE MASTER TO

    MASTER_HOST='10.157.23.158',

    MASTER_USER='mysqlsync',

    MASTER_PASSWORD='mysqlsync123',

    MASTER_PORT=8882,

    MASTER_LOG_FILE='mysql-bin.000008',

    MASTER_LOG_POS=1013; # 这就是位点

    作用2:数据恢复时,指定从哪个位点恢复到哪个位点。或者跳过哪个位点,下面我们一起看下基于binlog的数据恢复。

    数据恢复#

    不知道你有没有误删过数据库中的数据,之前我就误删过。不过还好是测试环境的。

    其实误删数据后是可以通过binlog将数据恢复出来的。既然是使用binlog恢复数据,前提是你的MySQL开启了binlog(默认情况下mysql不会帮你记录binlog,如果你还不知道什么是binlog也没关系,白日梦前面的文章有分享,你可以去看下)。

    大部分情况下,DBA同学会将你使用的MySQL binlog打开。你可以像下面这样验证一下自己使用的数据库binlog是否打开了。如果没有打开binlog,数据可能真的没办法恢复。线上的数据库不断承接流量,binlog会不断滚动变大,你要赶在binlog被清理之前去恢复数据。

    下面一起看看如何使用binlog恢复数据,下面看我的实验步骤:

    先查看我的所有的binlog:

    然后我把数据库中的数据全部删除。

    情况一:没有开启GITD

    如果你的MySQL没有开启GTID。直接使用下面的命令,就能把你指定的binlog中指定范围的positon的数据回放出来。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p除了用位点缩小范围,还可以指定开始时间和结束时间来缩小范围。

    思考这样的情况:

    假设你没有赶在binlog被清理之前去恢复数据,当你去恢复数据时上图中delete sql之前的binlog已经被删除了。那怎么办?

    这时你可以通过最近的全量备份把delete之前的数据恢复出来,然后delete之后的增量数据,通过mysqlbinlog工具恢复出来,注意别忘了通过positon跳过这个delete,不然一执行会放出来delete语句,数据又全被删除了。

    如果你没有全量备份,binlog也不全了。那估计就悬了!

    情况二:开启GITD

    开启GTID的MySQL,同样执行这行命令恢复数据会遇到下面的错误。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p

    为啥报错了。因为你用binlog回放数据,其实就是让mysql重新执行一下binlog中记录的逻辑,问题就出在binlog中记录了set next_gtid=xxx,因为gtid唯一的,是不能重复的。

    所以需要添加参数--skip-gtids=true

    Copy[root@dev-changwu-01 bin]# ./mysqlbinlog --skip-gtids=true --start-position=684 --stop-position=1485 ../var/mysql-bin.000003 | ./mysql -uroot -p

    Enter password:

    如果觉得本文对你有帮助,可以点进主页支持一下

    展开全文
  • 其实很多用户对FileYee数据备份软件不是特别熟悉,...首先“本地磁盘备份”是我们最常见的备份方式,指的是将本地磁盘的文件自动备份。这是软件基本的备份方案,也是大家使用比较多的备份方案。 2、FTP备份 其次

    其实有很多用户对FileYee数据备份软件不是特别熟悉,今天小编带大家了解一下FileYee的四种备份方案,一定会让大家对于数据备份有一个新的了解。

    之前提到的四种方案分别是哪些呢?请看,1.本地磁盘备份、2.FTP备份、3.SFTP备份、4.百度网盘备份,这些都可以通过这款软件来实现。

    那么这四种备份方案大概是以什么样的呢?

    1、本地磁盘备份

    首先“本地磁盘备份”是我们最常见的备份方式,指的是将本地磁盘的文件自动备份。这是软件基本的备份方案,也是大家使用比较多的备份方案。

    2、FTP备份

    其次“FTP备份”指服务器中的文件备份,实现数据的备份同步,这是大部分站长和程序员同志可能使用的比较多。

    3、SFTP备份

    第三“SFTP备份”指服务器中的文件备份,从而保证数据的完整性,其实和FTP是大同小异的。

    4、百度网盘备份

    最后的“百度网盘备份”这是FileYee 比较有特色的功能,很多用户都是对于我们的百度网盘备份同步兴趣非常大,网盘中的数据进行备份,这样可以避免上传下载中因为速度的原因造成不便。

    image.png

    在日常的工作中,数据备份是非常必要的,可以避免数据丢失带来的不必要的麻烦,FileYee的四种备份方案可以满足大部分的用户使用,同事还有不同的备份方式,比如单向同步、双向同步、镜像同步、移动同步、更新同步、累加同步、增量备份、完全备份。

    image.png

    FileYee数据备份软件对于很多小白用户来说是非常容易上手的一款软件,操作简单方便,所以即使你是第一次使用这款软件也不会感觉太陌生。同时,对于企业来说这款软件也是一款非常便捷的软件,定时备份企业中的数据文件,省时省力,安全高效。

    展开全文
  • MySQL中数据备份方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。 什么是冷备份? 所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。 在前面...

    数据备份有哪些种?#

    MySQL中数据备份的方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。

    什么是冷备份?

    所谓的冷备份,说白了就是在数据库停止运行的情况下,直接备份磁盘中MySQL用来存储数据的那些数据文件。

    在前面的文章中,白日梦跟大家分享过MySQL的表空间。看过那篇文章的同学都是知道,MySQL中的数据最终都存储在表空间中的。表空间 == 表空间文件。其实而所谓的空间,本质上对应着存在于操作系统磁盘上的肉眼能看到的物理文件。

    下面你可以看一下我的MySQL的表空间文件都是怎么配置的,以及它们都在哪里。

    MySQL版本:5.7 ,并且我在 my.cnf 配置文件中添加了如下的配置。

    Copy# 表示每一个数据库单独使用一个表空间
    innodb_file_per_table=on
    

    然后我创建数据库:stusy。

    创建数据表:test_backup。

    进入到如下的目录中,你可以看到MySQL为我们创建的数据库表创建出了单独的目录,而目录中的有 .frm、.idb文件就是冷备份需要备份的文件。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    什么是逻辑备份?

    逻辑备份指的是使用 mysqldump 工具去备份数据。使用mysqldump进行数据库的逻辑备份也是在做的各位RD需要掌握的技能。日常开发中难免会有将线上的数据备份到测试环境使用的场景。

    为啥说mysqldump是逻辑备份?原因大概是:你使用mysqldump去备份最终得到的参数其实是一堆sql,再通过回放sql的形式完成数据的恢复。白日梦之前的文章中跟大家分享过(可自行查看历史文章哈)。在MySQL中数据表、数据行其实是逻辑存上的概念。像数据页这种概念是物理真实存在的。所以你用mysqldump得到一堆sql,自然称得上是逻辑备份喽。

    下文中具体说,mysqldump实战。

    什么是热备份?

    所谓热备份其实是指:直接对运行中的数据库进行备份。相对于冷备份,热备份还是比较复杂的。你想啊,对处于运行过程中的数据库进行备份,肯定就得将一些增量的数据也备份进去。

    通常人们会使用一款叫:xtraback 的工具完成数据库的热备份。

    除此之外,我了解有一款Golang写的开源工具 ghost,在github上还是挺火的。它是一款支持做无损DDL的工具(后面会专门有一篇文章讲这个工具的原理)。这款工具在实现支持无损DDL功能时,有一部分逻辑本质上也是在支持增量数据的备份。

    ghost的实现手段是:添加binlog监听事件,监听到binlog event后去解析binlog得到sql,再回放这个SQL。就像是从库使用主库对binlog进行数据恢复一样。

    什么是快照备份?

    再了解一下什么是快照备份:

    快照备份不是数据库本身提供的能力,本质上它是借助于文件系统的快照功能来实现的对数据库的备份。

    我们知道的Linux服务器本质上也是电脑的,它会有自己的磁盘,无论是固态硬盘,还是机械磁盘。反正会有这种固态存储。还需要进一步对磁盘进行分区。然后才有将Linux文件系统中的目录都会挂载在不同的分区上。这么做的目的,简单来说就像你的window有C盘、D盘、E盘。D盘中的出问题后不会影响E盘一样。

    快照备份要求:数据库的所有数据文件都要放在一个数据分区中。

    常见的支持快照工具的文件系统和设备有:FreeBSD、UFS文件系统、Solaris的ZFS文件系统。GNU/Linux的LVM(Logical Volume Manager)

    实用的mysqldump备份方式#

    本小节看几个实战mysqldump备份case。

    测试环境:创建如下表

    CopyCREATE TABLE `test_backup2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    

    数据表中写入3条数据

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    mysqldump语法

    Copymysqldump [arguments] > file_name;
    

    1、备份指定的数据库

    通过参数--databases 指定你要备份的数据库

    Copy# mysqldump  -uroot -p --databases db1 db2 db3 > 自定义名.sql; 
    
    ./mysqldump  -uroot -p --databases stusy > test_backup.sql; 
    

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    因为我开启了GTID,所以直接执行如上的命令行有报错提示说:如果我只想完成数据的dump,需要在命令行中添加上它提示的那些参数。

    Copy# 如果你没有开启GTID选项,它提示我加的这些参数你都没有必要添加的。
    #  --triggers 备份触发器
    #  --routines 备份存储过程和函数
    #  --events 备份事件调度器
    ./mysqldump --set-gtid-purged=OFF --databases stusy --triggers --routines --events -uroot -p > test_backup.sql; 
    

    查看产出的SQL文件:

    注意点:使用参数 --databases 参数。最终产出的SQL中为你创建数据库了。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    文件开始和结束的部分有很多注释,这些注释可以用来设置MYSQL数据的各项参数。一般用来保证还原数据时可以更加有效准确的工作。

    2、备份指定数据库中的指定数据表: 通过参数 `--tables` 指定你要备份的数据表。

    Copy# mysqldump  -uroot -p --databases db1 db2 db3 --tables t1 t2 > 自定义名.sql; 
     
    ./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events -uroot -p > test_backup.sql; 
    

    3、对一个架构进行备份

    不使用--databases,直接写数据库名。对整库架构进行备份

    Copy./mysqldump --set-gtid-purged=OFF --triggers --routines --events -uroot -p mysql> mysql_backup.sql; 
    

    查看备份的结果

    注意点:相对于使用 --databases 参数来说。最终产出的SQL中!!没有!!为你创建数据库。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    4、重点理解参数:--single-transaction

    如果你想获得一份“一致性备份”可以使用该参数。那什么是一致性备份呢?

    todo 下面的:我劝!这位年轻人不讲MVCC,耗子尾汁! 贴上链接。

    添加--single-transaction参数后,mysqldump会自动帮你执行 start transaction 开启事务的SQL。如果你看过白日梦之前写的 “我劝!这位年轻人不讲MVCC,耗子尾汁!”,想必你一定了解,MVCC的实现原理,回到现在的这个问题中,也就是说,只要你执行开启事务的语句就会得到一个一致性可重复读的视图(read view)。说白了:此次执行mysqldump得到的SQL文件中的数据,就是你执行的该命令的那个瞬间,打下的快照的数据。

    注意:如果你不使用--single-transaction参数,会自动添加上--lock-all-tables。此外,还需要知道当我们使用参数--single-transaction获取到的那个一致性实图并不能隔离DDL(表级别的操作,比如添加列)。所以你要确保在备份时没有其他的DDL语句执行。

    5、重点理解参数:--master-data

    Copy# 当值为1时,转存文件中会有change master 语句。
    --master-data = 1
    # 当值为2时,转存文件中当 change master 语句会被注释。
    --master-data = 2
    

    下面分别让 --master-data 为不同的值。查看产出。

    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=2 -uroot -p > test_backup.sql; 
    

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    Copy./mysqldump --set-gtid-purged=OFF --databases stusy --tables test_backup --triggers --routines --events --master-data=1 -uroot -p > test_backup.sql; 
    

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    一般搭建过mysql集群的同学都知道这条change master sql语句的作用是: 从库认主库的命令。

    是的,使用参数--master-data=1得到的备份文件通常主要作用是创建一个replication(从库)。

    上面介绍了工作中常用的几种用法和注意点。

    其实mysqldump支持的参数多达几十个。你可以使用 --help查看它们。

    如果上面的参数不能满足你的需求。你可去官网查阅:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html

    得先知道什么是GTID#

    GTID (global transcation identifier)它是MySQL5.6版本中添加进来的新特性 ,使用GTID可以唯一的标识一个事物。

    我用大白话描述一下GTID常见的作用:

    比如一条update有语句进入MySQL之后经历如下过程:

    Copy1. 写undolog 
    2. 写redolog(prepare)
    3. 写binlog 
    4. 写redolog(commit)
    # 这也是所谓的两阶段提交
    

    不管你有没有自己搭建过MySQL集群,你一定听说过MySQL集群!主库将自己成功执行过的事物都写在binlog,然后集群中的从库会dump主库记录的binlog回放出数据,完成数据同步。当我们将GTID相关的配置打开后,update语句经历如下过程:

    Copy1. 写undolog # 回滚
    2. 写redolog(prepare)# 保证提交的不会丢失
    3. 写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID 
    4. 写binlog # 主从同步事物使用
    5. 写redolog(commit)
    

    也就是说mysql会在binlog中多为我们记录一行gtid。这个gtid和当前事物唯一对应。不会重复。

    这时当从库向主库发送同步数据当请求时:bin-log和gtid都会传送到slave端,从库在回放日志同步数据时,同样会使用gtid写bin-log,这样主库和从库之间的数据,就通过GTID强制性的关联并且保持同步了。

    下图截取自binlog一条事务,你可以看到里面会记录gtid。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    这时如果从库想在主库同步数据,只需要告诉主库自己有哪些gtid就好了,主库会把从库没有的gtid对应的事务日志给从库让它去同步数据。

    而在这种方式出现之前,主从之间同步数据时,从库需要告诉主库自己已经同步到binlog.0000x,position=yyy的地方了。这个binlog.0000x,position=yyy需要人为地去查看一下。不能说查看这两个信息比较麻烦,但是肯定不如GTID来的方便。

    看一条binlog长啥样#

    为了对小白友好一点,再看一下这张图:

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    首先你得知道,像select这种查询类型的sql,是不会被记录进binlog中的,binlog中只会记录对数据库作出修改的写入或者更新的sq。就像上图中,你可以看我图中begin、xxx、commit。

    另外binlog中是有位点的,人们一般把称它叫:position。其实所谓的位点就是上图中的at xxx中的xxx。

    每一个事物都有自己的开启、结束位点,换句话说我们可以通过开始和结束的位点找到一个或者是好多和事物。就上图来说,这个事物的start-positon=956,stop-position=1230。

    这个位点有啥用呢?

    作用1:搭建主从集群时,通过下面的命令告诉从库,应该从主库的哪个binlog的哪个位点开始同步数据

    CopyCHANGE MASTER TO
        MASTER_HOST='10.157.23.158',
        MASTER_USER='mysqlsync',
        MASTER_PASSWORD='mysqlsync123',
        MASTER_PORT=8882,
        MASTER_LOG_FILE='mysql-bin.000008',
        MASTER_LOG_POS=1013; # 这就是位点
    

    作用2:数据恢复时,指定从哪个位点恢复到哪个位点。或者跳过哪个位点,下面我们一起看下基于binlog的数据恢复。

    数据恢复#

    不知道你有没有误删过数据库中的数据,之前我就误删过。不过还好是测试环境的。

    其实误删数据后是可以通过binlog将数据恢复出来的。既然是使用binlog恢复数据,前提是你的MySQL开启了binlog(默认情况下mysql不会帮你记录binlog,如果你还不知道什么是binlog也没关系,白日梦前面的文章有分享,你可以去看下)。

    大部分情况下,DBA同学会将你使用的MySQL binlog打开。你可以像下面这样验证一下自己使用的数据库binlog是否打开了。如果没有打开binlog,数据可能真的没办法恢复。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    线上的数据库不断承接流量,binlog会不断滚动变大,你要赶在binlog被清理之前去恢复数据。

    下面一起看看如何使用binlog恢复数据,下面看我的实验步骤:

    先查看我的所有的binlog:

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    然后我把数据库中的数据全部删除。

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    情况一:没有开启GITD

    如果你的MySQL没有开启GTID。直接使用下面的命令,就能把你指定的binlog中指定范围的positon的数据回放出来。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p
    

    除了用位点缩小范围,还可以指定开始时间和结束时间来缩小范围。

    思考这样的情况:

    假设你没有赶在binlog被清理之前去恢复数据,当你去恢复数据时上图中delete sql之前的binlog已经被删除了。那怎么办?

    这时你可以通过最近的全量备份把delete之前的数据恢复出来,然后delete之后的增量数据,通过mysqlbinlog工具恢复出来,注意别忘了通过positon跳过这个delete,不然一执行会放出来delete语句,数据又全被删除了。

    如果你没有全量备份,binlog也不全了。那估计就悬了!

    情况二:开启GITD

    开启GTID的MySQL,同样执行这行命令恢复数据会遇到下面的错误。

    Copy./mysqlbinlog start-positon=956,stop-position=1230 ../var/mysql-bin.000003 | ./mysql-uroot -p
    

    常见数据库备份方式:MySQLbinlog数据恢复详解

     

    为啥报错了。因为你用binlog回放数据,其实就是让mysql重新执行一下binlog中记录的逻辑,问题就出在binlog中记录了set next_gtid=xxx,因为gtid唯一的,是不能重复的。

    所以需要添加参数--skip-gtids=true

    Copy[root@dev-changwu-01 bin]#  ./mysqlbinlog --skip-gtids=true --start-position=684 --stop-position=1485 ../var/mysql-bin.000003 | ./mysql -uroot -p
    Enter password:

    原文链接:https://www.cnblogs.com/ZhuChangwu/p/14250836.html


    如果觉得本文对你有帮助,可以关注一下我公众号,回复关键字【面试】即可得到一份Java核心知识点整理与一份面试大礼包!另有更多技术干货文章以及相关资料共享,大家一起学习进步!

    展开全文
  • 常见的数据备份方式有哪些? 定期磁带备份数据 远程磁带库、光盘库备份。即将数据传送到远程备份中心制作完整的备份磁带或光盘。 远程关键数据+磁带备份。采用磁带备份数据,生产机实时向备份机发送关键数据。...
  • 解决方案5LZ你好,所谓热备份其实就是数据库的容灾,在不停止原有数据库服务的情况下进行数据实时备份,很多DBMS都这个特性,就拿MySQL来说吧:最常见的就是replication主从复制,实现方式很多,网上不少成熟的...
  • 数据世界中有哪些角色? 在大多数组织中,有 3 个主要职位来负责处理数据: 数据库管理员负责管理数据库,向用户分配权限,存储数据的备份副本,并在发生故障时还原数据数据工程师在处理数据、应用数据清理...
  • 数据库常见面试题

    2018-11-04 21:52:40
    1、数据库有哪几种范式?...15、sql执行慢原因有哪些,如何进行sql优化? 16、数据库优化思路? 17、视图作用,视图可以更改么? 18、存储过程与触发器区别? 19、如何在最快时间之内重启500台db?
  • 前言Hi,欢迎订阅白日梦的MySQL专题!这篇文章我们一起闲聊,如果你不小心把MySQL中的数据删...数据备份有哪些种?MySQL中数据备份方式还是蛮多的,常见的有冷备份、逻辑备份、热备份、快照备份。什么是冷备份?所...
  • 文章目录前言数据备份有哪些种?实用mysqldump备份方式得先知道什么是GTID看一条binlog长啥样数据恢复推荐阅读-白日梦MySQL专题推荐阅读-二本应届生大学生活,已上岸百度下一篇:两阶段提交和分布式事务 前言...
  • 1.1.8 NFS 和 SMB 是最常见的两种 NAS(Network Attached Storage)协议,当把一个文件系统同时通过 NFS 和 SMB 协议共享给多个主机访问时,以下哪些说法是错误的 1.1.9 输入 ping IP 后敲回车,发包前会发生什么?...
  • 4.3.1 有哪些对象统计信息可用 95 4.3.2 收集对象统计信息 108 4.3.3 锁定对象统计信息 123 4.3.4 比较对象统计信息 125 4.3.5 删除对象统计信息 127 4.3.6 保持统计信息时效性策略 129 4.4 通用...
  • 29、List遍历方式有多少种 76 30、Map怎么遍历 76 31、怎么获取Map所有key,所有value 77 32、获取Class实例有几种方式 77 33、怎么获取类中所有方法,所有属性 77 34、JDBC常用接口有哪些? 77 35、...
  • 书中内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • 实际上常见的解决方案是建立如下所示的循环: Randomize RNumber = Int(Rnd*499) +1   While Not objRec.EOF If objRec("ID") = RNumber THEN ... 这里是执行脚本 ... end if objRec.MoveNext Wend  这很...
  • DBA最重要素质有哪些 11 DBA职业生涯之误删除篇 12 DBA警世录——有些习惯DBA需要养成 13 RAC环境下故障处理一则 14 SQL_TRACE跟踪与诊断 16 临时表空间组导致递归SQL高度解析案例 19 使用闪回查询恢复误...
  • 第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server 2008服务器、如何创建数据库和数据表、如何对数据库里的数据进行操作;第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,...
  • 在这里仅列举两个最主要的原因,一方面,随着近年来企业信息化进程的深入,企业里各种系统的数据量持续上升,这一切给数据的管理、维护和安全带来了机会和挑战,另一方面,企业间同质化竞争的加剧,也迫使企业加强...
  • 第3部分为SQL Server 2008的基本操作篇,介绍如何管理与配置SQL Server 2008服务器、如何创建数据库和数据表、如何对数据库里的数据进行操作;第4部分为数据库管理篇,介绍如何使用T-SQL程序对数据进行复杂的运算,...
  • java面试题典 java 面试题 经典

    热门讨论 2010-06-18 13:42:36
    1. 面向对象的特征有哪些方面? 7 2. String是最基本的数据类型吗? 7 3. int 和 Integer 有什么区别? 7 4. String 和StringBuffer的区别? 8 5. 运行时异常与一般异常有何异同? 8 6. 说出ArrayList,Vector, ...
  • Code Compl 代码大全

    2011-05-26 12:09:22
     第13章 不常见的数据类型  13.1 结构  13.2 指针  用来理解指针的例子  使用指针的一般技巧  C++指针  C指针  13.3 全局数据  与全局数据有关的常见问题  使用全局数据的理由  只有万不得已时才使用全局...
  • 通过作者历时3年写作,本书介绍了Oracle安装及卸载、数据库启动关闭、表空间和数据文件管理、Oracle网络管理、口令文件管理、内存管理、进程管理、用户管理、数据的导入导出、备份与恢复、模式对象管理...
  • 通过作者历时3年写作,本书介绍了Oracle安装及卸载、数据库启动关闭、表空间和数据文件管理、Oracle网络管理、口令文件管理、内存管理、进程管理、用户管理、数据的导入导出、备份与恢复、模式对象管理...
  • 对于SQL Server数据库管理员来讲,已满事务日志是一个琐碎的,但又很常见的问题。它能引发事务的提前终止,甚至通过阻止所有事务的引入,从而引起系统的崩溃。对于数据库管理员来说,关键是理解将要发生的情况,以便...
  • php网络开发完全手册

    热门讨论 2009-03-02 13:17:26
    3.1.3 特殊的数据类型 50 3.1.4 数据类型的获得与验证 51 3.2 数据类型间的转换 52 3.2.1 转换成整型 52 3.2.2 转换成浮点型 54 3.2.3 转换成字符串型 55 3.2.4 转换成布尔型 55 3.2.5 转换成数组 56 3.2.6 转换成...
  • [Q]Oracle有哪些常见关键字,不能被用于对象名 17 [Q]怎么查看数据库版本 18 [Q]怎么查看数据库参数 18 [Q]怎么样查看数据库字符集 19 [Q]怎么样修改字符集 19 [Q]怎样建立基于函数索引 19 [Q]怎么样移动表或表分区 ...
  • 这个项目允许你选择AGP装置的数据传输速率,更高的数据传输速率可对您的系统提供更快以及更佳的图形处理能力。请确认您的显示卡可以支持您所选择的模式,一般用默认的就可以。 4.Integrated Peripherals(集成...
  • 药店无忧2014版

    2013-10-29 14:53:33
    4.销售备份查询,本程序在销售时会自动对数据进行临时备份,如遇突然停电或死机将自动保存到临时备份数据里,下次同一销售员在进入销售时会提示,在本界面管理员也可随时查看临时备份的数据 ,管理员并可处理还原回...
  • CruiseYoung提供详细书签电子书籍目录 http://blog.csdn.net/fksec/article/details/7888251 SQL Server求生秘籍(SQL Server故障排除圣经) 基本信息 原书名: SQL Server 2005 Practical Troubleshooting:...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

常见的数据备份方式有哪些