附录一个MySQL 8常见问题

目录

A.1一般为MySQL的常见问题:
A.2 MySQL存储引擎时常见问题:
A.3 MySQL服务器的SQL模式8常见问题:
A.4 MySQL 8常见问题:存储过程和函数
A.5 MySQL 8常见问题:触发
结合MySQL 8常见问题:观点
A.7 MySQL 8常见问题:information_schema
8 MySQL 8常见问题:迁移
MySQL安全8.0出来的常见问题:
A.10 MySQL 8常见问题:MySQL集群
A.11 MySQL 8.0 FAQ:MySQL的中国,日本,和koreancharacter集
a.12 MySQL 5.0 FAQ:连接器和API
a.13 MySQL 8常见问题:复制
a.14 MySQL 8常见问题:MySQL企业线程池
A.15 MySQL为常见问题:InnoDB Change Buffer
8常见问题:“16 MySQL InnoDB表空间加密
A.17 MySQL为常见问题:虚拟化支持

A.1一般为MySQL的常见问题:

a.1.1.哪个版本的MySQL是生产准备(GA)?
a.1.2为什么MySQL版本编号跳过版本6和7,直奔8?
a.1.3MySQL 8子查询可以做吗?
a.1.4.可以执行多个MySQL 8表的插入,更新和删除?
a.1.5.是MySQL 8序列?
a.1.6.是MySQL 8秒有一个now()功能?
a.1.7.是MySQL 8与多核处理器?
a.1.8.为什么我看到多个mysqld过程?
a.1.9.MySQL 8进行酸可以交易吗?

a.1.1.

哪个版本的MySQL是生产准备(GA)?

MySQL 8,5.7,和MySQL 5.6是生产中使用的支持。

MySQL 5.0实现通用性(GA)与MySQL 8.0.11状态,这是用于生产使用2018年4月19日。

MySQL 5.7实现通用性(GA)与MySQL 5.7.9状态,被释放在2015年10月21日生产使用。

MySQL 5.6实现通用性(GA)与MySQL 5.6.10状态,被释放在2013年2月5日生产使用。

MySQL 5.5实现通用性(GA)与MySQL 5.5.8状态,被释放在2010年12月3日生产使用。MySQL 5.5系列不再是当前的,但仍然支持生产。

MySQL 5.1实现通用性(GA)与MySQL 5.1.30状态,这是用于生产使用的2008月14日。MySQL 5.1积极发展已经结束。

MySQL 5实现通用性(GA)与MySQL 5.0.15状态,被释放在2005年10月19日生产使用。MySQL 5积极发展已经结束。

a.1.2

为什么MySQL版本编号跳过版本6和7,直奔8?

由于我们在此引入MySQL版本的许多新的和重要的特点,我们决定开始一个新的系列。作为系列数字6和7已经使用过MySQL,我们去了8。

a.1.3

MySQL 8子查询可以做吗?

是看到13.2.11”查询语法”部分。

a.1.4.

可以执行多个MySQL 8表的插入,更新和删除?

是对于需要执行多表更新的语法,看第13.2.12,“更新语法”;那需要执行多个表中删除,看第13.2.2,删除语法”

一个多表插入可以通过使用一个触发的FOR EACH ROW条款包含多INSERT语句在开始…结束块。看到23.3节,“使用触发器”

a.1.5.

是MySQL 8序列?

不过,MySQL有一个AUTO_INCREMENT系统,这在MySQL软件也可以在多主复制设置手柄插入。与auto_increment_incrementauto_increment_offset系统变量,你可以设定每个服务器生成自动增量值不与其他服务器冲突。这个auto_increment_increment值应大于服务器的数量,每个服务器应该有一个独特的偏移。

a.1.6.

是MySQL 8有NOW()有一秒的功能?

是的,看第11.3.6,“小数秒的时间价值”

a.1.7.

是MySQL 8与多核处理器?

是MySQL是完全多线程,并将充分利用多个CPU,提供操作系统支持。

a.1.8.

为什么我看到多个过程mysqld

当使用Linux线程,你应该看到至少三mysqld运行的进程。这些其实都是线程。对于LinuxThreads经理一个线程,一个线程来处理连接,一个线程来处理报警信号。

a.1.9.

MySQL 8进行酸可以交易吗?

是目前所有的MySQL版本支持交易。这个InnoDB存储引擎提供全酸交易行级锁,多版本,非锁定可重复读取,和所有四个SQL标准的隔离级别。

这个NDB存储引擎支持READ COMMITTED事务隔离级别只

A.2 MySQL存储引擎时常见问题:

a.2.1.我在哪里可以获得完整的MySQL存储引擎文档?
a.2.2.有任何新的MySQL 8的存储引擎呢?
a.2.3.有任何存储引擎在MySQL 8中删除?
a.2.4.我可以阻止一个特定的存储引擎使用?
a.2.5.有专门使用InnoDB存储引擎的优势,而不是一个组合的InnoDB和非InnoDB存储引擎?
a.2.6.ARCHIVE存储引擎唯一的好处是什么?

a.2.1.

我在哪里可以获得完整的MySQL存储引擎文档?

看到16章,选择存储引擎。这一章包含的信息对所有MySQL存储引擎除了InnoDB存储引擎和NDB存储引擎(用于MySQL集群)。InnoDB覆盖在15章,InnoDB存储引擎NDB覆盖在MySQL NDB集群7.5%和NDB集群7.6

a.2.2.

有任何新的MySQL 8的存储引擎呢?

InnoDB是新表的默认存储引擎。看到15.1节,“会”简介详情

a.2.3.

有任何存储引擎在MySQL 8中删除?

这个PARTITION存储引擎插件提供支持的本地分区的分区处理更换。作为这种变化的一部分,服务器可以不再使用- dwith_partition_storage_enginepartition也不再显示在输出SHOW PLUGINS,或显示在INFORMATION_SCHEMA.PLUGINS

为了支持分配给定的表,用于表的存储引擎现在必须提供自己的(本地的分配处理程序)InnoDB在MySQL 5.0包含本地分区处理程序只支持存储引擎。试图创建分区表在MySQL 5.0使用任何其他存储引擎失灵。(TheNDBMySQL集群使用的存储引擎还提供了它自己的分区处理,但目前不支持MySQL 5.0。)

a.2.4.

我可以阻止一个特定的存储引擎使用?

是这个disabled_storage_engines配置选项定义的存储引擎不能用于创建表或表空间。默认情况下,disabled_storage_engines是空的(没有引擎禁用),但它可以被设置为一个以逗号分隔的一个或多个引擎列表。

a.2.5.

有一个优势利用InnoDB存储引擎所独占,而不是一个组合InnoDBInnoDB存储引擎?

是使用InnoDB表完全可以简化备份和恢复操作。MySQL企业备份呢热备份所有表使用InnoDB存储引擎。表格的使用MyISAM或其他非InnoDB存储引擎,它温暖的备份,当数据库继续运行,但这些表不能同时支持修改。看到29.2节,“MySQL企业备份概述”

a.2.6.

这唯一的好处是什么ARCHIVE存储引擎

这个ARCHIVE存储引擎存储大量数据没有指标;它具有占地面积小,并执行选择使用表扫描。看到16.5节,“ARCHIVE存储引擎”,详情

A.3 MySQL服务器的SQL模式8常见问题:

树脂性什么是服务器的SQL模式?
a.3.2.有多少种服务器SQL模式?
a.3.3.怎么判断服务器的SQL模式?
a.3.4.模式是依赖于数据库或连接?
a.3.5.为严格模式规则扩展?
a.3.6.严格模式影响性能吗?
a.3.7.什么是默认的服务器SQL模式时,MySQL 8安装?

树脂性

什么是服务器的SQL模式?

服务器的SQL模式定义的SQL语法MySQL应该支持什么样的数据验证检查应执行。这使得它更容易在不同的环境中使用MySQL,使用MySQL和其他数据库服务器。MySQL服务器应用这些模式分别向不同的客户。有关更多信息,参见第5.1.10,”服务器的SQL模式”

a.3.2.

有多少种服务器SQL模式?

每种模式都可以独立开关。看到第5.1.10,”服务器的SQL模式”,一个完整的可用的模式列表。

a.3.3.

怎么判断服务器的SQL模式?

你可以设置默认的SQL模式(为mysqld启动)与--sql-mode选项。using the statementSET [GLOBAL|SESSION] sql_mode='modes',你可以更改设置在连接,可以在本地的连接,或在全球范围内生效。你可以通过发布一个检索当前模式选择@ @ sql_mode声明

a.3.4.

模式是依赖于数据库或连接?

一种模式是不链接到一个特定的数据库。模式可以设置本地会话(连接),或用于服务器。您可以更改这些设置使用SET [GLOBAL|SESSION] sql_mode='modes'

a.3.5.

为严格模式规则扩展?

当我们提到严格模式我们的意思是一个模式,其中至少一个模式TRADITIONALSTRICT_TRANS_TABLES,或STRICT_ALL_TABLES启用。选项可以组合,所以你可以添加一个模式的限制。看到第5.1.10,”服务器的SQL模式”为更多的信息

a.3.6.

严格模式影响性能吗?

输入数据的一些设置需要更多的时间比如果验证是不是做过密集的验证。而性能的影响不是很大,如果您不需要验证(也许你的应用程序已经处理这一切),然后给你留下MySQL严格模式禁用选项。然而,如果你需要它,严格的模式可以提供这样的验证。

a.3.7.

什么是默认的服务器SQL模式时,MySQL 8安装?

在MySQL 8中默认的SQL模式包括这些模式:ONLY_FULL_GROUP_BYSTRICT_TRANS_TABLESNO_ZERO_IN_DATENO_ZERO_DATEERROR_FOR_DIVISION_BY_ZERO,和NO_ENGINE_SUBSTITUTION

有关所有可用的模式和MYSQL默认行为的信息,参见第5.1.10,”服务器的SQL模式”

A.4 MySQL 8常见问题:存储过程和函数

