sqlite是否能作为双机热备怎么做份的工具

双机热备份系统上实现SQL应用_百度文库
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
双机热备份系统上实现SQL应用
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩4页未读,
定制HR最喜欢的简历
你可能喜欢如何选择双机热备软件-选睿斯RCSHA就对了
双机热备软件
什么是双机热备?
说到双机热备也许很多人不是很了解,但是对于技术管理人员来说这是很常见的软件,主要针对于客户的需求,即客户的应用系统非常重要,不允许出现中断或故障。双机热备是采用2台服务器共同连接一台磁盘阵列(存储),2台服务器的软硬件设置相同,正常情况下,应用服务只在主服务器运行,在主机出现故障(硬件、软件)无法正常工作时,热备系统将把应用服务切换到备服务器,使应用服务在备机运行,从而保证应用服务的连续性。
那么双机热备软件的功能有哪些?
1、实时数据热备:数据库双机热备能够准确、自动监控数据库所有的数据信息,另外,只要数据库的数据信息发生变化,数据库双机热备都能及时捕捉到,并且将变化的数据备份好,做到滴水不漏,完好无缺。这种独特功能是一般的设备所不能做到的。
2、找回丢失数据:数据库双机热备还能够及时找回丢失和需要的数据。只需要简单的操作能找回你想要的数据,不分时间的限制。如果你想找回某一时间段或某的数据,都能将数据库撤回,回到当时数据库的状态。这中间的操作过程不仅简单,而且不会造成数据的凌乱或丢失,*终都会很完整将数据保存起来。
3、实现双机热备:数据库双机热备实现双机热备,主要是能将服务器与主站的IP数据进行自动对接,实现不间断的服务,从而保证了工作效率。
4、实时异地容灾:数据库双机热备的实时异地容灾主要是可以在一些网站的服务器上,可以对数据进行备份,这种实时异地容灾适合要求比较高的医院,因为如果一但数据备份过程中发生故障,也能及时将数据进行恢复,不会影响后果。
5、复制:数据库双机热备可以对数据进行原分不动的复制,这样保证了数据的完整性和同步性。
6、方式:数据库双机热备实现了全冗余方式,比传统的外挂盘柜式双机热备避免了很多链路隐患问题,大大减少了链路发生的故障和硬件崩溃的情况。另外,数据库双机热备也实现数据删除不能恢复的问题,给人们的工作带来的极大的方便。
说完了双机热备的功能,那来说说它的价格。双机热备软件不仅仅只是一般的应用软件,所以在价格上还是比一般的软件要贵一些,性能一般的都需要好几千,甚至上万,可靠性的更高的产品甚至要数万元,你是否看到这个价格望而生畏呢?但对于价格,其实我们更应该考虑的是,我们为什么要花这么多钱去买这个软件,正是因为我们需要用它来保护”更值钱的业务系统”,那么我们在选择产品的时候,就应该站在稳定性上考虑可靠性更高的产品,其次软件有了,服务的作用就突出出来,没有好的服务,那么买再好的软件,都是做的无用功,在这里,服务的专业性和经验就起了决定性的作用。”专业的人做专业的事情”,选择一个专业的服务提供商就显得尤为重要,所以在选择产品的时候,可靠的软件产品&专业的支持服务&优惠的产品价格
价格对于软件,服务应该是优先考虑的,北京三木联合公司,专业从事高可用集群领域十五年,选择好的软件,提供好的服务,给予好的价格,这个我是我们做的事情!
睿斯双机软件RCS产品简介:
睿斯集群软件(RSS Cluster System,简称RCS,)是北京三木联合公司为了满足客户对于中低端高可用需求而推出的性价比极高的双机热备软件,睿斯双机热备软件主要分为共享架构双机RCS HA和镜像架构双机RCS MA,能在windows平台和主流Linux系统下运行。
北京三木联合公司经过在高可用集群领域十五年的耕耘,深知高可用系统在客户应用环境中的重要性,但在实际应用环境中,对于某些领域的客户,高可用系统有属于对于客户透明,只有在出现问题时,客户才会感觉到高可用系统的存在,所以在选择产品时,往往客户更愿意在硬件系统的大投入,对于这类软件的投入,往往不够重视,价格十分敏感。针对这种情况,为了适应这类客户的实际需求,北京三木联合特别推出了睿斯双机软件,我们采取了低价策略,然后客户在接受的预算内,选择高可用系统来保护应用;但低价格不代表牺牲功能和稳定性,我们在产品的功能和稳定性上,精雕细琢,在公司内部,模拟了各类的实际应用环境,进行了近两年的测试,到了我们对于产品的各种参数要求之后,才真正开始推荐给客户,经过近两年,数百个客户的实际应用,得到了客户良好反馈,也使我们更加有信心,让我们的客户能够在降低成本的情况下,更多采用高可用系统架构来保护重要的应用,也可以让我们的客户免去不得不选择rose类的产品,虽然不好用,但也没有办法的尴尬境地。查看:2997|回复:27
助理工程师
最近做的项目一直都是关于双机热备,多节点,远程容灾备份,搞的一把泪一把泪啊啊啊啊 。各种伤~~~
这有什么伤的这是好事,肯投入的大公司哦
助理工程师
引用:原帖由 springhu116 于
10:09 发表
这有什么伤的这是好事,肯投入的大公司哦 哪里啊,虽然身在国企,也是身不由己。IT人都一样啊~~~唉。
国企不差钱.
提示: 作者被禁止或删除 内容自动屏蔽
提示: 作者被禁止或删除 内容自动屏蔽
高级工程师
共同交流,共同进步
楼主还做过双机热备,从学校毕业到现在都没有在配过双机热备,学的双机热备都还给老师了。
助理工程师
楼上就是sb
优秀技术总监
window的还好做些,linux就没学过……
助理工程师
找微软、oracle、EMC、赛门铁克之类的厂家销售或者代理商吧,一抓一大把,相关的软件、硬件方案很多!你把需求信息发出去,然后坐等一堆销售找上门。技术不是问题,软硬件都是很成熟的现成东西,渠道和商业才是全部
前阵子我们公司开始用畅云这个东西,还不错,我们打算做异地的双活灾备的,但是市场上大多数产品都太贵了,不过这家的还可以,价格也公道,当然你看看是否符合你的需求吧,我多说了有做广告的嫌疑,哈哈哈,你自己看吧,也不见得就符合你的需求,反正是符合我的了。给你个网址
助理工程师
引用:原帖由 camefsj84 于
16:08 发表
国企不差钱. 其实很多小公司也有做双机热备和远程容灾啊,数据安全是第一位啊。这些东西做下来的代价又不贵,例如:易腾这家公司的双机软件和CA UDP,CA D2D,这几个都蛮不错的啊。
助理工程师
引用:原帖由 xuelangdadi 于
14:56 发表
前阵子我们公司开始用畅云这个东西,还不错,我们打算做异地的双活灾备的,但是市场上大多数产品都太贵了,不过这家的还可以,价格也公道,当然你看看是否符合你的需求吧,我多说了有做广告的嫌疑,哈哈哈,你自己看吧,也不见得就符合你 ... 一般我做的远程容灾有赛门和CA,我觉得这2个还不错,性价比和性能方面我一般都采购CA公司的产品。
助理工程师
引用:原帖由 ilovelxy 于
17:04 发表
找微软、oracle、EMC、赛门铁克之类的厂家销售或者代理商吧,一抓一大把,相关的软件、硬件方案很多!你把需求信息发出去,然后坐等一堆销售找上门。技术不是问题,软硬件都是很成熟的现成东西,渠道和商业才是全部 ... 谁让我是采购呢,所以我一般选择北京易腾数信的和CA公司产品,嘿嘿、你懂得。
助理工程师
引用:原帖由 erfdcv 于
23:10 发表
window的还好做些,linux就没学过…… windows和linux都差不多,不然给你份文档,可以给你试试,linux平台oracle和其它一些服务的。
助理工程师
引用:原帖由 西门飞冰 于
19:03 发表
楼主还做过双机热备,从学校毕业到现在都没有在配过双机热备,学的双机热备都还给老师了。 一直做双机热备和远程容灾啊,伤。。。IT人都有一样的伤~~~
助理工程师
引用:原帖由 周士昆 于
20:32 发表
楼上就是sb 你也是做这个的吗?有没有被客户伤到?
我有些项目经验,网络双机热备,还有系统的双网卡冗余,存储系统的冗余。
引用:原帖由 xuan2212610 于
09:57 发表
一般我做的远程容灾有赛门和CA,我觉得这2个还不错,性价比和性能方面我一般都采购CA公司的产品。 嗯,是,不过价格有点高,如果不差钱的话,可以考虑,哈哈哈。我们公司钱很紧,又让用国产的,还要好用的,这家公司的产品,我还是听朋友说的呢,要不然,像其他的软件,符合我们标准的,至少开价20多万,真受不了。不用任何第三方工具,如何备份InnoDB?生产环境
本人曾经用过的备份方式有:dump、mysqlhotcopy、BACKUP TABLE 、SELECT INTO UTFILE,又或者备份二进制日志(binlog),还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式,因此相对比较容易备份,上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件),相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。
1.mysqldump备份
mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。
示例:mysqldump -uroot -p database table & /home/jobs/back.sql
mysqldump也可做增量备份,mysqldump相关参数网上较多,就不在此一一赘述了
2.mysqlhotcopy备份
mysqlhotcopy 是一个 PERL 程序。它使用 LOCK TABLES、FLUSH
TABLES 和 cp 或 scp
来快速备份。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上。
mysqlhotcopy 只能用于备份 MyISAM,并且只能运行在 类Unix 和 NetWare 上。
mysqlhotcopy 支持一次性拷贝多个数据库,同时还支持正则表达。
示例: root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root
-p=123456 database /tmp (把数据库目录 database 拷贝到 /tmp
下)root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=root -p=123456
db_name_1 ... db_name_n /tmproot#/usr/local/mysql/bin/mysqlhotcopy
-h=localhost -u=root -p=123456 db_name./regex/
/tmp更详细的使用方法请查看手册,或者调用下面的命令来查看 mysqlhotcopy 的帮助:
perldoc /usr/local/mysql/bin/mysqlhotcopy注意,想要使用 mysqlhotcopy,必须要有
SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。
还原mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld
指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例: root#cp
-rf db_name /usr/local/mysql/data/root#chown -R nobody:nobody
/usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
3.SQL 语法备份
3.1 备份BACKUP TABLE 语法其实和 mysqlhotcopy
的工作原理差不多,都是锁表,然后拷贝数据文件。它能实现在线备份,但是效果不理想,因此不推荐使用。它只拷贝表结构文件和数据文件,不同时拷贝索引文
件,因此恢复时比较慢。例子: BACK TABLE tbl_name TO '/tmp/db_name/';注意,必须要有 FILE
权限才能执行本SQL,并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
恢复用 BACKUP TABLE 方法备份出来的文件,可以运行 RESTORE TABLE 语句来恢复数据表。例子: RESTORE TABLE FROM '/tmp/db_name/';权限要求类似上面所述。
3.2 SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件,可以自定义字段间隔的方式,方便处理这些数据。例子:
SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_注意,必须要有
FILE 权限才能执行本SQL,并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld
用户可写,导出的文件不能覆盖已经存在的文件,以避免安全问题。
用 SELECT INTO OUTFILE 方法备份出来的文件,可以运行 LOAD DATA INFILE 语句来恢复数据表。例子: LOAD
DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE
tbl_权限要求类似上面所述。倒入数据之前,数据表要已经存在才行。如果担心数据会发生重复,可以增加 REPLACE
关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。
4.启用二进制日志(binlog)
采用 binlog 的方法相对来说更灵活,省心省力,而且还可以支持增量备份。
启用 binlog 时必须要重启 mysqld。首先,关闭 mysqld,打开 my.cnf,加入以下几行:
server-id = 1
log-bin = binlog
log-bin-index = binlog.index
然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index,前面的文件是 mysqld
记录所有对数据的更新操作,后面的文件则是所有 binlog 的索引,都不能轻易删除。关于 binlog 的信息请查看手册。
需要备份时,可以先执行一下 SQL 语句,让 mysqld 终止对当前 binlog
的写入,就可以把文件直接备份,这样的话就能达到增量备份的目的了: FLUSH LOGS;如果是备份复制系统中的从服务器,还应该备份
master.info 和 relay-log.info 文件。
备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看,如:
/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001该工具允许你显示指定的数据库下的所有
SQL 语句,并且还可以限定时间范围,相当的方便,详细的请查看手册。
恢复时,可以采用类似以下语句来做到: /usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001
| mysql -uyejr -pyejr db_name把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。
如果你有空闲的机器,不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高,因此成本低,用低成本就能实现增量备份而且还能分担一部分数据查询压力,何乐而不为呢?
5.拷贝文件
直接备份数据文件相较前几种方法,备份数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。
为了保证数据的一致性,需要在靠背文件前,执行以下 SQL 语句: FLUSH TABLES WITH READ
LOCK;也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回
原来的数据库目录下即可。
注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。
6.利用rsync备份
rsync作为同步工具也可以用来做备份,但要配置服务器端和客户端
示例rsync -vzrtopg --progress --delete root@192.168.1.3::root /tmp/
相关rsync配置可参考https://fanqiang.chinaunix.net/a6/b7/5001258.html
缺点是rsync是根据文件修改时间做的增量备份,所以备份数据库都是全备,并且配置比较麻烦.
[问题案例]使用mysql自带命令这种方式备份的,发现恢复起来,很慢:
mysqldump --opt -huserdb -usupport -pPassword --skip-lock-tables bbs user&/data/backup/user_basic.sql
而且恢复过程中,MYADMIN查看数据库内容居然是空的,结构则变成了MyISAM,但是数据目录下的文件大小始终是在缓慢增长.
不知道怎么回事.
不用任何第三方工具的话,你上面的方法就是比较合适的了,更多细节看本站关于mysqldump的文章.
my.cnf生成器(公测版) | MySQL 中文网 https://imysql.com/my_cnf_generator
一、备份的目的
做灾难恢复:对损坏的数据进行恢复和还原
需求改变:因需求改变而需要把数据还原到改变以前
测试:测试新功能是否可用
二、备份需要考虑的问题
可以容忍丢失多长时间的数据;
恢复数据要在多长时间内完;
恢复的时候是否需要持续提供服务;
恢复的对象,是整个库,多个表,还是单个库,单个表。
三、备份的类型
1、根据是否需要数据库离线
冷备(cold backup):需要关mysql服务,读写请求均不允许状态下进行;
温备(warm backup): 服务在线,但仅支持读请求,不允许写请求;
热备(hot backup):备份的同时,业务不受影响。
1、这种类型的备份,取决于业务的需求,而不是备份工具
2、MyISAM不支持热备,InnoDB支持热备,但是需要专门的工具
2、根据要备份的数据集合的范围
完全备份:full backup,备份全部字符集。
增量备份: incremental backup 上次完全备份或增量备份以来改变了的数据,不能单独使用,要借助完全备份,备份的频率取决于数据的更新频率。
差异备份:differential backup 上次完全备份以来改变了的数据。
建议的恢复策略:
完全+增量+二进制日志
完全+差异+二进制日志
3、根据备份数据或文件
物理备份:直接备份数据文件
备份和恢复操作都比较简单,能够跨mysql的版本,
恢复速度快,属于文件系统级别的
不要假设备份一定可用,要测试
mysql&check tables;检测表是否可用
逻辑备份: 备份表中的数据和代码
恢复简单、
备份的结果为ASCII文件,可以编辑
与存储引擎无关
可以通过网络备份和恢复
备份或恢复都需要mysql服务器进程参与
备份结果占据更多的空间,
浮点数可能会丢失精度
还原之后,缩影需要重建
四:备份的对象
1、 数据;
2、配置文件;
3、代码:存储过程、存储函数、触发器
4、os相关的配置文件
5、复制相关的配置
6、二进制日志
五、备份和恢复的实现
1、利用select into outfile实现数据的备份与还原
1.1把需要备份的数据备份出来
复制代码代码如下:
mysql& //打开hellodb库
mysql& select * 查看students的属性
mysql& select * from students where Age & 30 into outfile &/tmp/stud.txt' ; //将年龄大于三十的同学的信息备份出来
备份的目录路径必须让当前运行mysql服务器的用户mysql具有访问权限
备份完成之后需要把备份的文件从tmp目录复制走,要不就失去备份的目的了
回到tmp目录下查看刚才备份的文件
[root@www ~]# cd /tmp
[root@www tmp]# cat stud.txt
3Xie Yanke53M216
4Ding Dian32M44
6Shi Qing46M5\N
13Tian Boguang33M2\N
25Sun Dasheng100M\N\N
[root@www tmp]#
你会发现是个文本文件。所以不能直接导入数据库了。需要使用load data infile 恢复
回到mysql服务器端,删除年龄大于30的用户,模拟数据被破坏
mysql& delete from students where Age & 30;
mysql& load data infile '/tmp/stud.txt'
2、利用mysqldump工具对数据进行备份和还原
mysqldump 常用来做温备,所以我们首先需要对想备份的数据施加读锁,
2.1 施加读锁的方式:
1.直接在备份的时候添加选项
--lock-all-tables 是对要备份的数据库的所有表施加读锁
--lock-table 仅对单张表施加读锁,即使是备份整个数据库,它也是在我们备份某张表的时候才对该表施加读锁,因此适用于备份单张表
2、在服务器端书写命令,
mysql& flush t 施加锁,表示把位于内存上的表统统都同步到磁盘上去,然后施加读锁
mysql& flush t释放读锁
但这对于InnoDB存储引擎来讲,虽然你也能够请求道读锁,但是不代表它的所有数据都已经同步到磁盘上,因此当面对InnoDB的时候,我们要使用mysql& show
看看InnoDB所有的数据都已经同步到磁盘上去了,才进行备份操作。
2.2备份的策略:
完全备份+增量备份+二进制日志
演示备份的过程;
2.3 先给数据库做完全备份:
复制代码代码如下:
[root@www ~]# mysqldump -uroot --single-transaction --master-data=2 --databases hellodb & /backup/hellodb_`date +%F`.sql
--single-transaction: 基于此选项能实现热备InnoDB表;因此,不需要同时使用--lock-all-tables;
--master-data=2 记录备份那一时刻的二进制日志的位置,并且注释掉,1是不注释的
--databases hellodb 指定备份的数据库
然后回到mysql服务器端,
2.4回到mysql服务器端更新数据
复制代码代码如下:
mysql& create table tb1(id int); 创建表
mysql& insert into tb1 values (1),(2),(3); 插入数据,这里只做演示,随便插入了几个数据
2.5先查看完全备份文件里边记录的位置:
复制代码代码如下: [root@www backup]# cat hellodb_.sql | less
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.;, MASTER_LOG_POS=15684; 记录了二进制日志的位置
2.6 在回到服务器端:
复制代码代码如下:
mysql& 显示此时的二进制日志的位置
从备份文件里边记录的位置到我们此时的位置,即为增量的部分
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 15982 | | |
+------------------+----------+--------------+------------------+
2.7做增量备份
复制代码代码如下:
[root@www backup]# mysqlbinlog --start-position=15694 --stop-position=15982
/mydata/data/mysql-bin.000013 & /backup/hellodb_`date +$F_%H`.sql
2.8再回到服务器
复制代码代码如下:
mysql& insert into tb1 values (4),(5); 在插入一些数值
mysql& d 删除hellodb库
2.9导出这次得二进制日志:
复制代码代码如下:
[root@www backup]# mysqlbinlog --start-position=15982 /mydata/data/mysql-bin.000013 查看删除操作时二进制日志的位置
[root@www backup]# mysqlbinlog --start-position=15982 --stop-position=16176 /mydata/data/mysql-bin.000013 & /tmp/hellodb.sql //导出二进制日志
2.10先让mysql离线
回到服务器端:
复制代码代码如下:
mysql& set sql_log_bin=0; 关闭二进制日志
mysql& 滚动下日志
2.11模拟数据库损坏
复制代码代码如下: mysql& d
2.12开始恢复数据:
复制代码代码如下:
[root@www ]# mysql & /backup/hellodb_.sql //导入完全备份文件
[root@www ]# mysql & /backup/hellodb__05.sql //导入增量备份文件
[root@www ]# mysql& hellodb.sql //导入二进制文件
验证完成,显示结果为我们预想的那样
1、真正在生产环境中,我们应该导出的是整个mysql服务器中的数据,而不是单个库,因此应该使用--all-databases
2、在导出二进制日志的时候,可以直接复制文件即可,但是要注意的是,备份之前滚动下日志。
3、利用lvm快照实现几乎热备的数据备份与恢复
完全备份+二进制日志;
注:事务日志必须跟数据文件在同一个LV上;
3.3创建lvm Lvm的创建这里就不多说了,想了解话点击https://www.jb51.net/LINUXjishu/105937.html
3.4 修改mysql主配置文件存放目录内的文件的权限与属主属组,并初始化mysql
复制代码代码如下:
[root@www ~]# mkdir /mydata/data //创建数据目录
[root@www ~]# chown mysql:mysql /mydata/data //改属组属主
[root@www ~]#
[root@www ~]# cd /usr/local/mysql/ //必须站在此目录下
[root@www mysql]# scripts/mysql_install_db --user=mysql --datadir=/mydata/data //初始化mysql
3.5修改配置文件:
复制代码代码如下:
vim /etc/my.cof
datadir=/mydata/data 添加数据目录
sync_binlog = 1 开启此功能
3.6 启动服务
复制代码代码如下:
[root@www mysql]# service mysqld start
mysql& set session sql_log_bin=0; 关闭二进制日志
mysql& source /backup/all_db_.sql 读取备份文件
3.7回到mysql服务器:
复制代码代码如下:
mysql& FLUSH TABLES WITH READ LOCK; 请求读锁
注:不要退出,另起一个终端:
mysql& SHOW MASTER STATUS; 查看二进制文件的位置
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
mysql& FLUSH LOGS; 建议滚动下日志。这样备份日志的时候就会很方便了
3.8导出二进制文件,创建个目录单独存放
复制代码代码如下:
[root@www ~]# mkdir /backup/limian
[root@www ~]# mysql -e '' & /backup/limian/binlog.txt
[root@www ~]#
3.9为数据所在的卷创建快照:
复制代码代码如下: [root@www ~]# lreate -L 100M -s -p r -n mysql_snap /dev/myvg/mydata
回到服务器端,释放读锁
复制代码代码如下:
mysql& UNLOCK TABLES;
[root@www ~]# mount /dev/myvg/mysql_snap /mnt/data
[root@www data]# cp * /backup/limian/
[root@www data]#lvremove /dev/myvg/mylv_snap
3.10更新数据库的数据,并删除数据目录先的数据文件,模拟数据库损坏
复制代码代码如下:
mysql& create table limiantb (id int,name CHAR(10));
mysql& insert into limiantb values (1,'tom');
[root@www data]# mysqlbinlog --start-position=187 mysql-bin.000003 & /backup/limian/binlog.sql
[root@www backup]# cd /mydata/data/
[root@www data]# rm -rf *
[root@www ~]# cp -a /backup/limian/* /mydata/data/
[root@www data]# chown mysql:mysql *
复制代码代码如下:
[root@www data]# service mysqld start
[root@www data]# mysql 登陆测试
mysql& SHOW DATABASES;
mysql& SET sql_log_bin=0
mysql& source/backup/limian/binlog. #二进制恢复
mysql& SHOW TABLES; #查看恢复结果
mysql& SET sql_log_bin=1; #开启二进制日志
注:此方式实现了接近于热备的方式备份数据文件,而且数据文件放在lvm中可以根据数据的大小灵活改变lvm的大小,备份的方式也很简单。
4、基于Xtrabackup做备份恢复(推荐)
支持InnoDB的物理热备份,支持完全备份,增量备份,而且速度非常快,而且支持InnoDB引擎的数据在不同数据库迁移
为了让xtrabackup支持更多的功能扩展,配置InnoDB每表一个文件的功能
在my.cnf的mysqld中加入此项: innodb_file_per_table=1
此项不启用将不支持备份单独的表
但如果之前没有启用这个选项,要实现单表一文件的话,可以用mysqldump导出数据,然后启用该选项,恢复回去后就是单表一文件了
官方站点:www.percona.com
1、快速可靠的进行完全备份
2、在备份的过程中不会影响到事务
3、支持数据流、网络传输、压缩,所以它可以有效的节约磁盘资源和网络带宽。
4、可以自动备份校验数据的可用性。
安装Xtrabackup
复制代码代码如下:
[root@www ~]# rpm -ivh percona-xtrabackup-2.1.4-656.rhel6.i686.rpm
其最新版的软件可从 https://www.percona.com/software/percona-xtrabackup/ 获得
注意:在备份数据库的时候,我们应该具有权限,但需要注意的是应该给备份数据库时的用户最小的权限,以保证安全性,
应该确定采用的是单表一个表空间,否则不支持单表的备份与恢复。
在配置文件里边的mysqld段加上
innodb_file_per_table = 1
4.2备份策略
完全备份+增量备份+二进制日志
4.3准备个目录用于存放备份数据
复制代码代码如下:
[root@www ~]# makdir /innobackup
4.4做完全备份:
复制代码代码如下:
[root@www ~]# innobackupex --user=root --password=mypass /innobackup/
1、只要在最后一行显示 innobackupex: completed OK!,就说明你的备份是正确的。
2、另外要注意的是每次备份之后,会自动在数据目录下创建一个以当前时间点命名的目录用于存放备份的数据,那我们去看看都有什么
[root@www _11-03-04]# ls
backup-my.cnf ibdata1 performance_schema xtrabackup_binary xtrabackup_checkpoints
hellodb mysql test xtrabackup_binlog_info xtrabackup_logfile
[root@www _11-03-04]#
xtrabackup_checkpoints :备份类型、备份状态和LSN(日志序列号)范围信息;
xtrabackup_binlog_info :mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置。
xtrabackup_logfile :非文本文件,xtrabackup自己的日志文件
xtrabackup_binlog_pos_innodb :二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。
backup-my.cnf :备份时数据文件中关于mysqld的配置
4.5回到mysql服务器端对数据进行更新操作
复制代码代码如下:
mysql& delete from students where StuID&=24;
4.6增量备份
复制代码代码如下:
innobackupex --user=root --password=mypass --incremental /innobackup/--incremental-basedir=/innobackup/_11-03-04/
--incremental 指定备份类型
--incremental-basedir= 指定这次增量备份是基于哪一次备份的,这里是完全备份文件,这样可以把增量备份的数据合并到完全备份中去
4.7第二次增量
先去修改数据
复制代码代码如下:
mysql& insert into students (Name,Age,Gender,ClassID,TeacherID) values ('tom',33,'M',2,4);
innobackupex --user=root --password=mypass --incremental /innobackup/ --incremental-basedir=/innobackup/_11-37-01/
这里只须要把最后的目录改为第一次增量备份的数据目录即可
4.8最后一次对数据更改但是没做增量备份
复制代码代码如下: mysql& delete from coc where id=14;
4.9把二进制日志文件备份出来,(因为最后一次修改,没做增量备份,要依赖二进制日志做时间点恢复)
复制代码代码如下: [root@www data]# cp mysql-bin.000003 /tmp/
4.10模拟数据库崩溃
复制代码代码如下:
[root@www data]# service mysqld stop
[root@www data]# rm -rf *
恢复前准备
4.11对完全备份做数据同步
复制代码代码如下: [root@www ~]# innobackupex --apply-log --redo-only /innobackup/_11-03-04/
4.12对第一次增量做数据同步
复制代码代码如下:
innobackupex --apply-log --redo-only /innobackup/_11-03-04/ --incremental-basedir=/innobackup/_11-37-01/
4.13对第二次增量做数据同步
复制代码代码如下:
innobackupex --apply-log --redo-only /innobackup/_11-03-04/ --incremental-basedir=/innobackup/_11-45-53/
--apply-log 的意义在于把备份时没commit的事务撤销,已经commit的但还在事务日志中的应用到数据库
对于xtrabackup来讲,它是基于事务日志和数据文件备份的,备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据库文件中的事务,还应该对其做预处理,把已提交的事务同步到数据文件,未提交的事务要回滚。因此其备份的数据库,不能立即拿来恢复。
预处理的过程:
首先对完全备份文件只把已提交的事务同步至数据文件,要注意的是有增量的时候,不能对事务做数据回滚,不然你的增量备份就没有效果了。
然后把第一次的增量备份合并到完全备份文件内,
以此类推,把后几次的增量都合并到前一次合并之后的文件中,这样的话,我们只要拿着完全备份+二进制日志,就可以做时间点恢复。
4.14数据恢复
复制代码代码如下:
[root@www ~]# service mysqld stop
[root@www data]# rm -rf * 模拟数据库崩溃
[root@www ~]# innobackupex --copy-back /innobackup/_11-03-04/
--copy-back数据库恢复,后面跟上备份目录的位置
4.15检测:
复制代码代码如下:
[root@www ~]# cd /mydata/data/
[root@www data]# chown mysql:mysql *
[root@www data]#service mysqld start
检测结果数据正常。
目前流行几种备份方式:
一、逻辑备份:使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。
优点:最大好处是能够与正在运行的mysql自动协同工作,
在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。可能会阻止修改操作。sql文件通用方便移植。
缺点:备份的速度比较慢。如果是数据量很多的时候。就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据)。那么服务就会影响的。
备注:所谓的与mysql服务器能够自动协同工作,实际上是指加参数来控制mysql服务器,比如锁定所有表只能进行读,不能进行写操作。
--lock-all-tables
二、物理备份:直接拷贝mysql的数据目录。缺点,你不能去操作正在运行的mysql服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。
直接拷贝只适用于myisam类型的表。这种类型的表是与机器独立的。但实际情况是,你设计数据库的时候不可能全部使用myisam类型表。你也不可能:因为myisam类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。
更多的情况是,你会根据业务特点(比如你需要支持事务机制就必须使用innodb),查询速度和服务性能来选择表类型的。
必须保证表不被使用中。
如果服务器在你则正在拷贝一个表时改变它,拷贝就失去意义。
如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。
保证你的拷贝完整性的最好方法是:关闭服务器,拷贝文件,然后重启服务器。
或者是,要锁定对应的表(对前端用户造成访问问题)。
解释直接拷贝文件,为什么不具备可移植性?
Mysqldump 产生可移植到其他机器、甚至具有不同硬件结构的机器上的文本文件。直接拷贝文件不能够移植到其他机器上,除非要拷贝的表使用MyISAM 存储格式。ISAM 表只能在具有相同硬件结构的机器之间进行拷贝。例如,将文件从S PARC 的Solaris 机器拷贝到Intel 的Solaris 机器(或者相反)是行不通的。由MySQL3.23 引进的MyISAM 表存储格式可以解决这个问题,因为该格式与机器独立。因此,如果以下两个条件都满足的话,直接拷贝文件可以移植到具有不同硬件结构的机器上:即另一台机器上也必须运行MySQL3.23 以上的版本,并且文件必须表示成MyISAM 表,而不是ISAM 表。
三、双机热备份:my没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制(也就是双机热备)。
优点:适合数据量大的时候。现在明白了。大的互联网公司对于mysql数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。
主从复制经常遇到的问题就是,如何保证数据不堵塞,不延迟。这个问题还是可以容忍的,有一些方案可以改善。毕竟有得有失的。这已经是很省心省力的方式了。
================================================
我目前应该使用什么样的备份策略的权衡:
物理备份,恢复快,当然最好是存储在一个机器上。我现在是用物理备份还是逻辑备份为好呢?
考虑到以后会迁移平台。为了保证通用性。恢复速度1分钟左右的差距我是可以容忍的。所以我为了跨平台,我更加愿意使用逻辑备份。存储sql文件形式。
双热机备份方式,目前硬件没有多个。技术人员有限,需要人力去维护,比较麻烦。所以排除在外。
四、方案:
1、总体策略:写个定时执行任务。定时在晚上或凌晨自动备份(考虑数据库服务器在运行中不能停机)
代码中做成备份成功后,把以前的删掉。避免很多数据占据磁盘。
2、考虑到初期数据量这么小。使用mysqldump进行备份吧。设置在凌晨几点(4-6点这个时候基本上没什么人访问)的时候自动备份。
3、使用逻辑备份方式:恢复速度1分钟左右的差距我是可以容忍的。所以我为了跨平台,我更加愿意使用逻辑备份。存储sql文件形式。
4、每天都进行备份。由于是在凌晨的时候mysqldump去锁定,访问数据库服务器。对服务器几乎没什么影响。所以每天都可以备份。每天都一个sql文件。那么将会很多文件。
所以,每次备份成功后。删除以前的文件。保留最近一个星期的备份sql文件。
备份工具的路径:/usr/bin/mysqldump
备份数据保存路径:/data/backdata/
五、备份脚本的编写
1、在shell脚本中调用mysqldump生成备份文件(这个工具可以生成sql文件到磁盘上去);
2、为了方便以后查找。每次备份的记录记录成日志形式。几点进行了备份操作,生成了什么文件名称。这样可以方便以后查阅哪天是否没有成功备份删除的文件作为日志信息也记录下来。
3、让linux下的crontab进程调用脚本执行。
命令:crontab -e
打开的文件中加入代码:0 05 * * * 脚本的路径/mysqlback.sh
mysqlback.sh的内容:
# /bin/bash
DB_NAME=&****&
DB_USER=&****&
DB_PASS=&****&
BIN_DIR=&/usr/bin&
BACK_DIR=&/data/backdata&
DATE=&mysql-`date +'%Y%m%d-%H:%M:%S'`&
LogFile=&$BACK_DIR&/dbbakup.log #日志记录保存的目录
BackNewFile=$DATE.sql
$BIN_DIR/mysqldump --opt --force -u$DB_USER -p$DB_PASS $DB_NAME & $BACK_DIR/$DATE.sql
echo ----------&$(date +&%y-%m-%d %H:%M:%S&)&------------ && $LogFile
echo createFile:&$BackNewFile& && $LogFile
#find &/data/backdata/& -cmin +1 -type f -name &*.sql& -print & deleted.txt
find &/data/backdata/& -ctime +7 -type f -name &*.sql& -print & deleted.txt
echo -e &delete files:\n& && $LogFile
#循环删除匹配到的文件
cat deleted.txt | while read LINE
rm -rf $LINE
echo $LINE&& $LogFile
echo &---------------------------------------------------------------& && $LogFile
【信息仅供参考,具体以企业或者个人使用的业务场景为准】
针对普通用户的可视化的备份方法:https://jingyan.baidu.com/article/ee7ebc81a8957.html
工具很多例如navicat、phpmyadmin和SyncNavigator等
专业用户为MySQL选择合适的备份方式 :https://dev.yesky.com/281/.shtml
两种MySQL数据库备份与恢复方法-搜狐: https://mt.sohu.com/4209496.shtml
Centos下mysql常用的三种备份方法: https://www.centoscn.com/CentOS/Intermediate/60.html
MySQL数据库导出(备份方法完全命令) - MySQL教程 https://www.yiibai.com/mysql/mysql_database_export.html

我要回帖

更多关于 ibm双机热备软件 的文章

 

随机推荐