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

本文地址:https://www.askmac.cn/archives/mysql-backup_recovery_knowledge.html

 

 

第11章 备份和恢复

 

章节概述

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

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

 

11.1 备份概述

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

 

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

 

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

 

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

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

[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/

 

 

 

 

 

 

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

本文地址:https://www.askmac.cn/archives/mysql-innodb-myisam-recoveryinfo.html

 

10.4 修复InnoDB表

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

 

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

 

 

shell> mysqldump db_name table_name > dump_file
shell> mysql db_name < dump_file

 

在遇到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表了。

[Read more…]

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

本文地址:https://www.askmac.cn/archives/mysql-maintenance-tools.html

 

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是一个命令行程序,它可以在工作中被用于周期性计划维护作业。

[Read more…]

MySQL学生手册汇总

【MySQL学生手册】MySQL架构概览 – MySQL架构 https://www.askmac.cn/archives/ch2-mysql%e6%9e%b6%e6%9e%84.html
【MySQL学生手册】Mysql 客户端/服务器(C/S)架构 https://www.askmac.cn/archives/mysql-%e5%ae%a2%e6%88%b7%e7%ab%af%e6%9c%8d%e5%8a%a1%e5%99%a8cs%e6%9e%b6%e6%9e%84.html
【MySQL学生手册】MySQL的磁盘空间使用 https://www.askmac.cn/archives/mysql%e7%9a%84%e7%a3%81%e7%9b%98%e7%a9%ba%e9%97%b4%e4%bd%bf%e7%94%a8.html
【MySQL学生手册】MySQL的内存使用 https://www.askmac.cn/archives/mysql%e7%9a%84%e5%86%85%e5%ad%98%e4%bd%bf%e7%94%a8.html
【MySQL学生手册】MySQL的发行版本类型 https://www.askmac.cn/archives/mysql%e7%9a%84%e5%8f%91%e8%a1%8c%e7%89%88%e6%9c%ac%e7%b1%bb%e5%9e%8b.html
【MySQL学生手册】MySQL的安装 https://www.askmac.cn/archives/mysql%e7%9a%84%e5%ae%89%e8%a3%85.html
【MySQL学生手册】MySQL在Windows上的启动及停止 https://www.askmac.cn/archives/mysql%e5%9c%a8windows%e4%b8%8a%e7%9a%84%e5%90%af%e5%8a%a8%e5%8f%8a%e5%81%9c%e6%ad%a2.html
【MySQL学生手册】MySQL在Unix上的启动及停止 https://www.askmac.cn/archives/424.html
【MySQL学生手册】MySQL的配置 https://www.askmac.cn/archives/mysql-configuration.html
【MySQL学生手册】MySQL的SQL模式 https://www.askmac.cn/archives/mysql-sql-mode.html
【MySQL学生手册】MySQL日志和状态文件 https://www.askmac.cn/archives/mysql-log-status-file.html
【MySQL学生手册】MySQL二进制日志(Binary Log) https://www.askmac.cn/archives/mysql-binary-log.html
【MySQL学生手册】MySQL的升级 https://www.askmac.cn/archives/mysql-upgrade.html
【MySQL学生手册】MySQL第三章测试 https://www.askmac.cn/archives/mysql-3rd-chapter-test.html
【MySQL学生手册】MySQL客户端程序的调用 https://www.askmac.cn/archives/mysql-client-involve.html
【MySQL学生手册】mysql客户端程序使用 https://www.askmac.cn/archives/mysql-client-prog-using.html
【MySQL学生手册】mysqladmin、mysqlimport、mysqldump客户端程序 https://www.askmac.cn/archives/mysql-client-tools-desc.html
【MySQL学生手册】MySQL客户端程序的限制 https://www.askmac.cn/archives/mysql-client-tools-limitations.html
【MySQL学生手册】MySQL客户端接口 https://www.askmac.cn/archives/mysql-client-api.html
【MySQL学生手册】MySQL元数据获取 https://www.askmac.cn/archives/mysql-metadata-obtaining.html
【MySQL学生手册】INFORMATION_SCHEMA数据库 https://www.askmac.cn/archives/mysql-information-schema.html
【MySQL学生手册】SHOW和DESCRIBE命令使用 https://www.askmac.cn/archives/mysql-show-describe-cmd.html
【MySQL学生手册】mysqlshow程序 https://www.askmac.cn/archives/mysqlshow-cmd.html
【MySQL学生手册】MySQL的SQL解析器和存储引擎层 https://www.askmac.cn/archives/sql%e8%a7%a3%e6%9e%90%e5%99%a8%e5%92%8c%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e%e5%b1%82.html
【MySQL学生手册】MySQL锁 https://www.askmac.cn/archives/mysql-lock.html
【MySQL学生手册】显式(Explicit)表锁 https://www.askmac.cn/archives/mysql-explicit-lock.html
【MySQL学生手册】协同(Advisory)锁 https://www.askmac.cn/archives/mysql-advisory-lock.html
【MySQL学生手册】事务 https://www.askmac.cn/archives/mysql-transactions.html
【MySQL学生手册】MySQL存储引擎 https://www.askmac.cn/archives/mysql-storage-engines.html
【MySQL学生手册】常用存储引擎 – MyISAM https://www.askmac.cn/archives/mysql-storage-engines-myisam.html
【MySQL学生手册】常用存储引擎 – InnoDB https://www.askmac.cn/archives/mysql-storage-engines-innodb.html
【MySQL学生手册】常用存储引擎 – MEMORY https://www.askmac.cn/archives/%e3%80%90mysql%e5%ad%a6%e7%94%9f%e6%89%8b%e5%86%8c%e3%80%91%e5%b8%b8%e7%94%a8%e5%ad%98%e5%82%a8%e5%bc%95%e6%93%8e-memory.html
【MySQL学生手册】其它存储引擎 https://www.askmac.cn/archives/mysql-other-storage-engines.html
【MySQL学生手册】选择合适的存储引擎 https://www.askmac.cn/archives/mysql-storage-engines-choice.html
【MySQL学生手册】分区(Partition) https://www.askmac.cn/archives/mysql-partition.html
【MySQL学生手册】MySQL表分区类型 https://www.askmac.cn/archives/mysql-partition-type.html
【MySQL学生手册】表维护操作类型 https://www.askmac.cn/archives/mysql-maintenance-type.html

 

 

【MySQL学生手册】表维护操作类型

本文地址:https://www.askmac.cn/archives/mysql-maintenance-type.html

 

第10章 表的维护

 

章节概述

本章介绍如何在MySQL中进行表的维护管理。你会了解:

  • 分辨表维护操作类型
  • 执行表维护SQL语句
  • 使用客户端及工具程序来进行表维护
  • 修理InnoDB表
  • 启用对MyISAM表的自动修复

 

10.1 表维护操作类型

一些表维护操作对于判定并修正数据库中的问题(例如,当一张表由于服务器奔溃而导致损坏后)或帮助MySQL优化表查询时非常有用。MySQL(根据存储引擎)可允许你执行几种类型的维护操作:

存储引擎名 MyISAM InnoDB
CHECK TABLE 完整检查更新索引统计信息 完成检查
REPAIR TABLE 修理讹误表 N/A
ANALYZE TABLE 更新索引统计信息 更新索引统计信息
OPTIMIZE TABLE 回收被浪费的空间表碎片整理索引页排序

更新索引统计信息

表重建(MySQL 5.7.4以后部分使用了online DDL的机制避免了表拷贝)

[Read more…]

【MySQL学生手册】MySQL表分区类型

本文地址:https://www.askmac.cn/archives/mysql-partition-type.html

 

9.2 分区类型

  • RANGE分区:基于列值所处在的给定范围来对行进行分区。
  • LIST分区:和RANGE分区类似,不过区别是基于一组离散值集合中的值匹配来进行分区。
  • HASH分区:分区的选择基于要插入行的列值进行用户定义功能函数计算后的返回值。其功能函数可以包括任意MySQL有效表达式并返回一个非负的整数值。
  • KEY分区:和Hash分区类似,不过区别是使用MySQL自有的哈希功能来对一列或多列进行哈希计算,其中的列值也可以包含除整数值之外的值,而MySQL并不关心列值的具体数据类型,在哈希计算后,都会返回一个整数值。

 

通常使用数据库分区时会按日期时间来都对数据进行分割。一些数据库系统支持显式时间日期分区语法,不过MySQL不支持。不过在MySQL中,想要基于DATE,TIME,或DATETIME列来建立分区,或基于使用这些列进行计算的表达式来进行分区都并不困难。

 

当通过KEY或LINEAR KEY建立分区时,你可以在不对DATE,TIME或DATETIME列进行任何值修改的情况下,直接使用它们来进行分区。例如,以下表分区语句在MySQL中是可行的:

CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY KEY(joined)
PARTITIONS 6;

[Read more…]

【MySQL学生手册】分区(Partition)

本文地址:https://www.askmac.cn/archives/mysql-partition.html

 

第9章 分区(Partition)

 

章节概述

本章介绍在MySQL中分区的管理。你会了解:

  • 理解分区概念
  • 使用SHOW VARIABLES来确定服务端的分区支持
  • 如何建立一张分区表
  • 描述分区类型

 

9.1 分区概述

SQL标准中并不提供很多关于数据物理存储方面的指导。而SQL语句本身趋向于独立于数据结构或这些模式(schema/database),表,行或列下对应的介质进行运行。但是,大多数高级的数据库管理系统都会有一些方法来判断具体被用于存储的文件系统或硬件下的数据片的物理位置。在MySQL中,InnoDB存储引擎还支持表空间概念。在MySQL服务端,介绍分区之前,你可以配置不同的空物理目录来存储不同的数据库。

Tips:分区是从MySQL 5.1.14-Beta版本开始被引入的功能。

 

分区在此基础上更近一步,允许你在将单个表的各个部分分布在整个文件系统中(只要所设分区文件的大小遵守系统的规则)。实时上,一张表的不同部分可以如各个分割的表存储在不同位置。数据通过用户选择的规则进行的分割(我们称为分区功能),如按量值进行分区,或简单匹配一个值列范围进行分区,或使用内部哈希函数或一个线性函数进行分区等。如何分区由用户按分区类别来确定,其所用的功能匹配可以接受用户提供的表达式值作为参数,表达式可以是一个整型列值,或在对一个或多个列进行处理后来得出的一个整数来作为返回。表达式的值被传给分区功能函数,此函数会返回一个整数值代表了对应数据行应该被存放在哪个分区的分区号。此功能函数必须是非静态值和非随机值。它不能包含任何查询,但可以“虚拟的“使用在MySQL中有效的任意表达式(只要表达式返回的正整数小于最大可能的正整数值MAXVALUE即可)。

 

我们在这里所介绍的分区在概念上指水平分区(horizontal partitioning)– 即,表中的不同行可以在不同的物理分区中。MySQL不支持垂直分区(vertical partitioning),即表中的不同列被分派到不同的物理分区中。到现在为止,MySQL还未有任何计划来引入垂直分区功能。

 

9.1.1 查看分区功能启用状态

在MySQL 5.6版本之前,你可以通过使用以下语句来查看MySQL的分区功能是否已经启用:

mysql> SHOW VARIABLES LIKE '%partition%';

+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| have_partitioning | YES   |
+-------------------+-------+
1 row in set (0.00 sec)

不过从MySQL 5.6开始,have_partitioning环境变量已经被移除,因此你需要使用show plugins来查看partition的启用情况。

如果对应状态显示未被启用的话,则说明当前的MySQL服务端不支持分区功能。

[Read more…]

【MySQL学生手册】选择合适的存储引擎

本文地址:https://www.askmac.cn/archives/mysql-storage-engines-choice.html

 

8.4 选择合适的存储引擎

当建立一张表,你需要首先问一下自己这张表被用于何种类型的查询。然后选择一种存储引擎来适合查询所涉及到的锁级别。MyISAM表级锁对于在进行繁重的查询数据抽取而极少有更新的情况下运行效果好。而如果运行中有大量更新操作的话,InnoDB是更好的选择。InnoDB使用行级锁和多版本控制对于大量数据读取和更新提供了并行性。一个查询可以对某些行进行更新,而同时其它查询则可以对同表中的其它行进行读取和更新。

 

如果你使用MyISAM表,那么使用何种列结构来对处理速度或磁盘使用效率的考量就会变得重要。不同的MyISAM存储格式具有不同的性能特定。其影响你最终是否选择定长或变长列进行字符串数据存储:

  • 为了最佳的速度而使用定长列(CHAR, BINARY)。使用固定长度的列使得MySQL得以以固定长度的行建立表。定长行的优势在于,所有行都按位置存储在表中,而这些行的寻找非常迅速。不利在于定长值总是占据了相同长度空间,即便在值并没有用足此列的真个长度下,因此定长列的存储需要花更多空间。
  • 考虑最佳空间使用而使用变长列(VARCHAR, VARBINARY, TEXT, BLOB)。例如,在VARCHAR列中的值仅会占用必要的存储空间,而平均计算的话,比CHAR列储存空间占用小。不利在于变长列会导致变长行。这些值的存储将不会在表的固定位置上,因此它们不能如定长行一般获取如此迅速。此外变长行的内容甚至可能并不是存放在一个位置上,这也导致了一些处理开销。

 

使用MyISAM表的另一种方式是用来作为压缩的只读表。

对于InnoDB表,使用CHAR列平均上来看会比表VARCHAR使用更多空间。但是InnoDB中两者不会如在MyISAM中具有查询速度差异。这是由于InnoDB引擎在实现上对CHAR和VARCHAR使用了相似方式。事实上,CHAR值的获取可能还慢一些,因为平均上来说,它们需要从磁盘上读取更多信息。

[Read more…]

Mysql数据库管理表的维护

本文地址:https://www.askmac.cn/archives/mysql-table-maintain.html

 

 

一、目标

 

完成本课程后,你应该能够:

  • 认识不同类型的表维护操作
  • 执行维护表的SQL语句
  • 使用客户端和实用程序维护表
  • 根据具体的存储引擎维护表

 

二、实施表的维护

 

  • 表的维护操作对识别和解决数据库问题非常有用,例如:
  • 因服务器崩溃而损坏的表
  • 表上查询处理缓慢
  • 许多工具可以执行表的维护
  • MySQL Workbench(MySQL工作台)
  • MySQL Enterprise Monitor(MySQL企业版监视器)
  • SQL(DML)Maintenance statements(SQL <DML>维护语句)
  • 工具:
  • mysqlcheck
  • Myisamchk
  • Server auto-recovery(服务器自动恢复)

 

三、使用SQL进行表的维护操作

 

  • 有多条SQL语句可以执行表的维护:
  • ANALYZE TABLE : 更新索引的统计信息
  • CHECK TABLE : 检查表的完整性
  • CHECKSUM TABLE : 报告表数据的一致性检测结果
  • REPAIR TABLE : 修复表
  • OPTIMIZE TABLE : 优化表

 

  • 每条语句需要一个或多个表名和可选关键字。

 

  • 一条维护语句和输出的样例:

MYSQL_TABLE_MAIN1

 

备注:

在执行请求的操作之后,服务器返回操作的结果信息到客户端。

结果信息以四列格式显示:

  • Table : 标示执行操作的表
  • Op : 操作的名字(check,repair,analyze,或optimize)
  • Msg_type : 提供一个成功或失败的指示器
  • Msg_text : 提供额外的信息

 

如果想获取关于MySQL表维护的更多信息,可以参照文档:

MySQL Reference Manual

http://dev.mysql.com/doc/mysql/en/table-maintenance-sql.html

[Read more…]

沪ICP备14014813号-2

沪公网安备 31010802001379号