a.4.1.是MySQL 8支持存储过程和函数?
a.4.2.我在哪里可以找到文件,MySQL的存储过程和函数?
a.4.3有一个论坛的MySQL存储过程?
a.4.4.我在哪里可以找到的ANSI SQL 2003规范的存储过程?
a.4.5.如何管理存储过程呢?
a.4.6.有没有办法看到所有的存储过程和存储在一个给定的数据库的功能?
a.4.7存储过程存储在哪里?
a.4.8.它是可能的组存储过程或存储功能的包吗?
a.4.9.可以存储过程调用另一个存储过程?
a.4.10可以存储过程调用触发器?
a.4.11可以存储过程访问表?
a.4.12存储过程中是否有产生应用程序错误的语句?
a.4.13做存储提供异常处理程序?
a.4.14可以MySQL 8存储过程返回结果集的?
a.4.15是重新编译存储过程支持?
a.4.16有一个MySQL相当于使用mod_plsql作为Apache网关直接与数据库中的存储过程?
a.4.17我可以输入到存储过程传递数组?
a.4.18我可以通过一个指针作为参数的存储过程吗?
a.4.19我可以作为一个输出参数的存储过程返回一个游标?
a.4.20我可以打印一个变量的值在一个存储程序调试的目的?
a.4.21我可以提交或回滚事务在存储过程?
a.4.22复制做MySQL 8的存储过程和函数的工作吗?
a.4.23存储过程和函数的主服务器上复制一个奴隶创造的吗?
a.4.24如何行动,发生在存储过程和函数复制吗?
a.4.25有特殊的安全要求,使用存储过程和函数一起复制?
a.4.26什么局限存在复制存储过程和函数的行为?
a.4.27做前面的限制影响MySQL做时间点恢复的能力?
a.4.28正在做什么来纠正上述限制?

a.4.1.

是MySQL 8支持存储过程和函数?

是MySQL 8的支持两种类型的存储过程,存储过程和函数。

a.4.2.

我在哪里可以找到文件,MySQL的存储过程和函数?

看到23.2节,“使用存储子程序(过程和函数)”

a.4.3

有一个论坛的MySQL存储过程?

是看到forums.mysql.com http:/ / / list.php?98

a.4.4.

我在哪里可以找到的ANSI SQL 2003规范的存储过程?

不幸的是,官方规格是不是免费的(ANSI使他们可以购买)。然而,有书籍,如SQL 99完整的,真的Peter Gulutzan和Trudy Pelzer,提供了一个全面的概述的标准,包括存储过程覆盖。

a.4.5.

如何管理存储过程呢?

