MYSQLV1

【MySQL学生手册】数据恢复

本文地址:http://t.dbdao.com/archives/mysql-data-recovery.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

11.8 数据恢复

进行数据恢复操作的前提是你需要一份备份,作为恢复所需的一部分。它可以是你数据库某个时间点所做的snapshot快照(当进行备份时)。不过,对于一个活动的服务端,数据会在最近的备份之后就会发生改变。因此恢复操作所需的另一部分材料则是服务端之后所做的数据变更记录 —— 也就是,binary log。因此一个恢复操作涉及到使用备份来恢复数据库并且之后重新执行在binary log中所包含的备份之后的数据修改操作。

 

通常恢复操作有以下步骤:

  1. 首先对数据存放目录进行拷贝,这是为了防止在恢复时出错而以防万一。
  2. 使用备份文件恢复数据库。如果你已经制作有一个二进制备份,那么这个步骤涉及到关闭服务端并使用这些备份来替换丢失或损坏的文件。
  3. 重新执行在备份后记录在binary log中的数据修改操作。

 

11.8.1 导入mysqldump输出

可以使用mysqldump工具来导出数据并生成SQL格式的dump文件,之后通过mysql客户端工具来执行此文件进行导入操作。例如,你可以使用如下语句来生成一份world数据库下Country表的dump文件:

之后的数据库导入,则使用mysql:

 

当mysqldump的输出文件中没有指定数据库时,你在使用mysql客户端工具命令时就有必要指定到某个需要操作的库。如果在mysqldump执行中带有 –database 或 –all-databases项时,所生成的dump文件则已包含有相应的 USE db_name语句。

 

mysqldump在使用时不仅仅可用于恢复表和数据库,同时和mysql一起使用也可起到类似”拷贝”的用途。mysql可以直接从管道支进行读取,因此两个命令可以组合成一条命令来将库中的表拷贝到另一个库中。例如,将world数据库中Country表拷贝到test库中,使用以下命令:

管道技术也可以将数据库或表通过网络拷贝到另一个远端库中。如,远端主机为other.host.com:

如果dump文件中包含有很长的INSERT语句,那么这可能会超出默认到通信缓冲(communication buffer: 1M)。你可以对mysqldump和mysql通过使用 --max-allowed-packet项来增大缓冲大小。这个命令项可以设置一个单位为byte的值或者值后加上K,M或G来指明大小。例如,--max-allowed-packet=32M定义了大小为32MB。服务端也需要在运行时使用 --max-allowed-packet值来增大其自身的通信缓冲,使其足够大。

当你使用mysqldump时使用了 --tab项,那么它会生成一个以tab制表符分隔的数据文件。对于这种dump文件,重新导入时则需要注意使用相应的方法。假设你的dump文件对应导出表world.City使用/tmp目录在作为输出目录:

输出将分两部分,一部分为一个包含有City表CREATE TABLE语句的City.sql文件,另一部分为一个City.txt文件包含了相应的表数据。当使用这些文件进行表导入时,首先切换当前路径到导出的目录,然后使用mysql来处理.sql文件,之后只用mysqlimport来导入.txt中的表数据。

如果你在使用 --tab项时还结合其它格式控制项如 --fields-terminated-by--fields-enclosed-by一起使用,那么在使用mysqlimport进行导入时,就需要使用对应相同的格式控制项来使得命令程序知道如何翻译数据文件以进行导入。【dbdao.com 数据岛】

(更多…)

Read More

MYSQLV1

【MySQL学生手册】更多备份相关

本文地址:http://t.dbdao.com/archives/mysql-more-bk-related.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

11.5 备份日志和状态文件

除了备份数据库之外,你还应该备份以下文件:

  • 你的二进制日志文件。如果你不得不进行数据库恢复的话,binary log备份存储了你在备份之后的更新。
  • 由服务端所使用的配置项文件(cnf或my.ini文件),这些文件包含了在数据库发生奔溃后恢复所需的的配置信息。
  • Replication从库端(Slave)所建立的一个info文件,这个文件包含有所需连接的主库信息。以及relay-log.info文件,这个文件记录了当前处理relay日志的进度情况。
  • Replication从库在处理LOAD DATA INFILE语句时会建立数据临时文件。这些文件被放置在由slave_load_tmpdir系统变量所设置的目录位置下,此变量可以在服务端启动时通过 –slave-load-tmpdir项进行设置。当slave_load_tmpdir未被设置,那么文件就会被存放在操作系统变量tmpdir都指定的位置。其处理的文件会以SQL_LOAD- 打头。

 

