原文文档

声明

该文档纯粹自己手动翻译, 也许网上有更好的版本, 但是我这个属于自己学习的版本, 为了提高英语水平和对MySQL的理解, 后续不保证会持续更新,内容如有理解错误, 还请指正。

MySQL 8.0 参考手册

包含MySQL NDB集群8.0

摘要

这是一份MySQL参考手册。 该文档分别记录了MySQL8.0到8.0.20,以及基于NDB8.0版本到NDB8.0.19版本的NDB集群发布版本。这份文档可能包括一些目前还没发布的MySQL版本的特性。想要了解哪些版本已经发布,请查看MySQL8.0发布日志

MySQL8.0特性。这份手册描述的特性并没有包含在所有版本的MySQL8.0中;这些特性可能不包含在你所购买的MySQL8.0版本中。如果你有任何问题是关于你的MySQL8.0版本中所包含的特性的,请参阅你的MySQL8.0许可协议或者联系你的oracle销售代表。

有关每个发布版本的变化,请查看MySQL8.0发布日志

有关法律信息和许可信息,请查看前言和法律声明

在使用MySQL中需要帮助,请访问MySQL论坛,你可以在那里向别的MySQL用户描述你的问题。

文档创建于:2019-10-16

1. 一般信息

MySQL提供了非常快速的,多线程,多用户,和健壮的SQL数据库服务。MySQL服务用于关键服务,高负荷生产的系统以及嵌入大量部署的软件。Oracle是Oracle公司及其分支机构的注册商标。MySQL是Oracle公司及其分支机构的商标,未经Oracle正式的书面许可,客户不得使用。其他的名字可能是其各自所有者的商标。