它使用一个明确的命名方案,为您的存储程序一直是很好的做法。你可以管理存储过程CREATE [FUNCTION|PROCEDURE][功能] |程序改变DROP [FUNCTION|PROCEDURE],和[功能]显示创建|程序。你可以获得有关现有的存储过程的使用ROUTINES表中information_schema(database第24.20,“information_schema例程表”

a.4.6.

有没有办法看到所有的存储过程和存储在一个给定的数据库的功能?

是一个数据库命名dbname,使用此查询的INFORMATION_SCHEMA.ROUTINES

SELECT ROUTINE_TYPE, ROUTINE_NAME    FROM INFORMATION_SCHEMA.ROUTINES    WHERE ROUTINE_SCHEMA='dbname';

有关更多信息,参见第24.20,“information_schema例程表”

一个存储程序的主体可以被利用SHOW CREATE FUNCTION(用于存储功能)或SHOW CREATE PROCEDURE(一个存储过程)。看到第13.7.6.9,“显示创建程序的语法”为更多的信息

a.4.7

存储过程存储在哪里?

存储过程是存储在mysql.routinesmysql.parameters表,这是数据字典部分。你不能直接访问这些表。相反,查询INFORMATION_SCHEMAROUTINESPARAMETERS表看到第24.20,“information_schema例程表”,和24.13节,“information_schema参数表”

你也可以使用SHOW CREATE FUNCTION获得有关存储函数的信息,和SHOW CREATE PROCEDURE获得有关存储过程的信息。看到第13.7.6.9,“显示创建程序的语法”

a.4.8.

它是可能的组存储过程或存储功能的包吗?

这不是在MySQL 8的支持。

a.4.9.

可以存储过程调用另一个存储过程?

a.4.10

可以存储过程调用触发器?

存储过程可以执行一个SQL语句,如UPDATE,导致触发激活

a.4.11

可以存储过程访问表?

是存储过程可以访问一个或多个表的要求。

a.4.12

存储过程中是否有产生应用程序错误的语句?

是MySQL 8实现了SQL标准SIGNAL区域声明.看到第13.6.7”空调的行为”

a.4.13

做存储提供异常处理程序?

MySQL实现HANDLER根据SQL标准定义。看到第13.6.7.2,”声明…异常处理的语法”,详情

a.4.14

可以MySQL 8存储过程返回结果集的?

存储过程可以,但不能存储功能。如果你执行一个普通SELECT在一个存储过程的结果集是直接返回到客户端。你需要使用MySQL 4.1(或更高)的客户机/服务器协议的这一工作。这意味着,例如,在PHP中,你需要使用mysqli扩展而不是老mysql扩展

a.4.15

WITH RECOMPILE存储过程的支持?

在MySQL 5.0。

a.4.16

有一个MySQL等效于使用mod_plsql作为Apache网关直接与数据库中的存储过程?

有没有类似的MySQL 5.0。

a.4.17

我可以输入到存储过程传递数组?

在MySQL 5.0。

a.4.18

我可以通过光标为IN参数的存储过程吗?

在MySQL 8中,游标可在存储过程只。

a.4.19

我可以作为一个返回一个指针OUT从一个存储过程的参数?

在MySQL 8中,游标可在存储过程只。然而,如果你不在一个打开的游标SELECT,结果将直接发送到客户端。你也可以选择进入变量.看到第13.2.10,选择“语法”

a.4.20

我可以打印一个变量的值在一个存储程序调试的目的?

是的,你可以在做这个存储过程,但不在存储功能。如果你执行一个普通SELECT在一个存储过程的结果集是直接返回到客户端。您将需要使用MySQL 4.1(或以上)的客户机/服务器协议的这一工作。这意味着,例如,在PHP中,你需要使用mysqli扩展而不是老mysql扩展

a.4.21

我可以提交或回滚事务在存储过程?

是然而,你不能在存储函数执行事务操作。

a.4.22

复制做MySQL 8的存储过程和函数的工作吗?

是的,标准的行动进行了存储过程和函数的复制从主MySQL服务器的从属服务器。有一些限制,详细描述了23.7节,“二进制日志存储程序”

a.4.23

存储过程和函数的主服务器上复制一个奴隶创造的吗?

是的,存储过程和函数进行正常的DDL语句在主服务器复制到一个奴隶的创造,所以物体会同时存在于两个服务器。ALTER存储过程和函数的声明也复制。

a.4.24

如何行动,发生在存储过程和函数复制吗?

MySQL记录每个DML事件发生在一个存储过程,这些个人的行动,一个从服务器复制。实际调用执行存储过程是不可复制的。

存储功能,改变数据记录功能调用,而不是出现在每个函数的DML事件。

a.4.25

有特殊的安全要求,使用存储过程和函数一起复制?

是因为一个从服务器,有权执行的任何语句从主人的二进制日志读取,使用存储功能与复制存在特殊安全约束。如果在一般的复制或二进制日志(为时间点恢复的目的)是积极的,那么MySQL DBA有两个安全选项开放给他们:

  1. 任何用户希望创建存储函数必须被授予SUPER特权

  2. 另外,DBA可以设置log_bin_trust_function_creators系统变量为1,使得任何人都与标准CREATE ROUTINE特权创建存储功能

a.4.26

什么局限存在复制存储过程和函数的行为?

不确定性(随机)或基于时间的行为嵌入在存储过程中可能不正确的复制。由于其本身的性质,随机产生的结果是不可预测的和不可复制的,因此,随机行为复制到一个奴隶不反映在主行。声明存储功能被DETERMINISTIC或设置log_bin_trust_function_creators系统变量0不允许随机值要调用的操作。

此外,基于时间的行动不能被复制的奴隶因为存储过程中的此类行动的时机不可通过用于复制二进制日志。它只记录了DML事件和不定时的制约因素。

最后,非事务表的DML操作过程中发生错误(如大批量插入)可能的经验复制问题,高手可以部分更新的DML活动,但没有更新了奴隶因为发生错误。一种解决方法是一个函数的DML操作与实施IGNORE关键词,更新主,导致错误被忽略,更新不会导致错误复制到奴隶。

a.4.27

做前面的限制影响MySQL做时间点恢复的能力?

影响复制同样的限制会影响时间点恢复。

a.4.28

正在做什么来纠正上述限制?

你可以选择基于语句的复制或基于行的复制。原来的复制实现基于声明的基础二进制日志。基于行的二进制日志解决前面提到的局限性。

混合的复制也可以(通过启动服务器--binlog-format=mixed页:1这种杂交形式知道语句级的复制是否可以安全地使用,或行级复制是必需的。

更多信息,参见17.2.1,“复制格式”

A.5 MySQL 8常见问题:触发

a.5.1.我在哪里可以找到MySQL 5.0触发文档?
a.5.2.有MySQL触发器论坛?
a.5.3.做为有MySQL语句级和行级的触发器?
a.5.4.是否有默认的触发器?
a.5.5.如何管理MySQL触发器?
a.5.6.有没有办法查看指定数据库中的所有触发器?
a.5.7.触发器存储在哪里?
a.5.8.触发器能调用存储过程吗?
a.5.9.触发器能访问表?
a.5.10一个表可以用相同的触发事件和动作时间有多个触发器?
a.5.11触发器能通过UDF调用外部应用程序吗?
a.5.12一个触发器更新远程服务器上的表是可能的吗?
a.5.13做触发复制?
a.5.14通过对主复制到从触发器进行行动呢?

a.5.1.

我在哪里可以找到MySQL 5.0触发文档?

看到23.3节,“使用触发器”

a.5.2.

有MySQL触发器论坛?

是它可在http://forums.mysql.com/list.php?九十九

a.5.3.

做为有MySQL语句级和行级的触发器?

在MySQL 8中,所有的触发器FOR EACH ROW;即触发激活每一行的插入、更新或删除。MySQL 8不支持触发器的使用每个语句

a.5.4.

是否有默认的触发器?

不明确。MySQL也有一些特殊的行为TIMESTAMP柱,以及所定义的列的使用汽车

a.5.5.

如何管理MySQL触发器?

在MySQL 8中,可以创建使用触发器CREATE TRIGGER声明,投用DROP TRIGGER。看到第13.1.20,创建触发器的语法”,和第13.1.31,删除触发器的语法”更多关于这些语句

信息可以通过查询触发INFORMATION_SCHEMA.TRIGGERS表看到24.30节,“information_schema触发器表”

a.5.6.

有没有办法查看指定数据库中的所有触发器?

是你可以列出所有定义的触发器在数据库dbname使用查询的INFORMATION_SCHEMA.TRIGGERS表如图所示的:

SELECT TRIGGER_NAME, EVENT_MANIPULATION, EVENT_OBJECT_TABLE, ACTION_STATEMENT    FROM INFORMATION_SCHEMA.TRIGGERS    WHERE TRIGGER_SCHEMA='dbname';

有关此表的更多信息,参见24.30节,“information_schema触发器表”

你也可以使用SHOW TRIGGERS声明,这是特定的MySQL。看到第13.7.6.38,“显示触发器语法”

a.5.7.

触发器存储在哪里?

触发器是存储在mysql.triggers系统表,它是数据字典部分。

a.5.8.

触发器能调用存储过程吗?

a.5.9.

触发器能访问表?

触发器可以访问自己的旧的和新的数据表。触发器也可以影响其它的表,但不允许修改表,已被使用(读或写)的说法,被调用的函数或触发器。

a.5.10

一个表可以用相同的触发事件和动作时间有多个触发器?

在MySQL 8中,可以定义多个触发器的一个给定的表具有相同的触发事件和动作时间。例如,你可以有两BEFORE UPDATE一个表的触发器。默认情况下,触发器具有相同的触发事件和动作时间激活它们的创建顺序。影响触发命令,指定一个条款后每一行这表明FOLLOWS之前的名称和现有的触发器,也有相同的触发事件和动作时间。与FOLLOWS,新的触发激活现有触发后。与之前,新的触发激活之前已有触发器。

a.5.11

触发器能通过UDF调用外部应用程序吗?

是例如,一个触发器可以调用sys_exec()UDF

a.5.12

一个触发器更新远程服务器上的表是可能的吗?

是一个远程服务器上的表可以通过升级FEDERATED存储引擎。(见16.8节,“联邦存储引擎”

a.5.13

做触发复制?

是然而,他们如何工作取决于你使用的是MySQL的经典基于或基于行的复制格式语句。

当使用基于语句的复制,对从触发器的语句是在主执行(并复制到奴隶)。

使用基于行的复制时,触发器不奴隶由于语句,运行在主然后复制到从执行。相反,使用基于行的复制时,由主执行触发引起的变化应用于奴隶。

有关更多信息,参见第17.4.1.36,复制触发器”

a.5.14

通过对主复制到从触发器进行行动呢?

再次,这取决于你使用的是基于或基于行的复制语句。

基于语句的复制首先,在主存在的触发器必须重新从服务器创建。一旦做到这一点,复制流作为任何其他标准的DML语句,参与复制。例如,考虑一个表EMP有一个插入触发器,在掌握MySQL服务器存在的。相同的EMPINSERT触发器存在于从服务器以及。复制流会:

  1. 一个INSERT声明了EMP

  2. 这个AFTER触发EMP激活

  3. 这个INSERT语句写入二进制日志

  4. 复制从拿起INSERT声明EMP并且执行它

  5. 这个AFTER触发EMP存在于奴隶的激活

基于行的复制当你使用基于行的复制,通过在主执行触发引起的变化应用于奴隶。然而,触发自己实际上不是基于行的复制下执行的奴隶。这是因为,如果主人与奴隶主和应用的变化,此外,引起这些变化的触发应用在奴隶的变化可以有效的应用在两次奴隶,导致在主人与奴隶的不同数据。

在大多数情况下,结果是相同的两个基于行的和基于语句的复制。然而,如果你使用不同的触发器对主人和奴隶,你不能使用基于行的复制。(这是因为基于格式复制触发器对主人的奴隶,执行所做的更改而不是陈述导致触发器来执行,并从相应的触发器不会被执行。行)相反,任何陈述引发触发器执行必须复制使用基于语句的复制。

有关更多信息,参见第17.4.1.36,复制触发器”

结合MySQL 8常见问题:观点

a.6.1.我在哪里可以找到文件包含MySQL的看法吗?
a.6.2.有MySQL的观点讨论论坛?
a.6.3.如果数据表被删除或改名了,看会发生什么?
a.6.4.是MySQL 8表中拍的照片吗?
a.6.5.是MySQL 8视图?
a.6.6.你可以插入是基于连接的看法吗?

a.6.1.

我在哪里可以找到文件包含MySQL的看法吗?

看到23.5节,“使用意见”

a.6.2.

有MySQL的观点讨论论坛?

是看到forums.mysql.com http:/ / / list.php?100

a.6.3.

如果数据表被删除或改名了,看会发生什么?

在视图被创建,它可能下降或改变一个表或视图的定义。检查对这类问题的视图定义,使用CHECK TABLE声明。(见第13.7.3.2,“检查表语法”。)

a.6.4.

是MySQL 8表中拍的照片吗?

a.6.5.

是MySQL 8视图?

a.6.6.

你可以插入是基于连接的看法吗?

这是可能的,前提是你的INSERT表列的列表,这就明确了只有一个表名。

不能插入多个表在查看单个插入。

A.7 MySQL 8常见问题:information_schema

a.7.1.我在哪里可以找到information_schema的MySQL数据库文档?
a.7.2.有information_schema论坛?
a.7.3.我在哪里可以找到information_schema ANSI SQL 2003规范?
a.7.4.Oracle数据字典和MySQL information_schema之间的区别是什么?
a.7.5我可以添加或修改的information_schema数据库找到表?

a.7.1.

我在哪里可以找到MySQL的文档INFORMATION_SCHEMA数据库吗?

看到24章,information_schema表

a.7.2.

有一个论坛INFORMATION_SCHEMA

看到forums.mysql.com http:/ / / list.php?101

a.7.3.

我在哪里可以找到的ANSI SQL 2003规范INFORMATION_SCHEMA

不幸的是,官方规格是不是免费的。(ANSI使它们可供购买。)然而,有书,如SQL 99完整的,真的Peter Gulutzan和Trudy Pelzer,提供了一个全面的概述的标准,包括INFORMATION_SCHEMA

a.7.4.

Oracle数据字典和MySQL之间的区别是什么INFORMATION_SCHEMA

Oracle和MySQL提供的元数据表。然而,Oracle和MySQL使用不同的表名和列名。MySQL实现更类似于DB2和SQL服务器,也支持INFORMATION_SCHEMA在SQL标准定义

a.7.5

我可以添加或修改表的发现INFORMATION_SCHEMA数据库吗?

因为应用程序可能依赖于一个特定的标准结构,这不应该被修改。因为这个原因,我们不能支持错误或其他问题导致修改INFORMATION_SCHEMA表或数据

8 MySQL 8常见问题:迁移

a.8.1.我在哪里可以找到有关如何从MySQL 5.7迁移到MySQL 8?
a.8.2.如何存储引擎(表式)支持MySQL 8从以前的版本改变了吗?

a.8.1.

我在哪里可以找到有关如何从MySQL 5.7迁移到MySQL 8?

详细的升级信息,看2.10.1节,“升级MySQL”。不要跳过一个主要版本升级的时候,而是完整的步骤中的过程,从一个大版本升级到下一步。这可能看起来比较复杂,但它会节省你的时间和麻烦。如果你遇到问题,在升级过程中,其来源将更容易识别,通过你,如果你有一个MySQL企业认购,通过MySQL的支持。

a.8.2.

如何存储引擎(表式)支持MySQL 8从以前的版本改变了吗?

存储引擎支持更改如下:

  • 支持ISAM表MySQL 5中移除,你现在应该使用MyISAM在地方的存储引擎ISAM。将一个表tblnameISAMMyISAM简单的问题,如这一声明:

    修改表tblnameENGINE=MYISAM;
  • 内部RAIDMyISAM表也在MySQL 5中删除。这是以前用来允许大表在文件系统不支持文件大小超过2GB。所有的现代文件系统允许更大的表;此外,现在有其他的解决方案如MERGE表和视图

  • 这个VARCHAR柱型现在保留在所有存储引擎的空格。

  • MEMORY表(原名表)也可以包含VARCHAR专栏

MySQL安全8.0出来的常见问题:

a.9.1.我在哪里可以找到文件,解决安全问题的MySQL?
a.9.2.在MySQL 8的默认身份验证插件是什么?
a.9.3.是否有本地支持MySQL 5.0 SSL?
a.9.4.是建立在SSL支持MySQL的二进制文件,或者我必须重新编译自己使它的二进制?
a.9.5.是MySQL 8.0内置认证对LDAP目录吗?
a.9.6.不包括MySQL 5.0支持基于角色的权限控制(RBAC)?

a.9.1.

我在哪里可以找到文件,解决安全问题的MySQL?

最好的地方开始6章,安防

其他部分的MySQL的文档,你可能会发现有用的关于具体的安全问题包括以下:

a.9.2.

在MySQL 8的默认身份验证插件是什么?

在MySQL 8的默认身份验证插件caching_sha2_password。关于这个插件的信息,参见第6.5.1.3,“缓存SHA-2认证”

这个caching_sha2_password插件提供了更安全的密码加密比mysql_native_password插件(在以前的MySQL系列插件的默认)。关于这个默认插件更改服务器的操作和与客户及连接器服务器兼容性的影响的信息,参见caching_sha2_password作为首选的身份验证插件

关于认证和其他可用的身份验证插件的一般信息,看第6.3.10,“认证”,和第6.5.1,验证“插件”

a.9.3.

是否有本地支持MySQL 5.0 SSL?

8二进制文件有客户端和服务器之间的SSL连接的支持。看到6.4节,“使用加密的连接”

你也可以使用SSH隧道连接,如果(例如)客户端应用程序不支持SSL连接。例如,看6.4.7”部分,用SSH连接到MySQL从“Windows远程

a.9.4.

是建立在SSL支持MySQL的二进制文件,或者我必须重新编译自己使它的二进制?

最为二进制文件有SSL,安全认证的客户机/服务器连接功能,或两者。看到6.4节,“使用加密的连接”

a.9.5.

是MySQL 8.0内置认证对LDAP目录吗?

企业版包括PAM认证插件支持验证LDAP目录。

a.9.6.

不包括MySQL 5.0支持基于角色的权限控制(RBAC)?

不是在这个时候

A.10 MySQL 8常见问题:MySQL集群

在下面的部分,我们的回答是常见的关于MySQL集群的问题NDB存储引擎

a.10.1.哪个版本的MySQL软件支持NDB集群?我要从源代码编译?
a.10.2.什么是“NDB”和“ndbcluster”是什么意思?
a.10.3.有多少台电脑我需要运行一个NDB集群,为什么?

a.10.1.

哪个版本的MySQL软件支持NDB集群?我要从源代码编译?

NDB集群不在MySQL服务器8版本支持的;它是作为一个独立的产品发布。强烈建议你使用NDB集群为任何新的部署;如果你使用的是旧版本的NDB集群,我们建议您尽快升级到这个版本的可能。对NDB簇7.5改进的概述,看什么是新的在NDB集群7.5

NDB Cluster 7.6,基于MySQL服务器5.7和7.6版的NDB存储引擎,现在也可以作为一种评价和测试目的的开发者预览版。关于新的特点和该系列的其他重要变化的信息,参见什么是新的在NDB集群7.6

有关部署和使用NDB集群的详细信息,参见MySQL NDB集群7.5%和NDB集群7.6

a.10.2.

做什么NDBndbcluster是什么意思?

NDB代表N网络DATABASENDBndbcluster都是名称的存储引擎,使MySQL集群支持。NDB是首选,但无论名称是正确的。

a.10.3.

有多少台电脑我需要运行一个NDB集群,为什么?

至少三台电脑的运行需要一个可行的集群。然而,最小推荐在一个NDB集群中的计算机数量为四:一个运行管理和SQL节点,和两台作为数据节点。这两个数据节点的目的是提供冗余;管理节点必须运行在一个单独的机器在它的一个数据节点失败的情况下仲裁服务保证。

为了提供更高的吞吐量和高可用性,你应该使用多个SQL节点(MySQL服务器连接到群集)。它也有可能(虽然不是必需的)运行多个管理服务器。

A.11 MySQL 8.0 FAQ:MySQL的中国,日本,和koreancharacter集

这套经常被问到的问题源于经验的MySQL的支持和发展中日韩许多询问处理组(中国、日本、韩国)的问题。

a.11.1.CJK字符集所有MySQL?
a.11.2.我插入CJK字符进入我的表。为什么选择“显示?“人物?
a.11.3.有什么问题我应该注意工作与繁体中文字符集的时候?
a.11.4.为什么日本的字符集转换失败?
a.11.5.如果我想把cp932 SJIS 81ca到我应该怎么做?
a.11.6.如何MySQL代表日元(¥)的迹象?
a.11.7.什么问题,我应该注意工作与MySQL韩语字符集的时候?
a.11.8.为什么我得到不正确的字符串值的错误信息?
a.11.9.为什么我的GUI前端或浏览器显示CJK字符错误在我的应用程序使用,PHP,或另一个API吗?
a.11.10我已经升级到MySQL 8。我怎么能恢复到像在MySQL 4中关于字符集的行为吗?
a.11.11为什么有些像和全文搜索与CJK字符失败?
a.11.12我怎么知道字符x是在所有可用的字符集?
a.11.13为什么中日韩字符串排序不正确的Unicode?(我)
a.11.14为什么中日韩字符串排序不正确的Unicode?(II)
a.11.15为什么我的补充字符被MySQL?
a.11.16应该“cjk”是“cjkv”吗?
a.11.17是MySQL允许CJK字符用于数据库和表的名称吗?
a.11.18我在哪里可以找到MySQL手册为中文,日文和韩文翻译吗?
a.11.19我在哪里可以得到帮助的中日韩及相关问题在MySQL?

a.11.1.

CJK字符集所有MySQL?

CJK字符集的列表可能取决于你的MySQL版本有所不同。例如,在gb18030字符集不支持MySQL 5.7.4之前。然而,由于适用的语言的名称出现在描述在每一栏INFORMATION_SCHEMA.CHARACTER_SETS表,你可以得到一个当前使用该查询的所有非Unicode CJK字符集列表:

MySQL的>SELECT CHARACTER_SET_NAME, DESCRIPTIONFROM INFORMATION_SCHEMA.CHARACTER_SETSWHERE DESCRIPTION LIKE '%Chin%'OR DESCRIPTION LIKE '%Japanese%'OR DESCRIPTION LIKE '%Korean%'ORDER BY CHARACTER_SET_NAME;字符集| -------------------- --------------------------------- _ _ name | | -------------------- ---------------------------------描述中国传统| BIG5 | BIG5 | | cp932 | sjis for Windows | |日本日本eucjpms | ujis for Windows | | euckr | EUC KR韩国| | | GB18030国家标准GB18030 GB2312 GB2312 | | |简化简化| GBK中国| | GBK中国| | sjis | Shift-JIS日本| | ujis | EUC JP日本--------------------------------- | --------------------

(更多信息,参见24.1节,“information_schema character_sets表”。)

MySQL支持的三种变体GB国家标准,或国家标准,或简体中文)这是官方在中华人民共和国字符集:gb2312GBK,和(如MySQL 5.7.4)gb18030

有时人们试图插入gbk字符gb2312,和它的作品大部分时间因为gbk是一个超集gb2312。但最终他们试图插入一个罕见的汉字,它不工作。(例如,见虫#套数)。

在这里,我们试图弄清到底是什么人物都是合法的gb2312GBK,参照官方文件。请检查这些引用报告前gb2312GBK漏洞

它也可以存储CJK字符的Unicode字符集,虽然可用的排序规则可能不排序字符完全如你所期望的:

  • 这个utf8UCS2字符集支持的字符的Unicode基本多文种平面(BMP)。这些字符的代码点之间的值U+0000u FFFF

  • 这个utf8mb4UTF16utf16le,和utf32字符集支持BMP字符,以及补充字符之外的BMP。补充字符代码点之间的值U+10000U 10ffff

使用Unicode字符集确定排序能力排序(即区分)的特点:

  • 基于Unicode排序算法排序规则(UCA)4.0.0区别BMP字符。

  • 基于UCA 5.2.0或9.0.0区分BMP和补充字符的排序规则。

  • 非均匀圆阵排序规则可能不区分所有Unicode字符。例如,在utf8mb4校勘是默认我们utf8mb4 _通用_,使得只有BMP字符。

此外,突出的特点是不要求他们每一个给定的CJK语言习俗相同。目前,MySQL只有一个CJK具体UCA整理,gb18030_unicode_520_ci(需要使用非Unicodegb18030字符集)

关于Unicode排序规则和不同性质的信息,包括补充字符的排序性能,看第10.10.1,“Unicode字符集”

a.11.2.

我插入CJK字符进入我的表。为什么SELECT其显示为人物吗?

这个问题通常是由于一个设置MySQL不匹配的应用程序或操作系统的设置。这是纠正这些问题的一些常见步骤:

  • 一定是你所使用的MySQL版本

    使用声明SELECT VERSION();确定这一

  • 确保数据库实际上是使用所需的字符集

    人们常常认为客户端字符集都是为服务器字符集或用于显示字符集相同。然而,这些都是错误的假设。你可以通过检查结果确定SHOW CREATE TABLE tablename或者,更好的是,用这句话:

    SELECT character_set_name, collation_name    FROM information_schema.columns    WHERE table_schema = your_database_name        AND table_name = your_table_name        AND column_name = your_column_name;
  • 确定的字符或字符不能正确显示的十六进制值

    你可以得到一个列信息column_name在桌子上table_name使用以下查询:

    选择六(column_namefrom)table_name

    3F对于编码性格;这意味着?实际上是存储在列中的字符。这往往是因为一个问题从客户端字符集转换到目标字符集的特定字符。

  • 确保往返是可能的。当你选择literal(或_introducer hexadecimal-value),做你的权利literal因此

    例如,日本的片假名字符体育课ペ')存在于所有CJK字符集,并有代码值(十六进制编码)0x30da。为了测试这个角色一个来回,用这个查询:

    SELECT 'ペ' AS `ペ`;         /* or SELECT _ucs2 0x30da; */
    

    如果结果不还一次失败

    错误报告对于这样的失败,我们可能会问你跟进SELECT HEX('ペ');。然后我们可以确定客户端编码是正确的。

  • 确保问题不在浏览器或其他应用程序,而不是MySQL

    使用MySQL客户端程序来完成这个任务。如果MySQL显示字符正确但你的程序不,你的问题可能是由于系统设置。

    确定你的设置,使用SHOW VARIABLES声明,其输出应类似于如下所示:

    MySQL的>SHOW VARIABLES LIKE 'char%';-------------------------- ---------------------------------------- | Variable_name            | Value                                  | -------------------------- ---------------------------------------- | character_set_client     | utf8                                   || character_set_connection | utf8                                   || character_set_database   | latin1                                 || character_set_filesystem | binary                                 || character_set_results    | utf8                                   || character_set_server     | latin1                                 || character_set_system     | utf8                                   || character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ | -------------------------- ----------------------------------------

    这些都是典型的字符集设置为一个面向国际的客户(注意使用utf8Unicode)连接到服务器(西latin1是一个西欧字符集)

    虽然所有的Unicode(theutf8UNIX网络variant,and theUCS2变异在Windows)最好是拉丁语,它往往不是你的操作系统工具支持最好。许多Windows用户发现微软的字符集,如cp932日本的窗口,是合适的。

    如果你不能控制服务器设置,你不知道你的计算机使用的设置下,试着换一个通用字符集的国家,你在(euckr= Korea;gb18030gb2312GBK= People's Republic of China;big5= Taiwan;SJISujiscp932,或eucjpms= Japan;UCS2utf8= anywhere). Usually it is necessary to change only the client and connection and results settings. TheSET NAMES。表三次变化。例如:

    集名“big5”;

    一旦设置是正确的,你可以通过编辑让它永久my.cnfmy.ini。例如,你可以添加线条看起来像这样:

    [mysqld]
    character-set-server=big5
    [client]
    default-character-set=big5
    

    它也可能有与API配置设置是在应用程序中使用的问题;看为什么我的GUI前端或浏览器不显示CJK字符正确…吗?更多信息

a.11.3.

有什么问题我应该注意工作与繁体中文字符集的时候?

MySQL支持BIG5字符集在香港和台湾通用(中华民国)。MySQLbig5字符集是在现实中微软代码页950,这与原来非常相似BIG5字符集

一个添加的功能要求HKSCS扩展已提交。谁需要这种推广的人可能会发现,建议的补丁的bug # 13577感兴趣。

a.11.4.

为什么日本的字符集转换失败?

MySQL支持sjisujiscp932,和eucjpms字符集,以及Unicode。一个共同的需要之间的字符集转换。例如,可能有一个UNIX服务器(通常是sjisujis)和Windows客户端(通常是cp932

在下面的转换表,ucs2列代表的来源,和SJIScp932ujis,和eucjpms列代表的目的地;即,最后4列为十六进制的结果当我们使用CONVERT(ucs2)或我们分配一个UCS2含有值的列的sjiscp932ujis,或eucjpms专栏

人物的名字UCS2SJIScp932ujiseucjpms
断条00a63F3F8fa2c33F
全型断条ffe43Ffa553F8fa2
日元标志00a53F3F二十3F
日元符号全角ffe5818f818fa1ef3F
波浪线007e7E7E7E7E
跨线203E3F3F二十3F
单杠二千零一十五815c815ca1bda1bd
破折号二千零一十四3F3F3F3F
反斜线005c815f5C5C5C
全型”ff3c3F815f3Fa1c0
波冲301c八千一百六十3Fa1c13F
全角字符ff5e3F八千一百六十3Fa1c1
双垂直线二千零一十六八千一百六十一3Fa1c23F
平行二千二百二十五3F八千一百六十一3Fa1c2
减号二千二百一十二817c3Fa1dd3F
hyphen-minus全角ff0d3F817c3Fa1dd
分标志00a2八千一百九十一3Fa1f13F
全型分标志ffe03F八千一百九十一3Fa1f1
英镑符号00a3八千一百九十二3Fa1f23F
全角的英镑符号ffe13F八千一百九十二3Fa1f2
不签00ac81ca3Fa2cc3F
全宽不签ffe23F81ca3Fa2cc

现在考虑以下部分的表。

UCS2SJIScp932
不签00ac81ca3F
全宽不签ffe23F81ca

这意味着MySQL转换NOT SIGN(UnicodeU 00AC)来sjis代码点0x81cacp932代码点3F。(3F是问号(。这是什么总是使用时不能执行转换。)

a.11.5.

如果我想把SJIS怎么81CAcp932

我们的回答是:。有缺点这,很多人会喜欢释放转换,使81CA (NOT SIGN)进入SJIS成为81CA (FULLWIDTH NOT SIGN)进入cp932

a.11.6.

如何代表Yen(MySQLDC-SIGN)?

问题的产生是因为日本字符集的一些版本(包括sjisEUC)治疗5C作为一个逆斜線\,也被称为一个反斜杠),而另一些人把它作为一个符号(日元

MySQL是只有一个版本的JIS(日本工业标准)标准的描述。在MySQL,5C总是反斜线(\

a.11.7.

什么问题,我应该注意工作与MySQL韩语字符集的时候?

在理论上,虽然有几个版本euckr扩展的UNIX代码韩国)字符集,只有一个问题已经被注意到。我们使用ASCII码euc-kr变种,其中代码点0x5c是反斜线,那是\相反的,KS罗马变异的欧C-KR,在密码点0x5c获签?)。这意味着你不能转换UnicodeU 20a9euckr

MySQL的>SELECTCONVERT('?' USING euckr) AS euckr,HEX(CONVERT('?' USING euckr)) AS hexeuckr;| -------选择euckr | hexeuckr | | -------选择?| -------选择| 3F

a.11.8.

为什么我得到的不正确的字符串值错误信息?

看到这个问题,有一个Unicode创建一个表(ucs2)列和一个中国(gb2312)柱

mysql> CREATE TABLE ch
       (ucs2 CHAR(3) CHARACTER SET ucs2,
       gb2312 CHAR(3) CHARACTER SET gb2312);

在非严格的SQL模式,尝试将罕见的字符在两列

MySQL的>SET sql_mode = '';MySQL的>INSERT INTO ch VALUES ('A汌B','A汌B');查询行,1行的影响,1报警(0秒)

这个INSERT产生一个警告。使用下面的语句来看看它是什么:

MySQL的>SHOW WARNINGS\G*************************** 1。行***************************级别:警告:错误代码:1366message字符串值:\ \ \ x8cb XE6:“列“GB2312”排1

所以这是一个警告gb2312

MySQL >选择UCS2,HEX(UCS2)、GB2312、六(GB2312)从CH;------- -------------- -------- ------------- | UCS2 |进制(UCS2)| GB2312 |进制(GB2312)| ------- -------------- -------- ------------- |一汌B | 00416c4c0042 |一?B | 413f42 | ------- -------------- -------- -------------

几件事情需要解释这里:

  1. 这个字符不在gb2312字符集,如前所述

  2. 如果你使用的是MySQL的一个旧版本,你可能会看到一个不同的消息。

  3. 一个警告出现而不是一个错误因为MySQL设置不使用严格的SQL模式。在非严格模式,MySQL试图尽其所能,以获得最佳的拟合,而不是放弃。以严格的SQL模式,不正确的字符串值信息发生错误而不是警告,和INSERT失败.

a.11.9.

为什么我的GUI前端或浏览器显示CJK字符错误在我的应用程序使用,PHP,或另一个API吗?

获得一个直接连接到服务器使用MySQL客户端,并尝试相同的查询有。如果MySQL回答正确,问题可能是你的应用程序需要初始化。使用MySQL告诉你什么字符集使用的语句SHOW VARIABLES LIKE 'char%';。如果您使用的是Access,你最有可能与连接器/ ODBC连接。在这种情况下,你应该检查配置ODBC连接器/。如果,例如,你使用big5,你会进入集名“big5”。(在这种情况下,没有;性格是必需的。)如果你使用的是ASP,你可能需要添加SET NAMES在代码。这里有一个例子,过去的:

<%Session.CodePage=0Dim strConnectionDim ConnstrConnection="driver={MySQL ODBC 3.51 Driver};server=server;uid=username;" \               & "pwd=password;database=database;stmt=SET NAMES 'big5';"Set Conn = Server.CreateObject("ADODB.Connection")Conn.Open strConnection%>

同样,如果你使用的是什么字符集以外的latin1与连接器/网,您必须指定在连接字符串中的字符集。看到连接用连接器/净MySQL为更多的信息

如果你使用的是PHP,试试这个:

<?php
  $link = new mysqli($host, $usr, $pwd, $db);

  if( mysqli_connect_errno() )
  {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
  }

  $link->query("SET NAMES 'utf8'");
?>

在这种情况下,我们使用SET NAMES改变character_set_clientcharacter_set_connection,和character_set_results

另一个问题是经常遇到的PHP应用程序必须通过浏览器提出假设。有时添加或更改<meta>标签就足以解决问题:例如,确保用户代理将页面内容gb3212,包括<meta http-equiv="Content-Type" content="text/html; charset=gb3212"><head>HTML页的部分

如果你正在使用的连接器/ J,看使用的字符集和Unicode

a.11.10

我已经升级到MySQL 8。我怎么能恢复到像在MySQL 4中关于字符集的行为吗?

在MySQL 4版本中,有一个全球设置为服务器和客户端两个字符,并决定哪个角色使用被服务器管理员。这改变了从MySQL 4.1版本。现在所发生的是一个握手,如10.4节,“连接字符集和Collations”

当一个客户端连接,它发送到服务器的字符集,它要使用的名称。服务器使用的名称设置character_set_clientcharacter_set_results,和character_set_connection系统变量。实际上,服务器执行SET NAMES使用的字符集名称操作。

这样做的效果是,你无法控制的客户端启动特点mysqld--character-set-server=utf8。然而,一些亚洲客户喜欢MySQL 4.0行为。为了能够保持这种行为,我们添加了一个mysqld开关,--character-set-client-handshake,它可以关闭--skip-character-set-client-handshake。如果你开始mysqld--skip-character-set-client-handshake,然后,当一个客户端连接,它发送到服务器的字符集,它要使用的名称。然而,在客户端,服务器不知道这一请求。

举例来说,假设你喜爱的服务器字符集latin1(在中日韩地区,不太可能但这是默认值)。进一步假设客户端使用UTF8因为这是客户端的操作系统支持。现在,启动服务器latin1作为其默认字符集:

mysqld --character-set-server=latin1

然后启动客户端的默认字符集utf8

mysql --default-character-set=utf8

由此产生的设置可以通过查看输出的视SHOW VARIABLES

MySQL的&#62;SHOW VARIABLES LIKE 'char%';-------------------------- ---------------------------------------- | Variable_name            | Value                                  | -------------------------- ---------------------------------------- | character_set_client     | utf8                                   || character_set_connection | utf8                                   || character_set_database   | latin1                                 || character_set_filesystem | binary                                 || character_set_results    | utf8                                   || character_set_server     | latin1                                 || character_set_system     | utf8                                   || character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ | -------------------------- ----------------------------------------

现在停止客户端和服务器,停止使用mysqladmin。然后启动服务器,但是这个时候告诉它跳过握手一样:

mysqld --character-set-server=utf8 --skip-character-set-client-handshake

启动客户端utf8再次作为默认的字符集,然后显示的设置:

MySQL的&#62;SHOW VARIABLES LIKE 'char%';-------------------------- ---------------------------------------- | Variable_name            | Value                                  | -------------------------- ---------------------------------------- | character_set_client     | latin1                                 || character_set_connection | latin1                                 || character_set_database   | latin1                                 || character_set_filesystem | binary                                 || character_set_results    | latin1                                 || character_set_server     | latin1                                 || character_set_system     | utf8                                   || character_sets_dir       | /usr/local/mysql/share/mysql/charsets/ | -------------------------- ----------------------------------------

正如你可以看到,通过比较不同的结果SHOW VARIABLES忽略,服务器客户端的初始设置如果--skip-character-set-client-handshake选择使用

a.11.11

为什么有些LIKE全文CJK字符搜索失败?

LIKE搜索,有二进制字符串列的类型如一个很简单的问题BINARYBLOB我们必须知道:性格。在多字节字符集,不同的角色可能有不同的字节长度。例如,在UTF8A需要一个字节,但裴勇俊需要三个字节,如下所示:

+-------------------------+---------------------------+
| OCTET_LENGTH(_utf8 'A') | OCTET_LENGTH(_utf8 'ペ') |
+-------------------------+---------------------------+
|                       1 |                         3 |
+-------------------------+---------------------------+

如果我们不知道在一个字符串的第一个字符结束,我们不知道第二个字符开始的地方,在这种情况下,即使是很简单的搜索,如LIKE '_A%'失败。该解决方案是使用一个二进制字符串列的类型定义为具有适当的CJK字符集。例如:论文正文SJIS字符集。另外,转换为CJK字符集比较之前。

这就是为什么MySQL不允许存在字符编码。如果这不是拒绝坏的输入严格,它没有办法知道字符结束。

FULLTEXT搜索,我们必须知道单词的开始和结束。与西方语言,这是很少的问题因为大多数(如果不是全部的话)使用这些容易识别单词边界:空间特征。然而,这通常是不与亚洲撰写案例。我们可以使用任意的不彻底的措施,如假设所有汉字表示的话,还是(日本)取决于由于语法词尾假名片假名的变化。然而,唯一确定的方案需要一个全面的单词列表,这意味着我们必须包括一个字典为服务器中的每个亚洲语言支持。这是不可行的。

a.11.12

我怎么知道字符X可在所有的字符集?

简体中文及基本所有CJK字符集出现nonhalfwidth日文假名字符大多数。下面的存储过程接受一个UCS-2Unicode字符,将其转换为其他字符集,以及十六进制显示结果。

DELIMITER //CREATE PROCEDURE p_convert(ucs2_char CHAR(1) CHARACTER SET ucs2)BEGINCREATE TABLE tj             (ucs2 CHAR(1) character set ucs2,              utf8 CHAR(1) character set utf8,              big5 CHAR(1) character set big5,              cp932 CHAR(1) character set cp932,              eucjpms CHAR(1) character set eucjpms,              euckr CHAR(1) character set euckr,              gb2312 CHAR(1) character set gb2312,              gbk CHAR(1) character set gbk,              sjis CHAR(1) character set sjis,              ujis CHAR(1) character set ujis);INSERT INTO tj (ucs2) VALUES (ucs2_char);UPDATE tj SET utf8=ucs2,              big5=ucs2,              cp932=ucs2,              eucjpms=ucs2,              euckr=ucs2,              gb2312=ucs2,              gbk=ucs2,              sjis=ucs2,              ujis=ucs2;/* If there are conversion problems, UPDATE produces warnings. */SELECT hex(ucs2) AS ucs2,       hex(utf8) AS utf8,       hex(big5) AS big5,       hex(cp932) AS cp932,       hex(eucjpms) AS eucjpms,       hex(euckr) AS euckr,       hex(gb2312) AS gb2312,       hex(gbk) AS gbk,       hex(sjis) AS sjis,       hex(ujis) AS ujisFROM tj;DROP TABLE tj;END//DELIMITER ;

输入可以是任何单ucs2字符,也可以是代码值(十六进制表示的字符)。例如,从Unicode的名单UCS2的编码和名称(www.unicode.org http:/ / / / /公共unicodedata.txt联拓),我们知道,片假名字符体育课出现在所有CJK字符集,和它的代码值X'30DA'。如果我们使用这个值作为实参改性(),结果如下图所示:

mysql> CALL p_convert(X'30DA');
+------+--------+------+-------+---------+-------+--------+------+------+------+
| ucs2 | utf8   | big5 | cp932 | eucjpms | euckr | gb2312 | gbk  | sjis | ujis |
+------+--------+------+-------+---------+-------+--------+------+------+------+
| 30DA | E3839A | C772 | 8379  | A5DA    | ABDA  | A5DA   | A5DA | 8379 | A5DA |
+------+--------+------+-------+---------+-------+--------+------+------+------+

由于该列的值都是3F(即问号字符,),我们知道每一个转化工作。

a.11.13

为什么中日韩字符串排序不正确的Unicode?(我)

CJK排序问题在老版本的发生,可以作为解决利用MySQL 8utf8mb4字符集和utf8mb4_ja_0900_as_cs整理

a.11.14

为什么中日韩字符串排序不正确的Unicode?(II)

CJK排序问题在老版本的发生,可以作为解决利用MySQL 8utf8mb4字符集和utf8mb4_ja_0900_as_cs整理

a.11.15

为什么我的补充字符被MySQL?

补充字符的Unicode之外基本多文种平面/平面0。BMP字符的码点之间的值U+0000u FFFF。补充字符代码点之间的值U+10000U 10ffff

存储补充字符,你必须使用一个字符集,允许他们:

  • 这个utf8UCS2字符集支持BMP字符。

    这个utf8字符集只允许gb3212字符占用三字节。这导致了报表如发现错误# 12600,我们拒绝不是一个错误。与utf8,MySQL必须截断输入字符串的字节,当它遇到不理解。否则,它是未知的坏的多字节字符是多久。

    一个可能的解决方法是使用ucs2而不是UTF8,在这种情况下,坏的人物都变成问号。然而,没有截断发生。您还可以更改数据类型BLOBBINARY,这不执行有效性检查。

  • 这个utf8mb4UTF16utf16le,和utf32字符集支持BMP字符,以及补充字符以外的BMP。

a.11.16

CJK中日韩越

第期中日韩越中国日本韩国越南)是指越南字符集包括汉族(中文)字符。MySQL支持西部特点的现代越南文字,但不支持使用汉字老越南文字。

在MySQL 5.6,还有越南的排序规则的Unicode字符集,如第10.10.1,“Unicode字符集”

a.11.17

是MySQL允许CJK字符用于数据库和表的名称吗?

a.11.18

我在哪里可以找到MySQL手册为中文,日文和韩文翻译吗?

在MySQL 5.6手册日语翻译可以从下载http://dev.mysql.com DOC

a.11.19

我在哪里可以得到帮助的中日韩及相关问题在MySQL?

以下资源可用:

a.12 MySQL 5.0 FAQ:连接器和API

对于常见问题,问题,和有关MySQL连接器和其他API的答案,看以下领域的手册:

a.13 MySQL 8常见问题:复制

在下面的部分,我们提供的是最常见的关于MySQL复制问题的答案。

a.13.1.必须从连接到掌握所有的时间吗?
a.13.2.我必须让我的主人和奴隶使复制网络?
a.13.3.我怎么知道晚了奴隶与主人?换句话说,我怎么知道最后声明由从复制的日期吗?
a.13.4.我如何停止主更新直到从抓起来吗?
a.13.5.我应该注意什么问题时,建立双向复制?
a.13.6.我如何使用复制来提高我的系统性能?
a.13.7.做我的使用性能增强的复制自己的应用程序编写客户端代码,我应该怎么做?
a.13.8.当多少可以MySQL复制提高我的系统性能?
a.13.9.我如何使用复制来提供冗余和高可用性?
a.13.10我怎么知道主服务器是基于或基于行的二进制日志格式语句?
a.13.11我如何告诉一个奴隶使用基于行的复制?
a.13.12我如何防止授予和撤销复制到从机的声明?
a.13.13复制是否工作在混合操作系统(例如,主人在Linux上运行而运行在OS X和Windows的奴隶)?
a.13.14混合的硬件架构复制工作(例如,主机运行在64位的机器,运行在32位机器的奴隶)?

a.13.1.

必须从连接到掌握所有的时间吗?

不,它不。奴隶可以去或呆几个小时甚至几天断开,然后重新补上更新。例如,您可以设置一个主/从关系通过拨号链接,链接起来,只有零星的时间很短。也就是说,在任何给定的时间,奴隶不能保证与主同步,除非你采取一些特殊的措施。

为确保酱可以发生一个奴隶已经断开,你不能从主,包含的信息尚未复制到奴隶删除二进制日志文件。异步复制可以工作只有奴隶能够继续读取二进制日志的地步,读的最后一个事件。

a.13.2.

我必须让我的主人和奴隶使复制网络?

是的,网络必须在主站和从站启用。如果网络没有启用,奴隶不能连接到主传送二进制日志。检查的skip-networking选项没有被任何服务器配置文件中启用。

a.13.3.

我怎么知道晚了奴隶与主人?换句话说,我怎么知道最后声明由从复制的日期吗?

检查Seconds_Behind_Master列在输出SHOW SLAVE STATUS。看到第17.1.7.1,“检查复制状态”

当从SQL线程执行从读硕士的一个事件,它改变自己的时间到事件的时间戳。(这是为什么TIMESTAMP是复制的。)时间输出中的列SHOW PROCESSLIST为奴隶,SQL线程显示秒数是过去的复制事件与下位机的实时时间戳之间的秒数。你可以用这个来确定最后的复制事件的日期。注意:如果你的奴隶已经从一小时主断开连接,然后重新连接,你可以立即看到大时间值如3600对奴隶的SQL线程SHOW PROCESSLIST。这是因为奴隶是执行的语句是一小时的旧。看到第17.2.2,“复制的实施细则》

a.13.4.

我如何停止主更新直到从抓起来吗?

使用以下过程:

  1. 在主,执行这些语句:

    mysql> FLUSH TABLES WITH READ LOCK;
    mysql> SHOW MASTER STATUS;
    

    记录复制坐标(当前的二进制日志文件的名称和位置)的输出SHOW声明

  2. 对奴隶,发出以下声明,其中的参数MASTER_POS_WAIT()功能是在上一步得到的复制的坐标值:

    MySQL的&#62;SELECT MASTER_POS_WAIT('log_name', log_pos);

    这个SELECT语句块的奴隶直到达到指定的日志文件位置。在这一点上,奴隶与主人同步返回语句。

  3. 在主,发出以下声明使主人开始处理更新一次:

    mysql> UNLOCK TABLES;
    

a.13.5.

我应该注意什么问题时,建立双向复制?

MySQL复制目前不支持任何锁定协议的主人和奴隶之间保证分布式原子性(跨服务器)更新。换句话说,为客户做一个更新共同掌握1这是可能的,同时,在传播有限公司掌握2,客户端B可以更新共同掌握2使客户工作更新不同比CO大师1。因此,当客户端的更新使其共同掌握2,它产生的表,不同于你所共同掌握1,即使在从共同掌握2所有更新也传播。这意味着你不应链中的两个服务器放在一个双向复制的关系,除非你确信你的更新可以以任何顺序发生,或除非你照顾管理有序更新在客户端的代码。

你也应该意识到双向复制实际上并不能提高性能有非常大的(如果有的话)就更新有关。每个服务器必须更新相同的号码,就有一个单一的服务器做。唯一不同的是,有一点不锁竞争因为发起另一个服务器上的更新连载中一个从线程。即使这可能获益的网络延迟补偿。

a.13.6.

我如何使用复制来提高我的系统性能?

建立一个服务器作为主机,直接写入。然后配置许多的奴隶你有预算和Rackspace,分发阅读主人和奴隶之间。你还可以用的奴隶--skip-innodb--low-priority-updates,和--delay-key-write=ALL选项来获得速度的改进在从端。在这种情况下,使用非事务性的奴隶MyISAM表代替InnoDB表通过消除事务的开销获得更高的速度。

a.13.7.

做我的使用性能增强的复制自己的应用程序编写客户端代码,我应该怎么做?

请使用复制扩展解决方案指南,第17.3.5,使用复制的规模”

a.13.8.

当多少可以MySQL复制提高我的系统性能?

MySQL的复制是一个频繁读写系统流程和罕见的最有利。在理论上,采用单主/多从安装程序,您可以通过添加更多的奴隶直到你耗尽网络带宽规模系统,或更新负荷增长点,主人不能处理它。

确定你可以使用之前的好处开始水平多少奴隶,你如何提高你的网站的性能,你必须知道你的查询模式,并确定由经验标杆的吞吐量之间的关系写在一个典型的大师,一个典型的奴隶。下面的例子显示了一个相当简化的计算,你可以用一个假设的系统复制。让reads表示读写次数每秒,分别。

我们说,系统负荷由10%和90%的读写,并通过基准确定reads为2×。换句话说,该系统可以做到1200每秒读取没有写,写的是平均的平均读慢一倍,和之间的关系是线性的。假设主机和各从具有相同的能力,而且我们有一主N奴隶.然后,我们为每个服务器(主从):

reads= 1200 - 2 *

reads= 9 */(N(1)读写分离,但复制到所有的奴隶)

9 *writes/(N1)2×= 1200

writes= 1200 / (2 + 9/(N1))

最后的方程表示的最大的数写N奴隶,给予最大可能的阅读率为每秒1200和九的比读/写。

这个分析得到以下结论:

  • 如果N= 0 (which means we have no replication), our system can handle about 1200/11 = 109 writes per second.

  • 如果N= 1, we get up to 184 writes per second.

  • 如果N= 8, we get up to 400 writes per second.

  • 如果N= 17, we get up to 480 writes per second.

  • 最终,作为N接近无穷大(和我们的预算负无穷大),我们可以得到非常接近每秒600写道,增加系统吞吐量约5.5倍。然而,只有八台服务器,我们增加了近四倍。

这些计算假定无限的网络带宽和忽视可能对你的系统是重要的其他因素。在许多情况下,您可能无法执行的计算类似于一只表明准确预测发生在你的系统如果你添加了什么N复制的奴隶。然而,回答以下问题可以帮助你决定是否以及在多大程度上复制将提高你的系统性能:

  • 读/写在你的系统中的比例是什么?

  • 多写一个服务器处理的负载可以如果你减少读取?

  • 有多少奴隶,你对你的网络可用带宽?

a.13.9.

我如何使用复制来提供冗余和高可用性?

你如何实现冗余是完全依赖于你的应用情况。高可用性解决方案(自动故障转移)需要主动监测和自定义脚本或第三方工具的奴隶从原来的MySQL服务器提供故障转移支持。

处理过程的人工干预,你应该能够从失败的总开关预先配置的奴隶的改变和新的服务器或从服务器到新服务器,MySQL服务器的DNS应用程序调整。

更多的信息和一些实例的解决方案,看第17.3.8,“转换大师在故障转移期间”

a.13.10

我怎么知道主服务器是基于或基于行的二进制日志格式语句?

检查的价值binlog_format系统变量:

MySQL的&#62;SHOW VARIABLES LIKE 'binlog_format';

显示的价值将是一个STATEMENT,或MIXED。为混合的模式,基于语句的记录是默认使用但复制自动切换到基于行的记录在一定条件下,如不安全的声明。信息时,可能会出现这种情况,看第5.4.4.3,“混合二进制日志格式”

a.13.11

我如何告诉一个奴隶使用基于行的复制?

奴隶自动知道使用哪种格式。

a.13.12

我要如何预防GRANTREVOKE从复制到从机的声明?

在启动服务器--replicate-wild-ignore-table=mysql.%选项来忽略表的复制MySQL数据库

a.13.13

复制是否工作在混合操作系统(例如,主人在Linux上运行而运行在OS X和Windows的奴隶)?

a.13.14

混合的硬件架构复制工作(例如,主机运行在64位的机器,运行在32位机器的奴隶)?

a.14 MySQL 8常见问题:MySQL企业线程池

a.14.1什么是线程池,它解决了什么问题?
a.14.2.如何限制和管理的线程池实现最佳性能和吞吐量并发会话和交易?
a.14.3.线程池不同于客户端连接池是怎样的?
a.14.4.我应该什么时候使用线程池?
a.14.5.有没有推荐的线程池的配置?

a.14.1

什么是线程池,它解决了什么问题?

MySQL线程池是一个MySQL服务器插件扩展默认的连接处理MySQL服务器的能力限制数量的并发执行的报表/查询和交易,确保每一个有足够的CPU和内存资源来完成它的任务。MySQL 8商业分布包括线程池的插件。

默认的线程处理模型,使用MySQL服务器执行一个线程每连接的客户端报表。随着越来越多的客户端连接到服务器并执行报表,整体性能下降。线程池的插件提供了一种替代的线程处理模型设计来减少开销,提高性能。线程池的插件,通过有效地管理语句执行线程大量客户端连接的增加服务器的性能,特别是在现代的多CPU /核心系统。

有关更多信息,参见第5.6.3,MySQL企业线程池”

a.14.2.

如何限制和管理的线程池实现最佳性能和吞吐量并发会话和交易?

线程池的使用分而治之限制和平衡并发的方法。不同于默认连接MySQL服务器处理,线程池线程连接和分离,所以没有固定的关系连接和线程执行这些语句之间的连接接收。线程池来管理客户端连接配置的线程组内,在那里他们的优先级和队列根据工作性质对他们提交完成。

有关更多信息,参见第5.6.3.3,“线程池操作”

a.14.3.

线程池不同于客户端连接池是怎样的?

mysql的连接池运行在客户端确保MySQL客户端不不断地连接和断开的MySQL服务器。它是用来缓存空闲连接MySQL客户端供其他用户所需的。这最大限度地减少建立和拆除连接的查询提交给MySQL服务器的开销和费用。mysql的连接池没有知名度,来查询后端MySQL服务器或负载处理能力。相比之下,线程池运行MySQL服务器端和管理设计为入境的并发连接和查询的执行因为他们来自客户端的连接访问后端MySQL数据库收到。因为职责分离,mysql的连接池和线程池是正交的,可以相互独立。

MySQL数据库连接池通过MySQL连接器上27章,连接器和API

a.14.4.

我应该什么时候使用线程池?

有一些经验法则来考虑最佳的线程池的使用案例:

MySQLThreads_running变量跟踪正在执行的并行语句在MySQL服务器的数量。如果这个变量往往超过一个地区服务器不合理操作(通常超越40 InnoDB的工作量),线程池将是有益的,尤其是在极端的平行过载的情况。

如果你使用的是innodb_thread_concurrency限制并发执行的语句数,你会发现线程池解决了同样的问题,只有更好,通过指定连接线程组,然后排队执行基于交易的内容,用户定义的名称,等等。

最后,如果你的工作量主要包括短查询,线程池将是有益的。

要了解更多信息,参见第5.6.3.4,“线程池优化”

a.14.5.

有没有推荐的线程池的配置?

线程池有多个用例驱动的影响其性能的参数配置。要学习这些技巧和调整,看第5.6.3.4,“线程池优化”

A.15 MySQL为常见问题:InnoDB Change Buffer

a.15.1.什么类型的操作修改二级指标和变化的缓冲的结果吗?
a.15.2.InnoDB缓冲的变化有什么好处?
a.15.3.并对指标变化的缓冲支持其他类型?
a.15.4.InnoDB使用变化的缓冲空间是多少?
a.15.5.如何确定改变缓冲区的当前大小?
a.15.6.何时改变缓冲区合并发生?
a.15.7.改变缓冲液冲洗是什么时候?
a.15.8.当要改变缓冲被使用?
a.15.9.当要改变缓冲区不能使用?
a.15.10我在哪里可以找到关于改变缓冲的更多信息?

a.15.1.

什么类型的操作修改二级指标和变化的缓冲的结果吗?

INSERT更新,和DELETE操作可以修改辅助索引。如果受影响的索引页不在缓冲池中的变化可以改变缓冲区缓存。

a.15.2.

的好处是什么InnoDB改变缓冲?

二级指标变化时,缓冲辅助索引页不在缓冲池中避免了昂贵的随机存取I/O操作,要立即在受影响的索引页从磁盘读取。缓冲可以应用更改后,分批,为页读入缓冲池的读操作。

a.15.3.

并对指标变化的缓冲支持其他类型?

不改变缓冲区只支持二级指标。聚簇索引,全文索引,和空间索引不支持。全文索引,都有自己的缓存机制。

a.15.4.

空间是多少InnoDB用于改变缓冲?

在出台之前innodb_change_buffer_max_size在MySQL 5.6的配置选项,在SYSTEM表空间的磁盘更改缓冲区的最大大小为1/3的InnoDB缓冲池大小

在MySQL 5.6和后来的innodb_change_buffer_max_size配置选项定义的改变缓冲区的最大大小为总的缓冲池大小的百分比。默认情况下,innodb_change_buffer_max_size设置为25。最大值设置为50。

InnoDB没有缓冲区的操作是否会导致磁盘改变缓冲超过规定限。

改变缓冲页面不需要坚持缓冲池可以驱逐LRU运算。

a.15.5.

如何确定改变缓冲区的当前大小?

改变电流大小的缓冲区来报道SHOW ENGINE INNODB STATUS \G,下插入缓冲和自适应哈希索引标题。例如:

-------------------------------------
INSERT BUFFER AND ADAPTIVE HASH INDEX
-------------------------------------
Ibuf: size 1, free list len 0, seg size 2, 0 merges

相关的数据点包括:

  • size:在变化的缓冲使用的页面数。改变缓冲区的大小等于赛格的大小(1自由列表长度)。这个1 +价值是变化的缓冲标题页。

  • seg size:变化的缓冲区的大小,在页面。

关于监测变化的缓冲区状态信息,看第15.4.2,“Change Buffer”

a.15.6.

何时改变缓冲区合并发生?

  • 当一页读入缓冲池,缓冲的变化是合并在读取完成后,在页面提供。

  • 改变缓冲区合并作为后台任务执行。这个innodb_io_capacity参数设置在I/O活动由一个上限InnoDB后台任务,如合并从改变缓冲区的数据。

  • 改变缓存合并在崩溃恢复进行。改变是从改变缓冲区的应用(在SYSTEM表空间)对二级指标叶页索引页读入缓冲池。

  • 改变缓冲是完全持久的和将系统崩溃生存。重新启动后,改变缓冲区的合并操作作为正常业务的一部分的简历。

  • 一个完整的合并可以强制改变缓冲区的一部分,缓慢关闭服务器使用--innodb-fast-shutdown=0

a.15.7.

改变缓冲液冲洗是什么时候?

更新页面的冲洗机构,冲其他页面,占据缓冲池冲洗。

a.15.8.

当要改变缓冲被使用?

改变缓冲区是一个功能旨在减少随机I / O二级指标为指标增长较大,不再适合InnoDB缓冲池。一般来说,改变缓冲液时应使用整个数据集不适合缓冲池,当有大量的DML活动修改辅助索引页,或当有很多定期二级指标由DML活性变化。

a.15.9.

当要改变缓冲区不能使用?

你可以考虑禁用更改缓冲如果整个数据集符合InnoDB缓冲池,如果你有相对较少的次要指标,或者如果您使用的是固态存储,在随机读取大约快连续读取。在更改配置,建议您运行测试使用代表工作量确定禁用更改缓冲区提供任何好处。

a.15.10

我在哪里可以找到关于改变缓冲的更多信息?

下面的章节和博客提供额外的信息InnoDB变化的缓冲:

8常见问题:“16 MySQL InnoDB表空间加密

a.16.1.数据解密是谁看到它的授权用户?
a.16.2.InnoDB表空间加密相关的开销是多少?
a.16.3.使用InnoDB表空间加密的加密算法是什么?
a.16.4.它是可能的在一个由InnoDB表空间加密功能提供的地点使用第三方的加密算法?
a.16.5.可以索引列进行加密?
a.16.6.什么样的数据类型和数据长度的InnoDB表空间加密支持吗?
a.16.7.数据保留在网络加密?
a.16.8.做数据库内存有明文或加密的数据?
a.16.9.我怎么知道要加密的数据?
a.16.10InnoDB表空间加密不同于加密函数mysql已经提供了如何?
a.16.11没有传输表空间特征与InnoDB表空间加密?
a.16.12压缩与InnoDB表空间加密?
a.16.13我可以用mysqlpump或mysqldump加密表?
a.16.14我怎样改变(旋转,再按键)主密钥?
a.16.15我如何迁移数据从明文InnoDB表空间加密的InnoDB表空间?

a.16.1.

数据解密是谁看到它的授权用户?

InnoDB表空间加密的目的是为客户提供透明地应用加密数据库中而不影响现有的应用程序的能力。返回数据加密的格式将打破现有的应用。InnoDB表空间加密提供了加密的利益没有与传统数据库的加密解决方案相关的开销,这通常需要昂贵的和实质性的变化,应用程序,数据库触发器和视图。

a.16.2.

与之相关的开销是什么InnoDB闪电片?

没有额外的存储开销。根据内部基准,性能开销相当于个位数的百分比差异。

a.16.3.

使用的加密算法是什么InnoDB闪电片?

InnoDB表空间加密支持高级加密标准(AES256)基于块的加密算法。它采用电子密码本(ECB)分组加密模式的表空间加密和密码块链接(CBC)用于数据加密的块加密模式。

a.16.4.

它是可能的在一个地方使用第三方提供的加密算法InnoDB表空间加密功能?

不,这是不可能使用其他的加密算法。提供的加密算法被广泛接受。

a.16.5.

可以索引列进行加密?

InnoDB表空间加密支持所有指标的透明。

a.16.6.

什么样的数据类型和数据长度不InnoDB表空间加密的支持?

InnoDB表空间加密支持所有支持的数据类型。没有数据的长度是有限度的。

a.16.7.

数据保留在网络加密?

加密数据InnoDB表空间加密功能是解密时从文件中读取的表空间。因此,如果数据是在网络上,它是以明文形式。然而,网络上的数据可以使用MySQL网络加密的加密,加密来往数据库使用SSL / TLS数据。

a.16.8.

做数据库内存有明文或加密的数据?

InnoDB表空间加密,内存中的数据被解密,它提供了100的透明度。

a.16.9.

我怎么知道要加密的数据?

在PCI-DSS标准符合要求的信用卡号码(主账号,或“潘”)是以加密形式存储。违反法律的通知(例如,CA SB 1386,CA AB 1950,和类似的法律在43个美国国家)需要的名字,加密姓名,驾驶执照号码,以及其他的PII数据。2008年初,CA公司1298补充医疗和健康保险信息PII数据。此外,特定行业的隐私和安全标准可能需要一定的资产加密。例如,如医药研究成果资产,油田勘探结果,金融合约,或执法者的个人资料可能需要加密。在医疗行业,病人数据的隐私,健康记录和X射线图像是最重要的。

a.16.10

是怎样的InnoDB表空间加密不同于加密函数mysql已经提供了吗?

有对称和非对称加密API的MySQL,可用于手动加密数据在数据库中。然而,应用程序必须执行需要管理加密密钥和加密和解密操作通过调用API函数。InnoDB表空间加密不需要更改应用程序,是对最终用户透明,并提供自动化,内置的密钥管理。

a.16.11

没有传输表空间特征的工作InnoDB闪电片?

是有关更多信息,参见出口的加密表

a.16.12

压缩工作InnoDB表空间加密?

客户使用InnoDB表空间加密接收压缩充分受益因为之前被施加压缩数据块加密。

a.16.13

我可以用mysqlpumpmysqldump加密数据表?

是因为这些工具创建逻辑备份、数据加密的表是不加密了。

a.16.14

我怎样改变(旋转,再按键)主密钥?

InnoDB表空间加密使用两层密钥机制。当表空间使用加密密钥存储在单独的表空间,表空间的数据文件的头。表键使用主密钥加密。主密钥时生成表空间启用加密并存储在数据库中。主密钥时使用ALTER INSTANCE ROTATE INNODB MASTER KEY声明中,从而产生一种新的主密钥,存储的关键,和旋转的关键投入使用。

a.16.15

我如何迁移数据从一个清晰的文字InnoDB表空间加密InnoDB表空间?

从一个表空间传递到另一个数据是不需要的。在数据加密InnoDB表空间,运行ALTER TABLE tbl_name ENCRYPTION='Y'InnoDB表空间加密只支持文件表表空间

A.17 MySQL为常见问题:虚拟化支持

a.17.1.是MySQL支持如Oracle VM虚拟化,VMware,码头工人,微软Hyper-V环境,还是其他?

a.17.1.

是MySQL支持如Oracle VM虚拟化,VMware,码头工人,微软Hyper-V环境,还是其他?

MySQL支持虚拟化环境,但仅是认证甲骨文虚拟机。更多信息联系Oracle支持。

注意使用虚拟化软件时,潜在的问题。通常的相关性能,性能下降缓慢,或不可预知性,磁盘I/O、网络、和记忆。