为了备份以上这些文件,你可以使用一般的文件系统操作。静态文件如配置文件(option file)不需要特别的注意即可进行备份。动态文件如服务端正在运行且改变的日志文件,则需要停止服务端,然后进行备份。【dbdao.com 数据岛】

(更多…)

Read More

MYSQLV1

【MySQL学生手册】建立文本备份

本文地址:http://t.dbdao.com/archives/mysql-generate-text-backup.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

11.4 建立文本备份

11.4.1 通过SQL建立文件备份

SELECT命令可以和INTO OUTFILE语法一起使用来将返回结果直接写入文件中。在使用中,需要将INTO OUTFILE语法放在FROM语法之前。例如,将Country表中数据写入Country.txt文件中,执行以下语句:

其中文件名指定了你希望写入的位置,这里也可以写路径,如果没有写明路径,则是指当前会话登陆时所在位置下。

SELECT … INTO OUTFILE 使用时有以下特点:

  • 此语句可被用于本地或远程服务端。由于是服务端本身来写文件,因此生成的结果文件总是被建立在服务端。
  • 需要输出文件不能已经存在。
  • 语句可用于任何存储引擎。
  • 语句要求有FILE权限。
  • 输出格式可以通过使用语句项,定义其指定列和行分隔符,引用符和逃逸符来进行控制。

使用INTO OUTFILE可以在以下几个方面改变SELECT语句的操作:

  • 文件被写于服务端,而非通过网路将文件发送至客户端(文件名不能已经存在)。
  • 服务端会在其主机上写一个新文件(执行语句需要登录服务端并使用具有FILE权限的账号)
  • 被建立的文件具有文件系统访问权限,并为MySQL服务端所有,不过对所有用户开放可读。
  • 文件的包含的数据按查询语句返回结果中每条记录一行(默认,列值之间以tab制表符进行分隔,每行则在出现新记录时终止)

你可以像CSV格式一样建立以逗号分隔值,使用双引号括起值,并对行以回车换行符(Carriage Return:CR)结尾的格式文件。以这种格式来输出结果信息的话,可以使用以下SELECT … INTO OUTFILE语句:

(更多…)

Read More

MYSQLV1

【MySQL学生手册】建立binary备份

本文地址:http://t.dbdao.com/archives/mysql-generate-binary-bk.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

11.3.1 建立MyISAMBinary备份

为了对MyISAM表建立一份binary备份,可以拷贝对应表的.frm,.MYD和.MYI文件。当你这么做时,必须确保这些表在被拷贝时没有在被其它程序(包括服务端)所使用。如果你在拷贝表前就关停了服务端,那就没什么问题了。如果拷贝的时候服务端还在运行,那就需要使用适当的锁来避免服务端对这些表的访问。例如,拷贝world数据库中的Country表前,进行锁表并将有待永久保存的变更刷出内存操作:

然后(在表被锁住的情况下)使用操作系统文件拷贝命令将表文件拷贝出来。

 

以MyISAM数据库表world.Country拷贝举例(这里假设Country表为MyISAM引擎表):

在拷贝操作完成后,释放表锁:

 

之前的方法可以用于Unix/Linux系统上的数据库文件备份。在Windows上,被服务端锁住的表文件则由于文件锁原因而不能被拷贝备份。在这样情况下,你就必须在拷贝表文件前关闭服务端。

 

另一种MyISAM二进制备份方式是使用mysqlhotcopy脚本工具,它可以帮你锁表并拷贝文件。【dbdao.com 数据岛】

(更多…)

Read More

APOUC 2016 上海 – 亚太用户组高峰会议小记

刚回到家,打开邮箱,就看见APOUC发来的会后反馈邮件,除了头疼以外,还不免有些脸红惭愧。(真不知道怎么评分啊~~~)

老汪本人由于多方面原因无奈未能准时到场,感冒导致状态不佳是其一,这更是时常导致会议时神游物外。除了代表SHOUG(上海Oracle用户组)进行了4 min pitch的发言,之后更多地是积极参与到和不同用户组代表以及Oracle技术大咖们的吹牛打P中去了。

是否让SHOUG的成员们有些小失望呢?虽说Oracle用户组高峰会上的主题内容仅能说出个大概,不过如果大家真的感兴趣的话,那么可以也去翻看下其它用户组代表们的官文,发现会场上直接做现场微报道的还真不少呢。

(更多…)

Read More

MYSQLV1

【MySQL学生手册】binary备份 vs 文本备份

本文地址:http://t.dbdao.com/archives/mysql-binary-vs-text-backup.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

11.2 binary备份 vs 文本备份