MySQL软件具有双重许可。用户可以在GNU通用公共许可 (http://www.fsf.org/licenses/) 条款下将MySQL软件作为开源软件产品使用,或者从Oracle购买一份标准的商业许可。访问 http://www.mysql.com/company/legal/licensing/ 以获取更多关于授权政策的信息。

下面的列表描述了一些在本手册中需要特别关注的部分:

1.1 关于本手册

这份参考手册适用于MySQL数据库系统8.0版本到8.0.20版。在本文中关于和MySQL8.0镜像版本的区别参照了(8.0.x)的发行版本。查看法律声明,获取许可的信息。

本手册不适用于MySQL软件的更早版本,因为在MySQL8.0和更早版本之间存在着很多功能及别的方面的不同。如果你正在使用MySQL软件的早期发布版本,请参考对应的手册。比如:MySQL5.7操作手册可以覆盖MySQL软件的5.7发布版本系列。

由于这个手册是作为参考来使用,因此不会提供关于SQL或关联的数据库概念的一般介绍。同样也不会教你如何使用你的操作系统或命令行解释器。

MySQL数据库软件在经历不断的发展,其手册同样也会不断的更新。最新版本的手册可以在 https://dev.mysql.com/doc/ 在线搜索到。其他格式也可以在这里获取,包括HTML,PDF和EPUB版本。

参考手册的源文件由DocBook XML格式写成。其HTML版本和其他版本都自动生成,主要使用DocBook XSL样式表。关于DocBook的信息,详见 http://docbook.org/

MySQL的源代码包括内部文档,由Doxygen编写。已完成的Doxygen内容可以访问 https://dev.mysql.com/doc/index-other.html 。同样也可以按照 章节2.9.10,“创建MySQL Doxygen文档内容”的介绍从MySQL源分发创建本地的内容。

如果你有使用MySQL的的问题,加入 MySQL开发者社区,或者在我们的论坛提问;详见 章节1.6.2,“MySQL论坛的MySQL社区支持”。如果你对本手册有补充或者更正的建议,请发送到 http://www.mysql.com/company/contact/。

本手册最初由 David Axmark 和 Michael “Monty” Widenius 编写。主要由MySQL文档团队编写,成员包括 Chris Cole, Paul DuBois, Margaret Fisher, Edward Gilmore, Stefan Hinz, David Moss, Philip Olson, Daniel Price, Daniel So, 以及 Jon Stephens 。

1.2 排版和语法约定

本手册使用下列的排版约定:

// TODO

1.3 MySQL数据库管理系统总览

1.3.1 什么是MySQL?

MySQL是最受欢迎的开源的SQL数据库管理系统,由Oracle公司开发,发布和支持。

MySQL官网提供了MySQL软件的最新版本的信息。

  • MySQL是一个数据库管理系统

    数据库是数据的结构化集合。它可以是任何东西,从简单的购物清单,到一个图片集,或者公司网络中的海量信息。在一个计算机数据库上添加,访问和执行数据存储,你需要一个像MySQL服务器一样的数据库管理系统。由于计算机非常善于处理大量的数据,数据库管理系统就在计算机中扮演了一个中心角色,无论是作为一个独立的程序,还是别的应用的一部分。

  • MySQL数据库是关系型的

    一个关系型数据库将数据存储在不同的表中,而不是把所有的数据放在一个大的存储库中。数据库结构组织成物理文件以优化速度。具有对象(诸如数据库,表,视图,行和列)的逻辑模型提供了灵活的程序设计环境。你可以建立规则去管理不同字段之间的关系,比如一对一,一对多,唯一,必填或者选填,以及不同表之间的指向。数据库强制执行这些规则,所以一个良好设计的数据库,可以使你的程序避免看到不一致,重复,孤立,过期,或者缺失的数据。

    MySQL中的SQL代表“结构化查询语言”。SQL是用于访问数据库的最通用的标准化语言。基于你的程序设计环境,又可以直接输入SQL(比如,用于创建报表),用另一种语言把SQL注入到代码中,或者使用隐含SQL语法的特定语言的API。

    SQL由 ANSI/ISO 的SQL标准来定义。SQL的标准从1986年以来不断发展,存在多个不同的版本。在本手册中,“SQL-92”是指1992年发布的标准,“SQL:1999”是指在1999年发布的版本,以及“SQL:2003”,指现在的版本。我们在任何时用到“SQL标准”这个词时,都是指当前版本的SQL标准。

  • MySQL软件是开源的

    开源意味着对于任何人来说都可以使用和修改该软件。任何人都可以从网络上下载MySQL软件并且免费使用。你也可以按照你的意愿去学习和更改源代码以适应你的需求。MySQL软件使用GPL)(通用公共许可),来定义你在不同情景下对软件能做的和不能做的事。如果你对GPL感到不适,或者想要将MySQL的代码注入到一个商用软件中,你可以从我们这里购买一份商用许可。访问MySQL许可概览以获取更多信息。

  • MySQL数据库服务快速,可靠,可拓展且易用

    如果你寻求的就是这个,你应该去尝试一下。MySQL服务可以在笔记本或者台式机上与其他应用,网络服务一起舒适的运行,只需要一点甚至无需额外的关注。如果你将整台机器都用于MySQL,你可以调整设置利用所有的内存,CPU功率,以及IO性能。MySQL同样可以扩大网络和机器的集群。

    MySQL服务最初开发用来比现有方式更快的处理数据,而且成功的应用在高要求的生产环境很多年。尽管经历了不断的发展,MySQL如今提供了一组丰富而有用的功能。其可连接性,速度以及安全性使得MySQL服务高度适合在网络上访问数据库。

  • MySQL服务运行于客户端/服务端或者嵌入式系统

    MySQL数据库软件是一个客户端/服务端系统,其包含了一个多线程的SQL服务器用于支持不同的后端,不同的客户端程序以及库,管理工具,以及大范围的应用程序接口。

    我们也提供MySQL服务作为一个嵌入的多线程库,你可以将其链接到你的应用以实现一个更小,更快,易于管理的独立产品。

  • 大量捐赠的MySQL软件已经可用

    MySQL服务有一些使用的功能是由与我们密切合作的用户开发的。很有可能你最喜欢的应用或者语言由MySQL数据库服务支持。

“MySQL”的官方读法是“ My Ess Que Ell ”(而不是 “my sequel” ),但是我们不介意你把它读作“my sequel”或者别的当地的读法。

1.3.2 MySQL的主要功能

本节描述了一些MySQL数据库软件的重要特征。在大部分情况下,该路线图适用于所有版本的MySQL。想要知道在特定版本的MySQL中引入的功能,请在“In a Nutshell”章节查看对应的手册:

内部实现和可移植性

  • 由C和C++实现
  • 通过了大规模的不同编译器的测试
  • 在多个不同的平台上运行。详见https://www.mysql.com/support/supportedplatforms/database.html
  • 关于移植,MySQL5.5及以上的版本使用CMake命令。更早的版本使用GNU Automake,Autoconf和Libtool。
  • 经过了Purify(一个商用的内存泄漏探测器)以及Valgrind(一个GPL工具)的测试。(http://developer.kde.org/~sewardj/)
  • 使用具有独立模块的多层服务的设计。
  • 设计为使用核心线程的多线程方式,如果多核CPU可用,则可以很容易的被使用。
  • 提供了基于事务和非事务的存储引擎。
  • 使用索引压缩的非常快速的B-tree磁盘(MyISAM)
  • 设计为可以相对简单的增加另一个存储引擎。如果你想为一个内部的数据库提供一个SQL接口,这会非常有用。
  • 使用了非常快速的基于线程的内存分配系统。
  • 使用了一种优化了的内部循环的join来非常快速的执行join。
  • 实现了在内存的hash table,其作为临时表来使用。
  • 使用了一种尽可能快的高度优化的类库来实现SQL功能。在所有的查询初始化后一般就不会再有内存分配。
  • 为使用客户端/服务端环境提供了作为单独程序的服务,作为一个库可以嵌入到独立的应用中。这种应用可以单独使用或者在网络无法访问的环境中使用。

数据类型

语句和功能

  • 所有的操作符和功能支持都在Select列表和Where条件语句查询中。比如:

    1
    2
    3
    mysql> SELECT CONCAT(first_name, ' ', last_name)
    -> FROM citizen
    -> WHERE income/dependents > 10000 AND age > 30;
  • 完全支持SQL中的Group ByOrder By条件。提供Group的功能的支持( COUNT(), AVG(), STD(), SUM(), MAX(), MIN(), 和 GROUP_CONCAT()) )

  • 完全支持拥有SQL和ODBC语法的 LEFT OUTER JOINRIGHT OUTER JOIN

  • 支持标准SQL要求的表和列的别名。

  • 支持DeleteInsertReplace,以及在update时返回修改的数量,或者返回匹配的行数,而不是在连接服务器时设置一个标识。

  • 支持MySQL特定的show语句,用于返回数据库,存储引擎,表,以及索引的信息。支持 INFORMATION_SCHEMA数据库,实现自标准SQL。

  • EXPLAIN 语句会展现优化器如何处理查询语句的。

  • 函数名称独立于表明和列名。比如,ABS是一个合法的列明。唯一的限制是在调用函数时,在函数名和(之间不能存在空格。详见章节9.3,关键字和保留字

  • 你可以在一个语句内指定不同数据库的表。

安全性

  • 权限和密码系统非常灵活和安全,并支持基于主机的认证。
  • 连接服务器时,通过对所有密码通信进行加密来实现密码安全。

可拓展性和限制

  • 支持大型数据库。我们使用的MySQL服务拥有可以包含5000万条数据的数据库。我们也知道拥有20万张表和50亿条数据的MySQL服务器的用户。
  • 支持每张表最多64个索引。每个索引可以包含1-16列或者部分列。InnoDB表的索引最大宽度为767字节或者3072字节。详见 章节15.6.1.16,“InnoDB表的限制”。MyISAM表的最大索引宽度为1000字节。详见 章节16.2,“MyISAM存储引擎”。可以使用Char,Varchar,Blob或者Text字段类型的前缀作为一个索引。

可连接性

  • 客户端可以通过不同的协议连接MySQL服务:
    • 客户端可以在任何平台上使用TCP/IP端口进行连接。
    • 在windows系统,如果服务端启用了 named_pipe 系统参数进行启动,那客户端就可以使用name pipe进行连接。如果服务端启用了 shared_memory 系统参数进行启动,那客户端也可以使用 shared_memory 方式进行连接。客户端可以通过使用 --protocol=memory 选项来进行shared memory的连接。
    • 在unix系统,客户端可以使用Unix域的套接字文件来进行连接。
  • MySQL的客户端程序可以用不同的语言编写。一个C语言编写的客户端库可以用于C语言和C++编写的客户端,或者任何别的提供C语言绑定的语言。
  • C, C++, Eiffel, Java, Perl, PHP, Python, Ruby, 和 Tcl 的API都是可用的,使得MySQL客户端可以被多种语言编写。详见章节28,连接器和API.
  • 连接器/ODBC(MyODBC)接口为那些使用ODBC(Open Datebase Connectivity)连接的客户端程序提供了MySQL支持。比如说,你可以使用MS Access去连接你的MySQL服务器。客户端可以运行在Windows或者Unix。连接器/ODBC源是可用的。和很多其他的功能一样,所有的ODBC2.5的功能都是被支持的。详见MySQL 连接器/ODBC开发者指南
  • 连接器/J 接口为那些使用了JDBC连接器的java客户端程序提供了MySQL支持。客户端可以运行于Windows或者Unix。连接器/J 源是可用的。详见MySQL连接器/J 5.1开发者指南
  • MySQL连接器/NET 允许开发者创建一个要求安全和高性能数据连接MySQL的.NET应用程序。它实现了必须的ADO.NET的接口并融入进了ADO.NET的感知工具。开发者可以选择他们的.NET语言去构建应用。MySQL连接器/NET是一个完全托管的ADO.NET驱动,100%由纯粹的C#编写。详见MySQL连接器/NET开发者指南

本地化

  • 服务器可以提供各种语言的报错信息。详见章节10.12,设置错误提示的语言
  • 完全支持不同的字符集,包括 latin1 (cp1252),germanbig5ujis ,几种Unicode编码,以及别的。比如, Scandinavian 的字符 “å”, “ä” 和“ö” 可以用在表和列的名字中。
  • 所有的数据以选定的字符集存储。
  • 根据默认的字符集和校对规则进行排序和比较。当MySQL服务运行的时候也可以对该规则进行更改(详见章节10.3.2,“服务器字符集和校验”)。一个非常高级的排序例子,可以看下捷克的排序编码。MySQL支持多种可以在编译和运行阶段指定的字符集。
  • 服务器时区可以动态的改变,而且单独的客户端可以指定各自的时区。详见章节5.1.13,MySQL服务器时区支持

客户端和工具

  • MySQL包含多个客户端和实用程序。包括命令行程序,比如 mysqldumpmysqladmin ,以及图形化程序 MySQL Workbench
  • MySQL服务器内置了对于SQL语句的检查,优化和表修复的支持。这些语句可以通过mysqlcheck客户端从命令行使用。MySQL也包含了myisamchk工具,一个非常快速的命令行工具,用于在MyISAM表提交这些操作。详见章节4,MySQL程序
  • 可以调用 –help 和 -?来呼叫MySQL程序用以获取在线协助。

1.3.3 MySQL的历史

我们一开始想要用我们自己的快速,低级的引擎来使用mSQL数据库来连接我们的表。然而,经过了一些测试后,我们认为mSQL的速度和灵活性达不到我们的要求。这导致了我们的数据库的一个新的SQL接口,但是其API接口和mSQL几乎一样。该API设计为允许那些为mSQL编写的第三方代码可以很方便的移植以用于MySQL。

MySQL得名于联合创建人Monty Widenius的女儿,My。

MySQL的海豚(我们的logo)的名字是“Sakila”,这来自于“为海豚取名”的比赛中用户建议的庞大的名字列表里选择出来的。最后获胜的名字由来自非洲Swaziland, 一个名叫Ambrose Twebaze的开源软件开发者提供。据 Ambrose所说,这个女性化的名字Sakila出自 Swaziland 的当地语Siswati。Sakila也是坦桑尼亚的 Arusha 的一个城镇的名字,邻近 Ambrose 的原籍国乌干达。

1.4 MySQL8.0更新了什么

这一节总结了在MySQL8.0中哪些被添加,启用,以及移除。随附的部分罗列了在MySQL8.0中已经被新增,启用,移除的选项和变量。详见 章节1.5,“服务器,状态变量和选项在MySQL8.0中的添加,弃用和删除”

阅读全文 »

find

删除测试库创建日期在10天以前的日志

1
find /home -ctime +10 -type f -name "*log.log.20*" | xargs rm -rf

查看磁盘空间和大文件

查看磁盘剩余空间

1
df -h

查看目录下大文件

1
du -h --max-depth=1

查看进程中的java程序

1
2
3
ps aux | grep java
# 杀死某个进程
kill -9 pid

修改hostname

1
vi /etc/sysconfig/network

传输文件

1
2
scp C:/Users/Administrator/Downloads/elasticsearch-7.3.1-linux-x86_64.tar.gz root@192.168.15.161:/home/bos-provider/bos-provider-1.0-SNAPSHOT/bin

阅读全文 »

什么是最左匹配原则

关于最左匹配原则的解释, 网上找了很多, 但是我感觉都不是特别准确, 于是一怒之下
直接找了官网的文档, 一下子就清晰了. 下面贴下官网的解释, 然后我自己翻译了一下.

来自官方文档的解释

原文链接

MySQL can create composite indexes (that is, indexes on multiple columns).
An index may consist of up to 16 columns. For certain data types,
you can index a prefix of the column (see
Section 8.3.5, “Column Indexes”).

MySQL可以创建联合索引(即, 多列的索引). 一个索引可以包含最多16列. 对于
某些数据类型, 你可以索引列的前缀(这里说的是对于Blob和Text类型, 索引列的前几位就可以,
如INDEX(blob_col(10)), 详见索引文档)

MySQL can use multiple-column indexes for queries that test all the columns in the index,
or queries that test just the first column, the first two columns, the first three columns, and so on.
If you specify the columns in the right order in the index definition,
a single composite index can speed up several kinds of queries on the same table.

MySQL的联合索引可以用于包含索引中所有列的查询条件的语句, 或者包含索引中的第一列的查询条件的语句,
以及索引中前两列, 索引中的前三列, 以此类推. 如果你在索引定义中以正确的顺序指定列,
那么联合索引就可以加速同一张表中的多个不同类型的查询.

A multiple-column index can be considered a sorted array, the rows of
which contain values that are created by concatenating the values of the indexed columns.

一个联合索引可以看作是一个有序队列, 里面有值的列是根据连接索引列的值创建的.(这句可能不准确)

Note
As an alternative to a composite index, you can introduce a column that
is “hashed” based on information from other columns. If this column is
short, reasonably unique, and indexed, it might be faster than a “wide”
index on many columns. In MySQL, it is very easy to use this extra column:

提示
作为联合索引的一个替代项, 你可以采用一个Hash值列, 这个列的Hash值来自其他的列.
如果该列简短, 合理唯一, 且被索引, 那该列就可能比一个很”宽”的由多个列构成的索引
更快. MySQL里可以很容易的使用这种列:

1
2
3
SELECT * FROM tbl_name
WHERE hash_col=MD5(CONCAT(val1,val2))
AND col1=val1 AND col2=val2;
阅读全文 »

配置启动ELK+FileBeats后台运行, 不随着窗口关闭而关闭

只要在后面加上&即可, 如

1
bin/logstash -f config/log4j-es.conf &

注意: 退出时使用Ctrl+D命令, 直接关闭窗口依然有可能使得进程关闭

LogStash自动重新加载配置

启动logstash时在后面加上命令–config.reload.automatic

1
bin/logstash -f config/log4j-es.conf --config.reload.automatic &

重新发送filebeat抓取的内容

1.删除registry下的data.json
如:

1
rm -rf /home/elk/filebeats/filebeat-7.3.1-linux-x86_64/data/registry/filebeat

2.重启filebeat
如果存在正在运行的filebeat, 先kill掉

1
2
ps aux | grep filebeat  
kill -s 9 pid

然后执行

1
./filebeat -e -c filebeat.yml
阅读全文 »

原文链接

学者认为川普反对弹劾的律法政策是基于站不住脚的宪法依据

1.Washington — Constitutional lawyers said Wednesday that President Trump’s
vow not to cooperate with the impeachment inquiry is both unprecedented and
unlikely to spare him from being formally charged by the House.
In fact, they say, it may only increase the chances that he will be impeached.
华盛顿报道 - 宪法律师周三声明, 川普总统发誓不会与弹劾调查进行合作的言论是
前所未有的, 而且也很可能使他面临众议院的正式指控. 并且, 他们还说到, 这有可能
增加川普被弹劾的可能.

2.The Constitution says the “House of Representatives shall have the sole
power of impeachment,” and it does not give the president a specific role
in the process. A president is in some sense like an ordinary defendant
who may be subject to a criminal investigation and an indictment,
all without his participation or involvement, scholars say.
美国宪法里写到, “众议院拥有弹劾的唯一权力”, 而且没有赋予总统在此过程中的任何
特殊角色. 学者认为, 总统在整个过程中都不会参与到弹劾中, 某种意义上和普通被告一样,
可能面临刑事调查和指控.

3.“The president’s cooperation is not required or needed,” said University of
North Carolina law professor Michael J. Gerhardt, an expert on impeachment.
And “the House may make that defiance grounds for impeachment,” he added,
noting that in 1974, a House committee approved articles of impeachment against
President Nixon based in part on his refusal to comply with congressional subpoenas.
北卡罗莱纳大学的法律学教授, 同时也是研究弹劾的专家, Michael J.Gerhardt认为,
“总统的配合并不是必需的, 众议院可以把这作为违抗理由去弹劾”. 他还补充到, 1974年,
众议院委员会通过了一项弹劾决议, 其部分原因就是尼克松总统拒绝了来自国会的传票.

阅读全文 »

更换主题

1.进入https://hexo.io/themes/ 可以选择多种主题

点击图片进去可以看到这种主题的预览效果
点击文字进去将进入这个主题的github站点, 里面会详细说明该主题的安装和配置方式

2.目前最流行的hexo主题应该是NexT, 我这次选的是3-hexo作为例子来讲解一下, 这个也是一个优秀的国产hexo主题
其最终效果如图

3.关于3-hexo的安装和设置方法, 都可以直接参照该主题的github主页
简单介绍一下:

  • 获取3-hexo: git clone https://github.com/yelog/hexo-theme-3-hexo.git themes/3-hexo
  • 将3-hexo的主题文件夹复制到hexo的themes目录下
  • 修改3-hexo目录下的_config.yml文件, 修改方式在_config.yml中已经有详细的注释, 按照注释修改即可
  • hexo主目录下打开git窗口, 依次输入如下命令
    hexo clean (清除静态页面缓存文件, 防止出现缓存影响页面样式的情况)
    hexo g (生成静态页面)
    hexo s (启动本地hexo服务器, 可以打开localhost:4000查看页面效果)
    hexo d (发布到github)
    阅读全文 »

github建立个人网站

1.github的账号申请不再赘述
2.打开github.com, 点击new, 新建一个项目

3.输入项目名称, 注意项目名称的格式必须是”用户名.github.io”的格式

4.点击Create Repository完成项目新建
5.点击新建的项目, 进入settings, 往下找到GitHub Pages, 点击Choose a theme, 选择一个主题后, 点击select theme就完成了网站的发布

6.在浏览器输入”用户名.github.io”, 就可以看到github为你默认创建的首页

hexo搭建博客

1.在使用hexo搭建博客之前, 需要完成几个基础工作
安装git
新增ssh key到github
安装node.js
2.在本地拉取github上刚刚创建的网页项目(用户名.github.io)
3.在项目目录下新建一个文件夹, 可以随意命名, 比如hexo
4.进入hexo目录, windows下右键空白处, 点击Git Bash Here
5.依次执行命令
npm install hexo-cli -g (安装hexo)
hexo init (初始化网站)
npm install hexo-deployer-git –save (安装hexo发布到git的插件)
中间遇到需要确认的信息, 直接按回车即可
6.打开hexo目录下的_config.yml文件, 有几个地方可以进行修改
title: 你的网站名字
author: 网站作者
theme: 去hexo主题可以选择, 注意要先将主题下载到hexo/themes下才可选择该主题
注意: 必须要修改的部分是deploy, 改成如下格式

阅读全文 »

获取ElasticSearch+LogStash+Kibana+FileBeats

关于elk搭建的全部产品都可以从elastic的官方网站获取最新版本
elastic官网


如图所示
当前elastic官方已经不再推荐单纯使用elk(ElasticSearch+LogStash+Kibana)三个产品搭建日志平台, 而是在此基础上加上了轻量级的日志收集插件FileBeats.

安装ElasticSearch

我们首先获取安装包
进入https://www.elastic.co/cn/downloads/elasticsearch


在Downloads里点击linux就可以下载到用于linux安装的tar包
如果是直接在linux安装,使用wget命令即可
如 : wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.0-linux-x86_64.tar.gz
如果需要更旧的历史版本, 点击下面的past release即可

阅读全文 »
0%