当备份数据库时,你有两种备份格式可选:

  • 二进制(binary)备份是一种对数据库中存储的内容文件的拷贝。这种拷贝实际上使得备份文件格式和MySQL在磁盘上存储的数据库文件格式保持了完全一致。因此此类数据库恢复则涉及将这些文件拷贝回它原有的位置。建立binary备份的技术包括使用文件拷贝命令(如cp或tar),mysqlhotcopy以及InnoDB Hot Backup**。
    ** 需要注意的是mysqlhotcopy从MySQL 5.7及其之后就被去除了,相关功能被融合到了其企业版MySQL Enterprise Backup工具mysqlbackup中。而InnoDB Hot Backup原先是商用软件的一部分,在MySQL Enterprise Backup 3.9之后其相应工具也被融合入mysqlbackup中。
  • 文本备份则是将数据库内容导出(dump)至文件文件中。恢复则涉及到通过处理这些文件的内容将数据返回到数据库中。生成文本备份的技术包括了使用SELECT … INTO OUTFILE 的SQL语句,mysqldump工具等。

 

这两种备份格式有其不同的优缺点。通常选择使用何种备份的考虑因素是对速度和便携性之间的权衡。

 

由于二进制备份仅是对文件进行拷贝操作,它不需要了解文件中的内部结构,因此在速度上这种备份速度会更快。然而,如果需要将这种备份传输到另一个使用不同架构的机器上,那么文件就需要更多考虑二进制的便携性。意思就是这些文件需要平台无关化才行,这样你才能直接拷贝它们,从一个MySQL服务端传输到另一个处于不同服务器上的数据库中,而且这第二个服务端需要能够没有任何问题地访问这些文件的内容。使用二进制备份方法,你还需要确保在进行备份的时候,服务端不会对在被拷贝的文件进行修改。【dbdao.com 数据岛】

(更多…)

Read More

MYSQLV1

【MySQL学生手册】备份和恢复

本文地址:http://t.dbdao.com/archives/mysql-backup_recovery_knowledge.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

第11章 备份和恢复

 

章节概述

本章介绍了MySQL数据备份和恢复。你将学习并了解:

  • 备份的类型
  • 进行二进制备份和文本备份
  • 备份中日志和状态文件的角色作用
  • 使用一个复制从库(replication slave)来进行备份
  • 进行数据恢复
  • 倒入数据文件

 

11.1 备份概述

MySQL数据库备份一般用于应对可能的系统崩溃或硬件故障而导致的数据损失或讹误问题。备份同样对于用户误操作,如误删数据库或表等恢复有帮助。也有时候备份被用于将数据库拷贝或移动到另一个服务器中,如当你需要进行MySQL安装迁移,或建立一个复制从库时。

 

备份可以是对数据文件的直接拷贝,或是通过设计程序来完成同样的备份目的。这些程序包括mysqldump,mysqlhotcopy和InnoDB Hot Backup。

 

对于数据库运维,备份总是必要的,不过备份仅仅是在数据受损后所需进行数据恢复的组件之一。其它的你还需要二进制日志(binary log)文件,它包含了数据修改的记录。进行数据库恢复时,你使用备份将数据库恢复到备份时的状态,然后重新执行binary log中包含的语句来应用备份后的数据修改。

 

这里列出了在进行备份时需要记住的一些原则:

  • 制作一般备份。
  • 启用binary log,这样你在进行备份后,对数据修改的记录将会被保存在日志文件中。
  • 在备份后,使用flush命令,使得服务端从一个新的binary log文件开始,这个日志文件对应了备份的时间(也就是说,将此备份后的日志看作是一个“检查点”,从这个时间后开始的日志记录是备份之后新的数据修改)。
  • 将数据文件目录和你的备份放置在不同的物理设备中,这样一旦某个设备出现故障,不会造成同时被影响的后果。
  • 将你的备份存在在通常合理的文件系统位置中,这样一旦需要就可以从这些位置上找到备份进行恢复。【dbdao.com 数据岛】

(更多…)

Read More

IMG – 2016年 MySQL技术嘉年华会即将召开

毫无疑问,MySQL是最为流行的开源数据库系统,已经广泛的应用于各大互联网公司。目前,大量的传统金融客户也已经逐渐在其生产环境使用MySQL数据库,在互联网+的时代MySQL扮演着举足轻重的角色。本次大会将为MySQL技术爱好者带来最具分享意义的主题,包括MySQL数据库新特性、高可用容灾安全、数据库云架构、行业客户最佳应用实践。本次数据库会议邀请国内顶级MySQL数据库专家分享,旨在打造成一个最有态度的MySQL数据库大会。

SHOUG(上海Oracle用户组)和IMG(Inside MySQL Group)合作来推广本次会议,希望用户组之间的合作能够给大家更多学习的机会。

IMG 2016 MySQL技术嘉年华官方网址:http://www.innomysql.net/img2016/

通过dbDao数据岛平台(为SHOUG提供会议门票代理)直接购买,可享受299元的底价(官方价格现在已经上调至399元了!!)。有志于深度了解MySQL高级议题的同学赶快来报名吧~~
SHOUG用户组渠道链接:http://www.dbdao.com/xianxiake/mysql/8

by dbDao.com 数据岛

 

Read More

MYSQLV1

【MySQL学生手册】关于InnoDB及MyISAM表的恢复

本文地址:http://t.dbdao.com/archives/mysql-innodb-myisam-recoveryinfo.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

10.4 修复InnoDB表

在之前的章节中,我们已经了解了可以通过执行CHECK TABLE语句或使用客户端工具来发出此语句,来对InnoDB表进行检查。不过,如果InnoDB表存在问题,那么你并不能使用REPAIR TABLE来对表进行维修,因为这个命令仅对MyISAM可用。

 

如果检查不InnoDB表有问题,那么你应该使用mysqldump来将表恢复到一个一致性状态,即删除表,并通过dump文件进行重建:

 

在遇到MySQL服务端奔溃或数据库运行的主机奔溃后,一些InnoDB表可能会需要进行修复。正常情况下,简单的进行服务端重启就行了,因为InnoDB存储引擎在启动时会进行自动恢复作业。少数情况下,可能由于InnoDB自动恢复失败而导致服务端无法启动。如果碰到这样的情况,请按以下步骤进行操作:

  • 使用带有 --innodb-force-recovery(值范围为1~6)的命令项来重启服务端。这个值用于提高警告屏蔽级别以避免启动崩溃,对于被恢复的表,允许更高不一致容忍度。较好是值使用从4开始。
  • 当你启动服务端并使用 --innodb-force-recovery设为一个非0值,InnoDB会将表空间作为只读处理(从7.3版本开始,值为4或更大时,将使得InnoDB置于只读模式)。之后,你应该使用mysqldump工具来倒出InnoDB表数据,并在导出后,在此命令项有效的情况下将InnoDB表删除。然后在不使用 --innodb-force-recovery项的情况下重启服务端。当服务端起来后,再从导出的dump文件来恢复InnoDB表。
  • 如果之前的步骤都失败了,那就有必要从之前的备份来恢复InnoDB表了。【dbdao.com 数据岛】

(更多…)

Read More

MYSQLV1

【MySQL学生手册】表维护中的客户端工具程序

本文地址:http://t.dbdao.com/archives/mysql-maintenance-tools.html

dbDao 百度贴吧:http://tieba.baidu.com/dbdao

Mysql技术学习QQ群:146959374

 

10.3 表维护中的客户端工具程序

之前讨论的表维护SQL语句可以在mysql客户端工具执行,也可以通过其它应用发送给服务端来执行。通过使用这些语句,你可以写一些自己的管理应用程序来进行表的检查和修理操作。

 

一些MySQL客户端程序作为前端可发出表维护命令:

  • MySQL Workbench提供了执行语句的编辑窗口可用于进行表检查,修理和优化操作。当你执行这些操作时,语句会被发至服务端。
  • mysqlcheck可用于检查,维修,分析和优化表。此命令行工具按所提供的命令项来决定发送哪些相适合的SQL语句到MySQL服务端以进行所需操作。

对于MyISAM表,使用myisamchk工具也能进行表维护。然而,它不同于MySQL Workbench和mysqlcheck需要将SQL语句发送到服务端,myisamchk可直接读取并修改表文件。也因为此,请保证在使用myisamchk的同时服务端不会去访问这些表。

 

10.3.1 mysqlcheck客户端程序

mysqlcheck可对表进行的操作有检查,修理,分析和优化。对于MyISAM表,此程序工具可执行所有这些操作,而对于InnoDB表,则只能执行一部分操作。它提供了一种命令行接口方式来执行各种SQL语句(如CHECK TABLE和REPAIR TABLE)以告知服务端进行何种表维护。

 

mysqlcheck在某些情况下比起直接执行SQL语句,可以使得操作变得更容易。例如,如果你指定一个数据库,它包含了需要执行语句来处理的所有表。使用mysqlcheck你就不需要在进行操作时显式地指定每个表,而且,mysqlcheck是一个命令行程序,它可以在工作中被用于周期性计划维护作业。【dbdao.com 数据岛】

(更多…)

Read More