MySQL8 管理手册(一)
原文:
zh.annas-archive.org/md5/D5BC20BC3D7872C6C7F5062A8EE852A4译者:飞龙
前言
对于任何系统,有必要以有组织的方式管理数据。在大型系统中,有必要处理各种配置以确保安全。MySQL 是处理企业级应用程序的流行解决方案之一。在本书中,我们将解释如何配置用户、他们的角色、多个实例等。
许多组织使用 MySQL 来管理其网站或商业产品,对于他们来说,管理数据存储并根据业务需求分析数据是非常具有挑战性的。本书将向您展示如何实施索引和查询优化以获得更好的性能。此外,我们还将介绍 MySQL 服务器的可扩展性和高可用性如何帮助管理故障场景。此外,复制和分区概念将通过示例详细解释。
本书通过针对不同级别的用户,从初学者到数据库管理员,描述了 MySQL 8 的各种功能。本书从安装开始,带着对 MySQL 8 概念的基本理解。然后我们转向具有管理级别功能的配置。在本书的结尾,您将学习到非常有趣的功能,如优化、扩展和故障排除。
本书适合对象
本书适用于寻求涵盖所有 MySQL 管理相关任务的便捷指南的 MySQL 管理员。如果您是想开始使用 MySQL 管理的数据库管理员,本书也会对您有所帮助。需要具备基本数据库概念知识才能开始阅读本书。
本书涵盖的内容
第一章《MySQL 8 简介》作为 MySQL 8 的入门指南。它简要定义了 MySQL 中可用的核心功能以及 MySQL 8 中新增或增强的功能。在本章的后半部分,我们重点介绍了 MySQL 8 的优势以及实际应用。
第二章《安装和升级 MySQL 8》描述了在不同平台上安装 MySQL 8 的详细步骤。它还解释了如何升级或降级到 MySQL 8。
第三章《MySQL 8 - 使用程序和实用工具》介绍了 MySQL 8 服务器和客户端的命令行程序。它还提供了有关可用 GUI 工具及其配置的信息。
第四章《MySQL 8 数据类型》着重于对 MySQL 8 数据类型的详细解释。它还根据内容类型对数据类型进行分类。我们还介绍了每个类别中的数据类型及其属性。我们还介绍了数据类型的存储要求。
第五章《MySQL 8 数据库管理》主要探讨了 MySQL 8 的管理部分。本章涵盖了组件和插件管理,以及用户和角色管理。此外,它还解释了全球化配置、缓存技术以及 MySQL 8 中可用的不同类型的日志。
第六章《MySQL 8 存储引擎》解释了几种类型的存储引擎以及 InnoDB 存储引擎的详细信息。本章提供了有关自定义存储引擎创建的信息,以及使其可插拔安装在 MySQL 8 中的步骤。
第七章《MySQL 8 中的索引》解释了索引,以及实施索引的可能方式。它比较了不同类型的索引。
第八章《MySQL 8 中的复制》解释了复制以及 MySQL 8 中可用的不同类型的复制。它还描述了复制的配置和实现,以及不同的方法。
第九章《MySQL 8 中的分区》,解释了几种类型的分区设置,分区的选择和修剪。它还解释了在分区时如何应对限制和限制。
第十章《MySQL 8-可扩展性和高可用性》,解释了如何进行扩展和在实施过程中处理不同的挑战。读者可以了解在 MySQL 8 中实现高可用性的多种方式。
第十一章《MySQL 8-安全》,侧重于 MySQL 8 数据库安全。本章涵盖了影响安全性的一般因素,核心 MySQL 8 文件的安全性,访问控制以及保护数据库系统本身的安全性。本章还包括安全插件的详细信息。
第十二章《优化 MySQL 8》,解释了如何配置 MySQL 8 以获得更好的性能。本章还描述了一些性能结果的用例,以验证。这将帮助您了解在处理优化 MySQL 8 时要注意的各种接触点。
第十三章《扩展 MySQL 8》,展示了如何扩展 MySQL 8 并添加新功能,以及调试和移植到 MySQL 8。
第十四章《MySQL 8 最佳实践和基准测试》,解释了使用 MySQL 的最佳实践。它还解释了为 MySQL 8 进行的各种基准测试。
第十五章《MySQL 8 故障排除》,解释了 MySQL 8 的许多常见和现实世界的故障排除场景。
为了充分利用本书
我们建议您在阅读本书之前先了解 MySQL(任何版本)和 SQL 命令的基础知识。
本书还涵盖了实际场景和命令执行,因此如果可能的话,请安装一个工具,以便轻松执行 MySQL 命令。
下载示例代码文件
您可以从www.packtpub.com的帐户中下载本书的示例代码文件。如果您在其他地方购买了本书,您可以访问www.packtpub.com/support并注册,以便直接将文件发送到您的邮箱。
您可以按照以下步骤下载代码文件:
-
登录或注册www.packtpub.com。
-
选择“支持”选项卡。
-
点击“代码下载和勘误”。
-
在搜索框中输入书名,然后按照屏幕上的说明操作。
下载文件后,请确保使用以下最新版本解压或提取文件夹:
-
WinRAR/7-Zip for Windows
-
Zipeg/iZip/UnRarX for Mac
-
7-Zip/PeaZip for Linux
该书的代码包也托管在 GitHub 上,网址为github.com/PacktPublishing/MySQL-8-Administrators-Guide。我们还有来自丰富书籍和视频目录的其他代码包可供选择,网址为**github.com/PacktPublishing/**。去看看吧!
使用的约定
本书中使用了许多文本约定。
CodeInText:指示文本中的代码词、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄。这是一个例子:“它将下载winMD5Sum.exe到您的计算机上。”
任何命令行输入或输出都是这样写的:
CREATE TABLE working_days (
year INT,
week INT,
days BIT(7),
PRIMARY KEY (year, week));
粗体:表示一个新术语、一个重要词或屏幕上看到的词。例如,菜单或对话框中的单词会以这种方式出现在文本中。这是一个例子:“在页面上点击下载 WinMD5Sum 选项。”
警告或重要说明看起来像这样。
提示和技巧看起来像这样。
联系我们
我们始终欢迎读者的反馈。
一般反馈:发送电子邮件至 feedback@packtpub.com,并在主题中提及书名。如果您对本书的任何方面有疑问,请发送电子邮件至 questions@packtpub.com。
勘误:尽管我们已经尽最大努力确保内容的准确性,但错误确实会发生。如果您在本书中发现错误,我们将不胜感激地接受您的报告。请访问 www.packtpub.com/submit-erra…,选择您的书籍,点击勘误提交表格链接,并输入详细信息。
盗版:如果您在互联网上发现我们作品的任何形式的非法副本,我们将不胜感激地接受您提供的位置地址或网站名称。请通过 copyright@packtpub.com 与我们联系,并提供材料链接。
如果您有兴趣成为作者:如果您在某个专业领域有专长,并且有兴趣撰写或为书籍做出贡献,请访问 authors.packtpub.com。
评论
请留下评论。在阅读并使用本书后,为什么不在购买书籍的网站上留下评论呢?潜在的读者可以看到并使用您的客观意见来做出购买决定,我们在 Packt 可以了解您对我们产品的看法,我们的作者也可以看到您对他们书籍的反馈。谢谢!
有关 Packt 的更多信息,请访问 packtpub.com。
第一章:MySQL 8 简介
MySQL 是一个著名的开源结构化数据库,因为其性能、易用性和可靠性。这是关系数据库的最常见选择。在当前市场上,成千上万的基于 Web 的应用程序依赖于 MySQL,包括 Facebook、Twitter 和 Wikipedia 等巨头行业。它还被证明是“软件即服务”(SaaS)应用程序的数据库选择,如 Twitter、YouTube、SugarCRM、Supply Dynamics、Workday、RightNow、Omniture、Zimbra 等等。我们将在本章后面的“MySQL 的用例”部分详细讨论这一点。MySQL 由瑞典公司 MySQL AB 开发,现在由 Oracle Corporation 分发和支持。MySQL 带有宝贵的历史。
MySQL 一直在不断改进,以成为企业级数据库管理系统。预计 MySQL 8 将成为一个改变游戏规则的版本,因为今天我们处于数字化时代。MySQL 8 已经调整好了,以满足以前版本中难以实现的许多新用例。一些产生大量数据的用例包括社交网络、电子商务、银行/信用卡交易、电子邮件、存储在云上的数据等等。对所有这些结构化、非结构化或半结构化的普遍数据进行分析有助于发现隐藏的模式、市场趋势、相关性和个人偏好。
"我们每个人都有很多东西"
- 詹姆斯·特鲁斯洛·亚当斯
让我们深入了解 MySQL 8 的新功能、优势、用例以及 MySQL 8 的一些限制,这是令人兴奋的,让我们做好准备。
MySQL 概述
结构化查询语言(SQL)用于操作、检索、插入、更新和删除关系数据库管理系统(RDBMS)中的数据。简单地说,SQL 告诉数据库要做什么,以及它需要什么。SQL 是所有 RDBMS 系统(如 MySQL、MS Access、MS SQL、Oracle、Postgres 等)使用的标准语言。
关系数据库管理系统是 SQL 和所有现代数据库系统(如 MS SQL Server、IBM DB2、Oracle、MySQL 和 Microsoft Access)的基础。
SQL 允许用户从 MySQL 访问数据并定义和操作数据。要嵌入其他语言,您可以利用 SQL 模块、库和预编译器,这些可以帮助您创建/删除数据库和表,允许用户创建视图和存储过程、函数等等。它还可以执行各种其他操作,如允许用户在表、存储过程和视图上设置权限。
MySQL 作为关系数据库管理系统
关系数据库中的数据以有组织的格式存储,以便可以轻松检索信息。数据将存储在由行和列组成的不同表中。然而,还可以在不同表之间建立关系,有效地存储大量数据并有效地检索所选数据。这为数据库操作提供了巨大的速度和灵活性。
作为关系数据库,MySQL 具有与不同表建立关系的能力,如一对多、多对一和一对一,通过提供主键、外键和索引。它还可以执行表之间的连接以检索精确的信息,如内连接和外连接。
SQL 用作与 MySQL 中的关系数据交互的接口。SQL 是美国国家标准学会(ANSI)的标准语言,我们可以用它操作数据,如创建、删除、更新和检索。
MySQL8 的许可要求
许多行业更喜欢开源技术,因为该技术具有灵活性和节省成本的特点,而 MySQL 通过成为最受欢迎的 Web 应用程序关系数据库而在市场上留下了自己的足迹。开源意味着您可以查看 MySQL 的源代码,并根据自己的需求进行定制,而无需任何费用。您可以从其网站下载源代码或二进制文件,并相应地使用它们。
MySQL 服务器受到通用公共许可证(GNU)的保护,这意味着我们可以自由地将其用于 Web 应用程序,研究其源代码,并修改以满足我们的需求。它还有企业版,包括高级功能。许多企业仍然购买 MySQL 的支持合同,以获取有关各种问题的帮助。
可靠性和可扩展性
MySQL 具有出色的可靠性,无需进行大量故障排除即可良好运行。它还包括许多性能增强机制,如索引支持,负载实用程序和内存缓存。MySQL 使用 InnoDB 作为存储引擎,提供高效的 ACID 兼容事务功能,确保高性能和可扩展性。为了处理不断增长的数据库,MySQL 复制和集群有助于扩展数据库。
平台兼容性
MySQL 具有出色的跨平台可用性,这使其更受欢迎。它灵活地运行在主要平台上,如 RedHat,Fedora,Ubuntu,Debian,Solaris,Microsoft Windows 和 Apple macOS。它还提供应用程序编程接口(APIs)以与各种编程语言(如 C,C++,C#,PHP,Java,Ruby,Python 和 Perl)进行互连。
发布
到目前为止,MySQL 的主要版本发布列表如下:
-
MySQL 5.0 GA 版本于 2005 年 10 月 19 日发布
-
MySQL 5.1 GA 版本于 2008 年 11 月 14 日发布
-
MySQL 5.5 GA 版本于 2010 年 12 月 3 日发布
-
MySQL 5.6 GA 版本于 2013 年 2 月 5 日发布
-
MySQL 5.7 GA 版本于 2015 年 10 月 21 日发布
现在是时候进行主要版本发布了--MySQL 8--它于 2016 年 9 月 12 日宣布,并仍处于开发里程碑模式。
MySQL 的核心功能
让我们回顾一下 MySQL 的一些核心功能。随着我们的进展,我们将在整本书中详细讨论各种功能。
结构化数据库
结构化数据库是传统数据库,许多企业已经使用了 40 多年。然而,在现代世界中,数据量变得越来越大,一个常见的需求已经出现--数据分析。随着数字数据的数量和速度日益增长,使用结构化数据库进行分析变得困难;我们需要以一种有效和高效的方式满足这些需求。在开源世界中,最常用作结构化数据库的数据库是 MySQL。
许多组织使用结构化数据库以有组织的方式存储其数据。基本上,结构化数据库中的数据具有固定字段,预定义的数据长度,并定义了要存储的数据类型,例如数字,日期,时间,地址,货币等。简而言之,在插入数据之前已经定义了结构,这使得我们更清楚地知道哪些数据可以驻留在那里。使用结构化数据库的主要优势是数据易于存储,查询和分析。
非结构化数据库与此相反;它没有可识别的内部结构。它可以有一个庞大的无组织的聚集或各种对象。主要,结构化数据的来源是机器生成的,这意味着信息是从机器生成的,没有人为干预,而非结构化数据是人为生成的数据。组织使用结构化数据库来存储诸如 ATM 交易、航空公司预订、库存系统等数据。同样,一些组织使用非结构化数据,如电子邮件、多媒体内容、文字处理文档、网页、商业文件等。
数据库存储引擎和类型
让我们现在来看一下不同 MySQL 存储引擎的概述。这是一个重要的部分,它简要介绍了不同的数据库存储引擎;我们将在第六章中详细讨论这个问题,MySQL 8 存储引擎。MySQL 将数据存储在数据库中作为子目录。在每个数据库中,数据被存储为表。当你创建一个表时,MySQL 将表定义存储在与表名相同的.frm文件中。您可以使用SHOW TABLE STATUS命令来显示有关您的表的信息:
mysql> SHOW TABLE STATUS LIKE 'admin_user' \G;
*************************** 1\. row ***************************
Name: admin_user
Engine: InnoDB
Version: 10
Row_format: Dynamic
Rows: 2
Avg_row_length: 8192
Data_length: 16384
Max_data_length: 0
Index_length: 16384
Data_free: 0
Auto_increment: 3
Create_time: 2017-06-19 14:46:49
Update_time: 2017-06-19 15:15:08
Check_time: NULL
Collation: utf8_general_ci
Checksum: NULL
Create_options:
Comment: Admin User Table
1 row in set (0.00 sec)
这个命令显示这是一个带有列名Engine的InnoDB表。还有其他信息,您可以参考其他用途,比如行数、索引长度等。
存储引擎是处理不同表类型的 SQL 操作的方式。每个存储引擎都有其自己的优点和缺点。了解每个存储引擎的特性,并选择最适合您的表的存储引擎,以最大限度地提高数据库的性能是很重要的。在 MySQL 8 中创建新表时,InnoDB是默认的存储引擎。
MySQL 服务器使用即插即用的存储引擎架构。您可以使用SHOW ENGINES命令从 MySQL 服务器加载所需的存储引擎,并卸载不必要的存储引擎。
mysql> SHOW ENGINES \G;
*************************** 1\. row ***************************
Engine: InnoDB
Support: YES
Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
XA: YES
Savepoints: YES
*************************** 2\. row ***************************
Engine: MRG_MYISAM
Support: YES
Comment: Collection of identical MyISAM tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 3\. row ***************************
Engine: MEMORY
Support: YES
Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
XA: NO
Savepoints: NO
*************************** 4\. row ***************************
Engine: BLACKHOLE
Support: YES
Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
XA: NO
Savepoints: NO
*************************** 5\. row ***************************
Engine: MyISAM
Support: DEFAULT
Comment: MyISAM storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 6\. row ***************************
Engine: CSV
Support: YES
Comment: CSV storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 7\. row ***************************
Engine: ARCHIVE
Support: YES
Comment: Archive storage engine
Transactions: NO
XA: NO
Savepoints: NO
*************************** 8\. row ***************************
Engine: PERFORMANCE_SCHEMA
Support: YES
Comment: Performance Schema
Transactions: NO
XA: NO
Savepoints: NO
*************************** 9\. row ***************************
Engine: FEDERATED
Support: NO
Comment: Federated MySQL storage engine
Transactions: NULL
XA: NULL
Savepoints: NULL
9 rows in set (0.00 sec)
InnoDB 概述
InnoDB是所有其他可用存储引擎中广泛使用的默认存储引擎。它于 2008 年作为插件与 MySQL 5.1 一起发布。MySQL 5.5 及更高版本将InnoDB作为默认存储引擎。它于 2005 年 10 月被 Oracle Corporation 收购,从芬兰公司 Innobase Oy 手中接管。
InnoDB 表支持符合 ACID 的提交、回滚和崩溃恢复功能,以保护用户数据。它还支持行级锁定,有助于更好的并发性和性能。它将数据存储在聚集索引中,以减少基于主键的所有 SQL 选择查询的 I/O 操作。它还支持FOREIGN KEY约束,允许更好地维护数据库的数据完整性。InnoDB 表的最大大小可以扩展到 64 TB,这应该足够满足许多实际用例的需求。
MyISAM 概述
MyISAM是 MySQL 5.5 之前的默认存储引擎。MyISAM存储引擎表不支持 ACID 兼容,与InnoDB相反。MyISAM表只支持表级锁定,因此MyISAM表不是事务安全的;但是,它们经过了优化,用于压缩和速度。通常在需要主要读操作和最小事务数据的情况下使用。MyISAM表的最大大小可以增长到 256 TB,这有助于数据分析等用例。MyISAM支持全文索引,可以帮助进行复杂的搜索操作。使用全文索引,我们可以索引存储在BLOB和TEXT数据类型中的数据。
内存概述
内存存储引擎通常被称为堆存储引擎。它用于极快地访问数据。这种存储引擎将数据存储在 RAM 中,因此不需要 I/O 操作。由于数据存储在 RAM 中,服务器重新启动时所有数据都会丢失。这种表基本上用于临时表或查找表。该引擎支持表级锁定,从而限制了高写并发性。
关于内存表的重要说明如下:
-
由于内存表将数据存储在 RAM 中,RAM 的存储容量非常有限;如果尝试向内存表中写入过多数据,它将开始将数据交换到磁盘,然后您将失去内存存储引擎的好处
-
这些表不支持
TEXT和BLOB数据类型,也不需要,因为它的存储容量有限 -
这种存储引擎可用于缓存结果;例如查找表、邮政编码和州名
-
内存表支持 B 树索引和哈希索引
存档概述
这种存储引擎用于存储大量历史数据而不需要任何索引。存档表没有任何存储限制。存档存储引擎针对高插入操作进行了优化,并支持行级锁定。这些表以压缩和小的格式存储数据。存档引擎不支持DELETE或UPDATE操作;它只允许INSERT、REPLACE和SELECT操作。
BLACKHOLE 存储引擎概述
这种存储引擎接受数据但不存储数据。它在每次INSERT后丢弃数据而不是存储数据。
现在,这种存储引擎的用途是什么;为什么有人会使用它?为什么我们要运行一个不向表中插入任何内容的INSERT查询?
这种引擎对于具有大量服务器的复制非常有用。BLACKHOLE存储引擎充当主服务器和从服务器之间的过滤服务器,不存储任何数据,只应用replicate-do-*和replicate-ignore-*规则并写入binlogs。这些binlogs用于在从服务器中执行复制。我们将在第八章中详细讨论这一点,MySQL 8 中的复制。
CSV 概述
逗号分隔值(CSV)引擎使用逗号分隔值格式将数据存储在.csv文件类型中。该引擎从数据库中提取数据并将其复制到数据库之外的.csv中。如果从电子表格创建 CSV 文件并将其复制到 MYSQL 数据文件夹服务器中,则可以使用 select 查询读取数据。同样,如果在表中写入数据,外部程序可以从 CSV 文件中读取数据。此存储引擎用于软件或应用程序之间的数据交换。CSV 表不支持索引和分区。CSV 存储引擎中的所有列都需要使用NOT NULL属性进行定义,以避免在创建表时出现错误。
合并概述
这种存储引擎也被称为MRG_MyISAM存储引擎。这种存储引擎合并MyISAM表并将其创建为单个视图。对于合并表,所有列都按相同顺序列出。这些表非常适用于数据仓库环境。
该表通常用于管理与日志相关的表。您可以在单独的MyISAM表中创建不同月份的日志,然后使用合并存储引擎合并这些表。
MyISAM表对操作系统有存储限制,但MyISAM(合并)表集合没有存储限制。因此,使用合并表可以将数据分割成多个MyISAM表,有助于克服存储限制。
合并表不支持分区。此外,您不能将合并表或合并表的任何基础MyISAM表分区到不同的分区中。
联合概述
这个存储引擎允许您在多个物理服务器上创建一个单一的数据库。它打开到另一个服务器的客户端连接,并对那里的表执行查询,根据需要检索和发送行。它最初被宣传为支持许多企业级专有数据库服务器的竞争特性,如 Microsoft SQL Server 和 Oracle,但至少可以说,这总是一个牵强的说法。尽管它似乎能够实现很多灵活性和巧妙的技巧,但它已经被证明是许多问题的根源,并且默认情况下是禁用的。这个存储引擎在 MySQL 中默认是禁用的;要启用它,您需要使用联合选项启动 MySQL 服务器二进制文件。
NDB 集群概述
NDB 集群(也称为NDB)是一种内存存储引擎,提供高可用性和数据持久性功能。
NDB 集群存储引擎可以配置一系列故障转移和负载平衡选项,但最容易的方法是从集群级别开始使用存储引擎。NDB 集群使用 NDB 存储引擎,其中包含完整的数据集,仅依赖于集群中可用的其他数据集。
NDB 集群的部分是独立配置的,与 MySQL 服务器无关。在 NDB 集群中,集群的每个部分被视为一个节点。
每个存储引擎都有其自己的优势和可用性,如下所示:
-
搜索引擎:NDBCluster
-
事务 数据:
InnoDB -
会话数据:
MyISAM或 NDBCluster -
本地化计算:内存
-
字典:
MyISAM
以下图表将帮助您了解哪种存储引擎适合您的需求:
现在您对各种存储引擎以及不同用例有了更好的了解,这将帮助您根据自己的需求做出决策。
现在是时候转到我们的下一个主题,我们将看看 MySQL 8 中可用的令人愉快的新功能。
MySQL 8 中的改进功能
MySQL 数据库开发团队最近宣布了其主要版本 MySQL 8 开发里程碑发布(DMR)。它包含了对迫切需要的问题的重大更新和修复。
您可能会想知道为什么是 5.7 之后的 8!中间版本,也就是 6 和 7,被跳过了吗?当然不是!实际上,6.0 作为更频繁和及时发布的转变的一部分被保留了下来,而 7.0 则是 MySQL 的集群版本。
让我们看看在这个最新版本中引入的一些令人兴奋的功能,如下图所示:
现在是时候详细了解 MySQL 8 的功能了,这将使我们对升级到 MySQL 的主要版本有兴奋和信心的理由。
事务数据字典
直到上一个版本,MySQL 的数据字典是存储在不同的元数据文件和非事务表中的,但从这个版本开始,它将有一个事务性数据字典来存储关于数据库的信息。不再有.frm、.trg或.par文件。所有信息将存储在数据库中,这消除了执行繁重文件操作的成本。文件系统元数据存储存在许多问题,如文件系统的脆弱性、过多的文件操作、难以处理崩溃恢复故障或复制;还很难添加与新功能相关的元数据。现在这次升级通过集中存储信息使其变得简单,并且由于这个数据字典对象可以被缓存在内存中,因此性能得到了改进,类似于其他数据库对象。
这个数据字典将包含执行 SQL 查询所需的数据,如目录信息、字符集、排序规则、列类型、索引、数据库信息、表、存储过程、函数和触发器等。
角色
在 MySQL 8 中,通过引入角色来改进了权限模块,这意味着权限的集合。现在我们可以创建具有多个权限的角色,并将它们分配给多个用户。
以前版本的问题是我们无法为一组用户定义通用权限,每个用户都有单独的权限。假设已经存在 1,000 个具有共同权限的用户,并且您想要删除这 1,000 个用户的写入权限,那么在以前的版本中该怎么做呢?您将不得不采取耗时的方法来更新每个用户,对吗?哎呀!那是一个漫长的任务。
现在使用 MySQL 8,很容易更新权限的任何更改。角色将定义所有所需的权限,并且该角色将分配给那 1,000 个用户。我们只需要在角色中进行任何权限更改,所有用户将自动继承相应的权限。
角色可以创建、删除、授予或撤销权限,从用户账户中授予或撤销权限,并且可以在当前会话中指定默认角色。
InnoDB 自动增量
MySQL 8 已经改变了自动增量计数器值存储机制。以前,它存储在内存中,在服务器重启或服务器崩溃时管理起来相当困难。然而,现在自动增量计数器值在值发生更改时会被写入重做日志,并且在每个检查点上,它将被保存在系统表中,这使得它在服务器重启时是持久的。
在以前的版本中,更新自动增量值可能会导致重复条目错误。假设您在序列中更新了自动增量值,该值大于当前最大值,但随后的插入操作无法识别未使用的值,这可能会导致重复条目问题。通过持久化自动增量值来防止这种情况发生,因此随后的插入操作可以获取新值并正确分配它。
如果发生服务器重启,自动增量值会在以前的版本中丢失,因为它存储在内存中,InnoDB需要执行查询来找出最大使用的值。这已经改变了,因为新版本具有在服务器重启时持久化其值的能力。在服务器重启期间,InnoDB使用数据字典表中存储的最大值来初始化内存中的计数器值。在服务器崩溃的情况下,InnoDB初始化自动增量计数器值,该值大于数据字典表和重做日志。
不可见的索引
MySQL 8 提供了一个功能,可以使索引不可见。这种索引不能被优化器使用。如果您想在没有索引的情况下测试查询性能,使用此功能可以通过使它们不可见来实现,而不是删除和重新添加索引。在索引应该在大型数据集上被删除和重新创建时,这是一个方便的功能。
所有索引默认可见。要使它们不可见或可见,分别使用INVISIBLE和VISIBLE关键字,如下面的代码片段所述:
ALTER TABLE table1 ALTER INDEX ix_table1_col1 INVISIBLE;
ALTER TABLE table1 ALTER INDEX ix_table1_col1 VISIBLE;
改进降序索引
降序索引在 5.7 版本中也存在,但是它们是以相反顺序扫描的,这会导致性能障碍。为了提高性能,MySQL 8 对此进行了优化,并以正向顺序扫描降序索引,这大大提高了性能。当最有效的扫描顺序对某些列具有升序顺序,对其他列具有降序顺序时,它还为优化器带来了多列索引。
SET PERSIST变体
在服务器运行时可以全局和动态地配置服务器变量。有许多系统变量可以使用SET GLOBAL来设置:
SET GLOBAL max_connections = 1000;
但是,这些设置将在服务器重新启动后丢失。为了避免这种情况,MySQL 8 引入了SET PERSIST变体,可以在服务器重新启动后保留变量。
SET PERSIST max_connections = 1000;
扩展的 GIS 支持
在以前的版本中,它仅支持一个坐标系统,一个无单位的 2D 位置,不参考地球上的位置。现在 MySQL 8 添加了对空间参考系统(SRS)的支持,具有地理参考椭球体和 2D 投影。SRS 有助于为位置分配坐标,并建立这些坐标集之间的关系。这些空间数据可以在数据字典存储中进行管理,如ST_SPATIAL_REFERENCE_SYSTEMS表。
默认字符集
默认字符集已从latin1更改为UTF8。UTF8是主导字符集,尽管在以前的 MySQL 版本中不是默认字符集。随着字符集默认值的更改,排序规则已从latin1_swedish_ci更改为utf8mb4_800_ci_ai。随着这些全球接受的变化,字符集和排序规则现在基于UTF8;一个常见的原因是因为UTF8支持大约 21 种不同的语言,这使得系统提供多语言支持。
扩展的位操作
在 MySQL 5.7 中,位操作和函数仅适用于BIGINT(64 位整数)数据类型。我们需要将BIGINT作为参数传递,它将返回BIGINT作为结果。简而言之,它的最大范围为 64 位,可以执行操作。用户需要将其他数据类型转换为BIGINT数据类型,以便执行操作。对于大于 64 位的数据类型,这种类型转换是不可行的,因为它会截断实际值,导致不准确。
MySQL 8 通过支持其他二进制数据类型(如Binary,VarBinary和BLOB)改进了位操作。这使得可以对大于 64 位的数据执行位操作。不再需要类型转换!这允许接受大于 64 位的参数并返回结果。
InnoDB Memcached
现在InnoDB memcached 插件支持多个获取操作,这将真正有助于提高读取性能。现在,可以在单个 memcached 查询中获取多个键值对。由于可以一次获取多个数据,频繁的通信流量也得到了最小化。
InnoDB Memcached 插件还支持范围查询。通过指定特定范围,可以简化范围搜索并检索此范围内的值。
NOWAIT 和 SKIP LOCKED
当其他事务锁定您要访问的行时,您需要等待该事务释放对同一行的锁,以便您可以相应地访问它。为了避免等待其他事务,InnoDB添加了NOWAIT和SKIP LOCKED选项的支持。NOWAIT将立即返回错误,如果请求的行被锁定,而不是进入等待模式,SKIP LOCKED将跳过锁定的行,永远不会等待获取行锁。因此,SKIP LOCKED不会在结果集中考虑锁定的行。
SELECT * FROM table1 WHERE id = 5 FOR UPDATE NOWAIT;
SELECT * FROM table1 FOR UPDATE SKIP LOCKED;
JSON
MySQL 5.7 中已实现了 JSON 支持;这是一个被广泛认可的功能。在 MySQL 8 中,它添加了各种函数,允许我们以 JSON 数据格式获取数据集结果,虚拟列,以及大约 15 个 SQL 函数,允许您在服务器端搜索和使用 JSON 数据。在 MySQL8 中,还添加了额外的聚合函数,可以在 JSON 对象/数组中使用,以更优化的方式表示加载的数据。以下是 MySQL8 中引入的两个 JSON 聚合函数:
-
JSON_OBJECTAGG() -
JSON_ARRAYAGG()
云
在 MySQL 8 中引入了一个新选项innodb_dedicated_server,这对服务器的垂直扩展将非常有帮助。它实际上会自动检测分配给虚拟服务器的内存,并适当地设置 MySQL 8,而无需更改配置文件。考虑到虚拟化和云的采用,这些功能将非常方便。实际上,使用这种配置,您甚至可能不需要获取服务器的 shell 访问权限来编辑配置文件。您可以使用新的SET PERSIST功能从 MySQL 命令行本身设置相关配置,这可以进一步增强安全性,因为您几乎不需要服务器的 shell 访问权限。
资源管理
MySQL 8 推出了一个出色的资源管理功能,可以让您为在服务器上运行的线程分配资源,这些资源将根据为该组配置的资源而执行。目前,CPU 时间是可以为组配置的资源。通过这个功能,您可以在 MySQL 内部进行虚拟资源管理来调整工作负载。MySQL 将在启动时识别可用的虚拟 CPU 数量,之后具有适当权限的用户可以将虚拟 CPU 映射到资源组,并将线程管理对齐到这些组。
我们期望在 MySQL 8 可供一般使用时看到更多功能。现在让我们来看看使用 MySQL 8 的好处。
使用 MySQL 8 的好处
无论您是开发人员还是企业,您显然会选择一个相对于其他相关产品提供更多好处和结果的产品。MySQL 在这个竞争激烈的市场中作为首选提供了许多优势。它具有各种强大的功能,使其成为更全面的数据库。现在让我们来看看使用 MySQL 的一些好处。
安全性
首先想到的是保护数据,因为现在数据变得非常宝贵,如果不满足法律义务,可能会影响业务连续性;事实上,情况可能会很糟糕,甚至可能会迅速关闭您的业务。MySQL 是最安全可靠的数据库管理系统,被许多知名企业使用,如 Facebook、Twitter 和维基百科。它提供了一个良好的安全层,可以保护敏感信息免受入侵者的侵害。MySQL 提供访问控制管理,因此很容易向用户授予和撤销所需的访问权限。还可以为用户定义角色,并列出可以授予或撤销的权限。所有用户密码都以加密格式存储,使用特定的插件算法。
可扩展性
随着技术在多种方式上的广泛使用,每天数据量都在增加。因此,负载平均值正在飙升。在某些情况下,数据可能无法超过某个限制,或者用户数量可能超出范围。可扩展的数据库将是一个可取的解决方案,以便在任何时候都能满足意外需求的扩展。MySQL 是一个有回报的数据库系统,因为它具有可扩展性,可以在数据和应用程序查询的负载方面进行水平和垂直扩展;跨多个 MySQL 服务器分布数据库和应用程序查询负载是相当可行的。向 MySQL 集群添加性能也非常容易,以处理负载。
一个开源的关系型数据库管理系统
MySQL 是一个开源的数据库管理系统,使得调试、升级和增强功能变得快速而简单。您可以查看源代码并进行相应的更改,以自己的方式使用它。您还可以分发 MySQL 的扩展版本,但需要获得许可证。
高性能
MySQL 提供了高速事务处理和最佳速度。它可以缓存结果,从而提高读取性能。复制和集群使系统能够处理更多并发并管理繁重的工作负载。数据库索引还可以加速SELECT查询语句对大量数据的性能。为了提高性能,MySQL 8 在性能模式中包含了索引以加快数据检索速度。
高可用性
如今,在竞争激烈的营销世界中,一个组织的关键点是让他们的系统正常运行。任何故障或停机直接影响业务和收入;因此,高可用性是一个不容忽视的因素。MySQL 相当可靠,并且使用集群和复制配置保持持续可用性。集群服务器可以立即处理故障并管理故障转移部分,以使系统几乎始终可用。如果一个服务器宕机,它将重定向用户的请求到另一个节点并执行所请求的操作。
跨平台能力
MySQL 提供了跨平台的灵活性,可以在 Windows、Linux、Solaris、OS2 等各种平台上运行。它对所有主要语言提供了很好的 API 支持,这使得它非常容易与诸如 PHP、C++、Perl、Python、Java 等语言集成。它也是全球范围内用于 Web 应用程序的Linux Apache MySQL PHP(LAMP)服务器的一部分。
现在是时候动手尝试一下 MySQL 8 了;让我们从在我们的情况下在 Linux 平台上安装 MySQL 8 开始。我们更喜欢在 Linux 操作系统上使用 MySQL 8,因为这在许多组织中是一个常见的用例。我们将在第二章中讨论更多安装内容,安装和升级 MySQL 8。您可以在 MySQL 支持的其他平台上使用它,如 Windows、Solaris、HP-UNIX 等。Linux 提供了各种安装 MySQL 服务器的方法,如下所示:
-
RPM包 -
YUM存储库 -
APT存储库 -
SLES存储库 -
Debian包 -
TAR包 -
从源代码编译和安装
MySQL 8 的限制
一枚硬币有两面;同样,使用 MySQL 8 也会带来一些限制。现在让我们来看看 MySQL 8 的一些方面。
表或数据库的数量
数据库或表的数量对 MySQL 8 没有限制;但是,操作系统文件限制可能会成为 MySQL 8 的限制。存储引擎InnoDB允许扩展到四十亿张表。
表格大小
您可能会遇到最大表大小限制,这不是 MySQL 8 限制的,但可能是由于操作系统文件系统限制。
连接
在单个连接中,可以使用 61 个表,可以进行引用。这也适用于视图定义中引用的表。子查询和视图中的连接也被视为限制的一部分。
Windows 平台
当您在 Windows 平台上使用 MySQL 8 时,会有一些限制:
-
内存:32 位架构限制了一个进程只能使用 2GB 的 RAM。
-
端口:如果您有大量并发,您可能会遇到 Windows 平台的限制,总共只有 4000 个端口可用于客户端连接。
-
大小写不敏感:Windows 平台不区分大小写,因此需要有意识地管理大小写不敏感的表和数据库。
-
管道:
|,通常称为管道符号,在 Windows 上不完全受支持。在进行数据库管理活动时,您可能会在一些情况下遇到它们。 -
路径名分隔符:MySQL 8 的转义字符是
\,这是 Windows 的路径名分隔符。因此,在使用路径分隔符时,您可以使用双斜杠\\作为路径名分隔符的替代。
表列计数
MySQL 8 中每个表的表列限制为 4096 列。基于其他一些因素的列计数限制可能会有所不同,如下一节所述。
行大小
MySQL 表的行限制为 65,535 字节,尽管存储引擎如InnoDB能够支持更大的数据块。
InnoDB 存储引擎
InnoDB存储引擎的限制是我们将更具体地谈论的,因为InnoDB现在在 MySQL 8 中将发挥重要作用。
InnoDB存储引擎的限制
我们将快速浏览一下InnoDB存储引擎的一些限制:
-
表支持的索引数量最多为 64
-
对于使用压缩或动态行格式的表;索引键前缀长度限制为 3072
-
对于使用紧凑或冗余行格式的表;索引键前缀长度限制为 767
-
表中的总列数,包括虚拟生成的列,最多限制为 1,017
-
多列索引的最大允许列数为 16
-
组合的
InnoDB日志文件大小不能超过 512 GB -
InnoDB支持的最大表大小为 256 TB -
在使用 unix 套接字连接时不支持 AdminAPI
-
多字节字符可能会在
InnoDB集群中格式化结果时给出不可靠的对齐列
限制
现在我们将快速浏览一下InnoDB存储引擎的一些限制:
-
Delete from tablename:它实际上并不删除整个表,而是逐行删除表中的每一行。 -
Show table status:它不会始终提供准确的数据;它提供估计值。 -
在计算行数时,由于并发性,
count(*)提供的行数不准确;它只会计算当前事务可见的计数。 -
如果执行了多个
analyze table查询,后面的查询将被阻塞,直到第一个查询完成。 -
InnoDB在与auto_increment列关联的索引末尾保持独占锁。 -
如果
auto_increment整数用完了值;接下来的插入操作将显示重复键错误。 -
级联的外键不能激活触发器。
-
MySQL 保留了一些
InnoDB用于内部目的的列名。以下是一些这样的列名: -
DB_ROW_ID -
DB_TRX_ID -
DB_ROLL_PTR -
DB_MIX_ID
如果使用了这样的保留列名,我们可能会遇到以下示例中显示的输出:
mysql> CREATE TABLE chintan (c1 INT, db_row_id INT)
ENGINE=INNODB;
ERROR 1166 (42000): Incorrect column name 'db_row_id'
-
InnoDB锁在事务中止或提交后立即释放。 -
不支持添加表锁,因为锁是隐式的
commit和unlock tables
数据字典
让我们来看看数据字典的一些已知限制:
-
仅通过复制文件来支持备份和还原的个别
MyISAM表。 -
MySQL 8 不支持手动创建数据库目录。例如,使用
mkdir对 MySQL 服务器数据字典没有影响。 -
DDL操作所需的时间可能比预期的要长,因为这些操作被写入存储、撤消日志和重做,而不是.frm文件,这是我们在 MySQL 先前版本中所看到的。
MySQL8 中组复制的限制
现在是时候讨论一下 MySQL 8 中组复制的一些限制了:
-
大事务:导致 GTID 内容的事务如果太大,则无法在组的其余成员之间复制。建议使用无法在大约五秒钟内复制到组成员的较小数据块,以避免失败。
-
从组创建集群:如果您尝试从现有的组复制设置创建集群,将会导致错误,因为实例已经是复制组的一部分。目前只在 MySQL 的向导模式中注意到这一点;解决该问题的替代方法是禁用向导模式。
-
可串行化隔离级别:当使用多主组时,不支持可串行化隔离级别,这是默认配置。
-
DDL 和 DML 操作:如果对同一数据对象执行并发的不同服务器上的 DDL 和 DML 操作,但使用了多主组模式,则不受支持。
-
复制校验和:目前 MySQL 的设计限制限制了复制事件校验和的使用。
分区的限制
在本节中,我们将讨论分区的限制。
构造禁止
以下是在分区表达式中不允许的构造:
-
声明的变量
-
用户变量
-
存储过程
-
存储函数
-
UDFs
-
插件
运营商
在分区表达式中不允许使用一些运算符,如<<,>>,|,&,~和^。算术运算符如+,-和*的结果必须是整数值或NULL。
表
以下是表分区的一些特定限制领域:
-
MySQL 8 支持的表的最大分区数为 8192。此限制还考虑了子分区。
-
分区表不支持全文索引和搜索。
-
临时表不能进行分区。
-
日志表不能进行分区。
-
在分区的
InnoDB存储引擎上不支持外键。 -
分区键的数据类型应该是整数列或者可以是整数的表达式。表达式或列的值可以是
NULL;但是不支持包括ENUM的表达式。 -
对于使用
KEY进行分区的分区表进行升级,除了InnoDB存储引擎之外,都需要重新加载。
到目前为止,我们已经讨论了 MySQL 的概述、特性、优势和一些限制。现在让我们来看看 MySQL 的精彩用例。
MySQL 的用例
MySQL 之所以具有许多优势,是因为它在全球许多行业和各种用例中都有所涉足。MySQL 的重要性不仅取决于你拥有多少数据,更重要的是你将如何处理这些数据。数据可以来自不可预测的来源,并且可以用于解决许多问题。
现在让我们看看 MySQL 在著名场景上产生的具有现实重要性的用例:
上图帮助我们了解 MySQL 在哪些行业中发挥作用。虽然这不是 MySQL 在业务决策中发挥重要作用的行业的详尽列表,但现在让我们讨论一些行业。
社交媒体
社交媒体内容是信息,以及观看次数、点赞、人口统计学、分享、关注、独立访客、评论和下载等互动。最终,重要的是你的社交媒体相关努力如何为业务做出贡献。
一个著名的例子是 Facebook,Facebook 广泛使用了 MySQL。在 MySQL 上,使用了 PB 级的数据来提供点赞、分享和评论。Facebook 在 MySQL 的InnoDB存储引擎上开发了RocksDB存储引擎,利用了 InnoDB 存储引擎的许多优势,因为 Facebook 主要关注存储优化。尽管目前 MySQL 仍然主要用于其他常见应用。
政府
MySQL 时代在政府中也扮演着重要角色;政府机构广泛使用 MySQL,因为它带来了出色的投资回报和促进开源。事实上,政府部门正在全球范围内大量实施 MySQL。
这可能会让您感到惊讶;美国海军在其关键的飞行计划活动中使用 MySQL。有各种各样的活动,如天气条件、飞行计划、燃油效率、飞行维护等,都在 MySQL 的帮助下作为数据库进行跟踪。毫无疑问,它需要全天候运行并具有完全冗余性;MySQL 能够实现这一点,为美国海军飞机在全球范围内提供服务。
媒体和娱乐
YouTube 也是 MySQL 的重要用户之一。每当您在 YouTube 上观看视频时,它都会从关系数据库或使用 MySQL 的 blob 存储获取数据。 YouTube 还使用 Vitess;这是由 YouTube 发布的一个项目,用于前端 MySQL。 Vitess 有助于进行大量优化,并充当代理以使用 MySQL 为每个数据库请求提供服务。 YouTube 的实施中大量使用了 MySQL 副本;利用 MySQL 缓存是 YouTube 的另一个重要因素。
欺诈检测
在安全性、欺诈检测或合规性方面,如果您的解决方案能帮助您在问题发生之前识别和防止问题,那么它就成为业务的甜蜜点。大多数时候,欺诈检测发生在欺诈已经发生很久之后,那时您可能已经遭受了损失。接下来的步骤显然是尽量减少欺诈的影响,并改进可能帮助您防止再次发生的领域。
许多从事任何类型的交易处理或索赔的公司都广泛使用欺诈检测技术。 MySQL 有助于实时分析交易、索赔等,以及趋势或异常行为,以防止欺诈活动。
PayPal 是一个使用 MySQL 构建欺诈检测系统的典型用例。 PayPal 拥有超过 1 亿活跃用户,分布在美国、日本和欧洲的数据中心。对于这类用例来说,高可用性是一个关键标准,MySQL 已经能够如预期般提供性能。
业务映射
Netflix 拥有数百万订阅用户;它使用 MySQL 来运行其计费系统。 Netflix 在 MySQL 上的核心计费系统是任何业务的重要支撑。 Netflix 拥有数十亿行数据,自其成立以来一直在不断更新和维护数据。合规性是其中一个关键因素,同时还需要从 Oracle 迁移并最小化停机时间;MySQL 成功实现了这两点,并且每天都在不断扩展。
电子商务
Uber 是 MySQL 的另一个知名客户。 Uber 在全球范围内增长迅速,可扩展性、高可用性和投资回报率是需要重点关注的几个重要标准。 Uber 将 MySQL 作为其已知私人汽车运输服务的主要数据库。 Uber 在 MySQL 的基础上大量使用无模式数据库架构作为其后端。
有许多真实世界的 MySQL 用例已经改变了人类、技术、预测、健康、科学和研究、法律和秩序、体育、电子商务、能源和能源、金融交易、机器人技术等方面。 MySQL 是我们日常生活的一个重要组成部分,虽然并非总是明显,但它在许多方面都发挥着重要作用。
总结
在本章中,我们从概述 MySQL 以及 MySQL 数据库的主要特性开始,并探索了 MySQL 8 中新增的功能。之后,我们深入了解了 MySQL 8 的令人兴奋的新功能,以及在业务应用中使用 MySQL 的好处。我们了解了 MySQL 8 目前的限制和限制,这对我们在执行实施时非常重要。最后,我们浏览了一些在现实世界中扮演重要角色的令人印象深刻的用例,它们都将 MySQL 作为它们的数据库。
在下一章中,我们将学习在不同平台上安装 MySQL 8 的详细步骤。本章还涵盖了从 MySQL 8 升级或降级的方法,它们将都会被详细讨论。
第二章:安装和升级 MySQL 8
在上一章中,我们提供了 MySQL 的概述以及 MySQL 8 的新功能、用例和限制。MySQL 在平台方面非常灵活,例如 RedHat、Fedora、Ubuntu、Debian、Solaris、Microsoft Windows 等。它支持与不同语言连接的 API,例如 C、C++、C#、PHP、Java、Ruby 等。对于任何编程平台,设置环境与必要的软件工具是最重要和单调的任务。但对于 MySQL 8 来说,情况并非如此,因为本章重点是如何设置 MySQL 8 的环境。
本章详细解释了 MySQL 8 的安装步骤以及必要的先决条件。提供了在各种平台上设置 MySQL 8 的单独安装步骤。本章还涵盖了升级到 MySQL 8 或从 MySQL 8 降级的方法。
本章将涵盖以下主题:
-
MySQL 8 安装过程
-
MySQL 8 的后安装设置
-
MySQL 8 升级
-
MySQL 8 降级
MySQL 8 安装过程
本节将指导读者选择 MySQL 8 版本,从哪里获取 MySQL 8 以及如何安装 MySQL 8。它还解释了设置所需的后安装步骤。本章提供了有关如何升级或降级从 MySQL 8 的信息。
通用安装指南
MySQL 8 在许多操作系统上都有不同版本。MySQL 8 的发布以两种方式进行管理:
-
开发发布:这具有最新功能,但不建议在生产中使用
-
通用发布:这是一个稳定的发布,用户可以在生产中使用它
MySQL 8 的每个发布都遵循命名约定,表示其状态。每个发布名称由三个数字和一个可选后缀组成。例如,mysql.8.1.2-rc。数字的解释如下:
-
第一个数字(8)表示发布的主要版本。
-
第二个数字(1)表示发布的次要版本。主要和次要数字的组合描述了发布系列。
-
第三个数字(2)表示发布系列中的版本。每个错误修复发布都会增加它。
最新版本的发布是最适合使用的。示例中给出的后缀表示 MySQL 8 发布的稳定性。MySQL 8 发布遵循三个后缀:
-
开发里程碑发布(dmr):MySQL 8 遵循里程碑模型,其中每个里程碑表示经过彻底测试的功能。
-
发布候选人(rc):新功能可能会在此版本中发布,但目的是修复先前发布的功能中的错误。
-
没有后缀:这表示通用可用性(GA)或生产发布。此版本稳定,并通过了早期阶段。它可靠且适用于生产。
如前所述,每个发布之前都是 DMR,然后是 RC,最后是 GA 发布状态。现在,在决定安装 MySQL 8 版本之后,是时候选择分发格式了。
二进制分发被推荐用于通用用途。它以原生格式提供给许多平台。例如,Linux 的 RPM 软件包和 OS X 的 DMG 软件包。
下载 MySQL 8
要从官方网站获取 MySQL 8,请参考以下网址:dev.mysql.com/downloads/。MySQL 还提供了一个镜像网站:dev.mysql.com/downloads/mirrors.html。当您到达下载页面时,您可以在页面底部看到版本选择选项卡,其中显示了两个选项卡:
-
通用可用性(GA)发布
-
开发发布
根据前一节,从列表中选择合适的版本,然后单击下载按钮。
验证软件包的完整性
这是下载软件包可用并准备安装的阶段。这是一个可选步骤,但我们建议这样做,以避免在安装过程中出现错误。有三种不同的方法可用于检查完整性:
-
使用 MD5 校验和
-
使用加密签名
-
使用 RPM 完整性验证机制
使用 MD5 校验和
这是检查完整性的最简单方法,需要很少的工作。MySQL 下载页面本身提供了一个 MD5 校验和,对于每个 MySQL 产品都是唯一的。下载 MySQL 8 后,我们只需确保下载文件的校验和与下载页面上提供的校验和匹配即可。有许多工具可用于不同操作系统来比较校验和。在这里,我们提供了一个使用命令行和一个名为 winMD5Sum 的图形工具的 MD5 校验和示例,用于 Windows 操作系统。
执行以下步骤以执行命令行:
-
从
www.fourmilab.ch/md5/下载实用程序 -
在
E:\Softwares位置下解压文件 -
转到命令行并执行以下命令:
E:\Softwares\md5>md5.exe
E:\Softwares\mysql-installer-community-5.7.19.0.msi
2578BFC3C30273CEE42D77583B8596B5
E:\Softwares\mysql-installer-community-5.7.19.0.msi
执行以下步骤以执行图形工具:
-
点击页面上的下载 WinMD5Sum 选项。它将下载
winMD5Sum.exe到您的计算机上。 -
运行下载的
Install-winMD5Sum.exe并将其安装在本地计算机上。 -
安装成功后,打开 winMD5Sum 工具。这将打开一个对话框,在对话框中您必须选择下载的
MySQL.msi文件。 -
点击计算按钮。这将计算已下载文件的 MD5 校验和。
-
在比较文本框中输入 MySQL 下载页面上提供的 MD5 校验和,然后点击比较按钮。
使用加密签名
这种完整性验证技术需要一个公共的 GPG 构建密钥。该密钥可以从pgp.mit.edu/ URL 获取。下载构建密钥后,您必须执行以下步骤:
-
导入构建密钥
-
从 MySQL 网站下载所需的 MySQL 8 软件包及其相关签名
确保 MySQL 软件包名称及其下载的签名文件名称相同。这两个文件必须放在一个共同的存储位置下。
- 现在,是时候执行以下命令进行验证了:
cmd> gpg --verify package_name.asc
对于 Microsoft Windows,还有一些 GUI 工具可用于完整性检查。其中最流行的之一是Gpg4win。要在 Linux 上执行相同的检查,我们有可用的命令,因为 RPM 软件包本身包含 GPG 签名和 MD5 校验和。执行以下命令以验证软件包:
cmd> rpm --checksig package_name.rpm
这种验证技术比 MD5 校验更可靠,但非常复杂,需要更多的完整性检查工作。
在 Microsoft Windows 上安装 MySQL 8
MySQL 提供 32 位和 64 位版本。有多种安装 MySQL 8 在 Microsoft Windows 上的方法。最常见的方法是使用安装程序,在本地系统上安装和配置 MySQL 8。
在安装 MySQL Community 8.0 服务器之前,请确保系统上已安装了 Microsoft Visual C++ 2015 可再发行包。
MySQL 8 可以作为标准应用程序运行,也可以作为 Windows 服务运行。使用服务,用户可以使用 Windows 服务管理工具控制和测量操作。每个平台都有三种主要的分发格式:
-
安装程序分发:这包括 MySQL 8 服务器以及其他产品,如 MySQL Workbench、MySQL for Excel 和 MySQL Notifier。安装程序还可用于将产品升级到其他版本。
-
源分发:顾名思义,这包含所有源代码以及所有支持的文件。需要 Visual Studio 编译器才能使其可执行。
-
二进制分发:此分发以 ZIP 文件格式提供。它包含除安装程序之外的所有必需文件。用户必须将文件解压缩到所选目录中。
Windows 特定注意事项
在 Microsoft Windows 上安装 MySQL 8 之前,请考虑以下几点:
- 防病毒软件:众所周知,防病毒软件使用指纹技术,将快速更改的文件视为潜在的安全风险。在 MySQL 8 中,有一些目录包含 MySQL 8 相关数据和临时表信息,并且经常更新。因此,防病毒软件有可能将这些文件视为垃圾邮件。这也会影响性能。
防病毒软件提供配置以排除一些目录,因此建议排除 MySQL 8 数据目录和临时目录。默认情况下,MySQL 8 将临时数据存储到 Microsoft Windows 临时目录中。要更改 MySQL 8 中的此默认配置,请参考my.ini文件的tempdir参数。
- 大表支持:在 NTFS 或任何新文件系统上使用 MySQL 8 以支持大小超过 4 GB 的大表。对于这些更大的表,用户必须在创建表时定义
MAX_ROWS和AVG_ROW_LENGTH属性。
MySQL 8 安装布局
微软 Windows 默认情况下,将C:\Program Files目录视为 MySQL 8 安装目录。然而,在安装时我们可以选择目录。无论安装位置如何,安装后的子目录结构保持不变。对于 Microsoft Window 布局,请参考以下表格:
| 目录 | 目录内容 | 备注 |
|---|---|---|
bin | mysqld服务器,客户端和实用程序 | |
%PROGRAMDATA%\MySQL\MySQL Server 8.0\ | 日志文件,数据库 | Windows 系统变量%PROGRAMDATA%默认为C:\ProgramData |
examples | 示例程序和脚本 | |
include | 包括(header)文件 | |
lib | 库 | |
share | 包括错误消息,字符集文件,示例配置文件,用于数据库安装的 SQL 等各种支持文件 |
您可以在dev.mysql.com/doc/refman/8.0/en/windows-installation-layout.html了解更多关于此主题的信息。
选择正确的安装包
在 Windows 上安装 MySQL 8 时,有多种软件包格式可供选择。MySQL 提供了使用程序数据库(pdb)文件调试安装过程的功能。这些文件以 ZIP 分发方式提供:
-
安装程序包:这是一个基于向导的过程,易于使用。安装程序包仅适用于 32 位,但也可以在 64 位配置上安装 MySQL 8。它不包含 MYSQL 的调试组件;我们必须单独下载 ZIP 文件。安装程序包有两种不同的格式:
-
Web Community:顾名思义,这是用于 Web 安装的。这意味着需要互联网才能使用 Web 社区进行安装。其大小约为 19 MB。其名称定义为通过附加版本的 MySQL-installer-community。
-
社区:此软件包格式用于离线安装。其大小约为 301 MB。其名称定义为通过附加版本的 MySQL-installer-web-community。
安装程序是 MySQL 产品安装和升级的最常见方式。
- Noinstall Archives:这是一个包含不完整安装包文件的手动安装过程。由于这是一个手动过程,因此没有 GUI 可用。用户必须手动安装和配置 MySQL 8 和其他产品(如果需要)。与安装程序不同,它以 ZIP 格式为 32 位和 64 位配置提供两个不同的文件。
MySQL 8 安装程序
MySQL 8 安装程序主要用于简化安装过程以及在 Windows 平台上运行的 MySQL 产品的管理。在产品列表中,我们可以考虑:
-
MySQL 服务器
-
MySQL 应用程序
-
MySQL 连接器
-
文档和示例
MySQL 8 安装程序有两个版本:
-
社区版:可在
dev.mysql.com/downloads/installer/下载。如前所述,安装程序提供 Web 社区和社区包格式。 -
商业版:请参阅
edelivery.oracle.com/下载商业版。商业版包含社区版中可用的所有产品以及以下产品: -
Workbench SE/EE
-
MySQL 企业备份
-
MySQL 企业防火墙
初始设置信息
如前所述,安装程序将引导用户通过向导。一旦我们在主机机器上启动安装程序,它将检测已安装的 MySQL 产品,并将其列入要管理的产品列表。以下是安装程序初始设置中所需的步骤:
-
MySQL 安装程序许可和支持身份验证:这是用户必须在开始 MySQL 8 安装之前接受许可协议的步骤。接受条款后,用户可以添加、更新或删除 MySQL 产品。在商业版中,需要凭据来解除捆绑产品,并且必须与用户在支持站点的 Oracle 帐户匹配。
-
选择设置类型:这是用户必须选择要安装的 MySQL 产品的步骤。安装程序还提供了预定义设置的选项,其中包含一组 MySQL 产品。因此,您可以根据自己的需求选择一个设置类型。以下是安装程序中可用的一些设置。
-
开发者默认:这将安装在下载时选择的 MySQL 8 服务器版本:
-
MySQL 服务器
-
MySQL shell
-
MySQL 路由器
-
MySQL Workbench
-
MySQL for Visual Studio
-
MySQL for Excel
-
MySQL 通知程序
-
MySQL 连接器
-
MySQL 实用程序
-
MySQL 文档
-
MySQL 示例和示例
-
仅服务器:这只安装 MySQL 服务器。
-
仅客户端:这与开发者默认设置类型相同,只是不包含 MySQL 8 服务器或任何特定于客户端的包。
-
完整:这将安装 MySQL 的所有可用产品,如
mysql-server,mysql-client,mysqladmin等。 -
自定义:此选项仅安装用户从目录中选择的产品。在这里,用户可以自由选择所需的产品,而不是安装完整的产品包。
-
路径冲突:当托管系统已经包含一个 MySQL 产品,并且用户试图在相同路径上安装该 MySQL 产品的不同版本时,安装程序将在向导中显示路径冲突错误。安装程序使用户能够以以下方式处理路径冲突:
-
使用向导中的浏览按钮选择不同的位置
-
通过自定义选择选择不同的设置类型或版本
-
通过继续到下一步覆盖现有文件夹
-
取消向导步骤,删除现有产品,然后重新启动安装程序
-
检查要求:每个 MySQL 产品都附有一个
package-rules.xml文件,其中包含所有先决条件软件列表。在初始设置期间,安装程序将检查所需软件的可用性,并在缺少要求时提示用户更新主机。 -
MySQL 安装程序配置文件:安装程序配置文件位于
C:\Program Files。以下是配置文件的详细信息:
| 文件或文件夹 | 描述 | 文件夹层次结构 |
|---|---|---|
| Windows 的 MySQL 安装程序 | 此文件夹包含运行 MySQL 安装程序和MySQLinstallerConsole.exe所需的所有文件,这是一个具有类似功能的命令行程序。 | C:\Program Files (x86) |
Templates | Templates文件夹中有每个 MySQL 服务器版本的一个文件。Templates文件包含用于动态计算一些值的键和公式。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest |
package-rules.xml | 此文件包含要安装的每个产品的先决条件。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest |
produts.xml | products文件(或产品目录)包含可供下载的所有产品的列表。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest |
Product Cache | Product Cache文件夹包含与完整包或随后下载的所有独立MSI文件捆绑在一起。 | C:\ProgramData\MySQL\MySQL installer for Windows |
参考:dev.mysql.com/doc/refman/8.0/en/mysql-installer-setup.html
安装工作流程
MySQL 安装程序遵循每个产品的工作流程:
-
产品下载:安装程序将所有必需的产品 MSI 文件下载到
Product Cache文件夹中。 -
产品安装:安装程序通过 Ready | Install | Installing | Complete 来管理每个产品的状态。
-
产品配置:此阶段使用逐步配置过程来配置产品。安装程序将状态从 Ready | Configure 更改。
-
安装完成:完成安装后,用户可以开始使用该应用程序。
InnoDB 集群沙盒测试设置
在 MySQL 8 中,使用安装程序有两种高可用性实现选项:
-
独立的 MySQL 服务器/经典的 MySQL 复制(默认):此选项手动配置多个服务器,或使用最新版本的 MySQL Shell 配置
InnoDB集群。 -
InnoDB 集群沙盒测试设置(仅用于测试):这也被称为沙盒集群。此选项允许您仅在本地系统上为测试目的创建
InnoDB集群。MySQL 安装程序工具栏提供了一些InnoDB集群中实例的配置。
集群节点在不同的端口上运行。配置完成后,单击摘要选项卡以获取每个集群的端口详细信息。
服务器配置
MySQL 安装程序执行一些基本配置,包括:
-
安装程序将为 MySQL 8 服务器创建一个
my.ini配置文件。文件内容将根据安装过程中选择的选项确定。 -
默认情况下,安装程序将为 MySQL 8 服务器添加 Windows 服务。
-
安装程序将提供 MySQL 8 服务器的默认安装和数据路径。
-
安装程序将为 MySQL 8 服务器创建一些带有角色和权限的用户帐户。它可以创建一个具有有限特权的 Windows 用户到 MySQL 8 服务器。
-
使用显示高级选项,MySQL 安装程序允许定义日志选项的自定义路径。例如,您可以配置单独的错误日志路径,显示查询日志等。
MySQL 8 需要以下服务器配置:
-
服务器配置类型:根据服务器配置类型,系统资源将分配给 MySQL 8 服务器。
-
开发:通过将主机视为个人工作站,它配置 MySQL 8 以使用最少量的内存。
-
服务器:作为服务器,机器上还运行着一些其他应用程序,因此它将配置中等数量的内存。
-
专用:对于专用于 MySQL 8 服务器的专用机器,此选项配置了可用内存的最大使用。
-
连接性:此选项指示与 MySQL 8 服务器的连接。以下选项可用:
-
TCP/IP:此选项启用与 MySQL 8 的 TCP/IP 连接。用户可以定义端口号以及网络访问端口的防火墙设置。
-
命名管道:此选项允许您为连接定义管道名称。
-
共享内存:这允许您为 MySQL 8 服务器定义内存名称。
-
高级配置:此配置启用了额外的日志记录功能,将管理日志记录在单独的文件中。用户可以配置单独文件的路径。例如,配置二进制日志的自定义路径。
-
MySQL 企业防火墙:此选项仅适用于商业版。勾选启用企业防火墙选项以启用防火墙。
-
帐户和角色:帐户和角色用于管理用户的访问权限。在安装过程中,MySQL 安装程序允许您设置根帐户密码和用户帐户。
-
根帐户密码:在安装过程中需要输入根密码。安装程序将检查密码强度,并在违反预定义策略时发出警告。
-
MySQL 用户帐户:这是一个可选步骤,其中定义了一个新的 MySQL 用户帐户,并具有现有用户角色。预定义角色有其自己的权限。
-
Windows 服务:MySQL 8 服务可以以下两种方式进行配置:
-
配置为 Windows 服务:这是安装过程中默认选择的选项。它进一步提供了两个选项:
-
系统启动时启动服务:此选项默认选中,将在系统启动时自动启动 MySQL 8 服务。
-
作为 Window 服务运行:此选项允许将用户帐户与 MySQL 8 服务关联。默认情况下选择系统帐户,其中服务被视为网络服务。使用自定义用户,首先使用 Microsoft Windows 中的“本地安全策略”为用户设置权限。
-
配置为可执行程序:在安装过程中取消选择 Windows 服务选项。
-
插件和扩展:此步骤适用于新安装。如果用户希望从较旧的 MySQL 版本升级,则用户需要在 MySQL 安装程序中选择重新配置选项。
-
高级选项:要启用此选项,请在类型和网络步骤中选中显示高级配置复选框。此选项允许用户定义特定路径的日志文件,例如错误日志、常规日志、慢查询日志和二进制日志。
-
应用服务器配置:用户在 MySQL 安装程序中完成所有配置后,单击“执行”按钮使其可用。安装完成后,单击“完成”按钮,MySQL 安装程序和所有已安装的 MySQL 产品将在 Windows“开始”菜单中可用。
MySQL 安装程序产品目录和仪表板
本节包含有关MySQL 安装程序如何处理产品目录和管理仪表板的详细信息。
产品目录是一个组件,其中包含所有发布的支持 Microsoft Windows 的 MySQL 产品列表。MySQL 安装程序每天更新目录,并提供手动更新目录的选项。产品目录执行以下操作来管理列表:
-
定期更新可用产品列表
-
检查在主机中安装的产品的更新
产品目录列出了所有开发、一般或任何次要版本中可用的产品。
MySQL 安装程序仪表板提供了在主机工作站中管理 MySQL 产品安装的功能。以下是使用仪表板管理产品的方法:
-
MySQL 安装程序提供了一个配置,可以在特定时间间隔更新目录。用户可以通过配置启用或禁用自动更新。仪表板在产品级别显示一个特殊图标,表示其新版本已经可用。
-
用户可以使用以下操作来管理产品:
-
添加:用于下载和安装一个或多个产品。
-
修改:用于在已安装产品中添加或删除功能。
-
升级:用于升级产品。确保在可升级产品窗格中产品级别的复选框被选中。
-
删除:用于从已填充列表中卸载产品。
-
仪表板提供了重新配置功能,用户可以更改已配置的选项和值。应用更改后,MySQL 安装程序将停止 MySQL 8 服务器,然后重新启动以使更改生效。
-
仪表板提供了下载产品目录而不进行升级的功能。此时不更新复选框可用于在不下载的情况下检查与产品相关的当前更改。要执行此功能,请选择复选框,然后单击目录链接。
MySQL 安装程序控制台
MySQL 安装程序包括**M**ySQLinstallerConsole.exe文件,它提供了使用命令提示符执行命令的功能。这个功能在安装 MySQL 安装程序时默认安装。有一些命令可用于管理 MySQL 产品。要查看这些命令的详细信息,请执行help命令。
使用 ZIP 文件安装 MySQL 8
要使用 ZIP 存档安装 MySQL 8,请执行以下步骤:
- 提取安装存档:在此步骤中,选择一个特定目录来提取已安装的 MySQL 8 存档。Microsoft Windows 默认将其安装到
c:\mysql位置。在安装过程中,请确保登录用户具有管理员权限。
确保在安装 MySQL 作为 Windows 服务时没有运行任何 MySQL 服务。
在执行命令时,首先输入-- install,然后指定--default –file 选项;否则,mysqld.exe文件将启动 MySQL 8 服务器。
- 创建选项文件:选项文件是用户可以配置与 MySQL 8 相关命令的地方。MySQL 8 在每次服务器启动时都会引用这个文件。在 Microsoft Windows 中,当 MySQL 8 服务器启动时,它会在 Windows 目录和 MySQL 8 基本目录中搜索选项文件。主要使用
my.ini和my.cnf文件作为选项文件,它们是以纯文本形式存在的。
使用 Windows 操作系统:
-
要获取
Windows目录,请参考WINDIR环境变量。 -
my.ini位于 MySQL 服务器安装的默认位置。 -
选项文件中的路径名使用正斜杠而不是反斜杠指定。如果要使用反斜杠,则需要双反斜杠。
如前所述,选项文件与普通文本文件相同;用户可以使用任何文本编辑器修改它。考虑一个例子,MySQL 8 安装目录和数据目录位于不同位置。在这种情况下,用户必须在mysqld部分的选项文件中提及两个目录的位置:
[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data
请记住,ZIP 存档不会初始化数据目录。要初始化数据目录并在 MySQL 8 系统数据库中填充表,用户必须执行initialize命令。这个过程将在后面的后安装部分中介绍。
- 选择服务器类型:在 MySQL 8 中,为 Microsoft Windows 提供了以下两种服务器:
| 二进制 | 描述 |
|---|---|
| mysqld | 带有命名管道支持的优化二进制文件 |
| mysqld-debug | 类似于mysqld,但是编译时带有完整的调试和自动内存分配检查 |
MySQL 8 在所有 Microsoft Windows 平台上都支持 TCP/IP 和管道。但默认选项是正常模式,因为管道选项会影响性能。它会减慢整体性能。您可以在此处了解更多信息:dev.mysql.com/doc/refman/8.0/en/windows-select-server.html。
- 启动 MySQL 8 服务器:此步骤描述了如何首次启动 MySQL 8 服务器。可以使用命令行或作为 Windows 服务启动。要使用命令行启动它,请执行以下命令。假设 MySQL 8 安装在
E:\MySQL\MySQL Server 8文件夹下:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld”
在执行上述命令后,用户可以看到一系列消息,帮助用户识别错误(如果存在)。命令提示符中的最后两行显示如下。它们表明 MySQL 8 服务已启动,并准备好接受服务器-客户端请求:
mysqld: ready for connections
Version: '8.0.4' socket: '' port: 3306
用户可以省略控制台以获取错误日志,因为 MySQL 8 会在数据目录下的单独日志文件中维护日志,扩展名为.err。启动 MySQL 8 服务器时,用户必须每次使用命令提示符执行相同的命令。要停止 MySQL 8 服务器,请执行以下命令:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqladmin” -u root shutdown
最初安装 MySQL 8 时,根帐户密码未设置。首次启动 MySQL 8 服务器后,用户必须手动设置密码。设置密码的步骤在后续安装后的部分中有详细描述。
mysqld和mysqladmin的路径可能会根据 MySQL 8 的安装位置而有所不同。如果在 MySQL 8 服务器的根用户上设置了密码,则使用-p 选项执行命令并提供密码以成功执行。
-
设置 MySQL 8 的环境变量。如前所述,我们已经用 MySQL 8 服务器安装的完整路径编写了命令。为了简化这个命令,在 Windows 10 中,我们必须通过以下步骤定义 MySQL 8 的环境变量:
-
右键单击我的电脑,选择属性。
-
点击“高级系统设置”。
-
点击右下方的“环境变量”按钮。
-
转到“系统变量”部分,找到“PATH”变量。
-
选择“PATH”变量,点击“编辑”按钮。
-
一个新的对话框打开;点击“新建”按钮,输入 MySQL 8 服务器安装的路径,直到
bin文件位置。例如,E:\MySQL\MySQL Server 8\bin -
在 Windows 中按下所有相关对话框中的“确定”按钮以应用此更改。
应用环境变量后,用户可以在命令提示符中执行任何 MySQL 命令,而无需提供 MySQL 8 的完整路径。
- 将 MySQL 8 作为 Windows 服务启动:建议将 MySQL 8 作为 Windows 服务使用,因为它将在 Windows 启动时启动,并在 Windows 停止时停止。在这种情况下,无需显式启动 MySQL 8 服务。使用 Microsoft Windows 服务实用程序来管理 MySQL 8 服务。要将 MySQL 服务器安装为服务,请使用以下命令:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install
此命令有以下选项用于附加参数:
-
如果我们没有定义服务名称,那么该命令将考虑默认服务为MySQL。
-
使用
-- default -file参数来指定包含服务名称的选项文件名 -
用户还可以使用
--local-service选项,后面跟着服务名称
使用以下命令将 MySQL 服务设置为 Windows 服务,并引用文件my-opts.conf作为 MySQL 8 配置的选项文件:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install MySQL --defaults-file=E:\my-opts.cnf
到目前为止,我们已经讨论了 MySQL 8 服务作为 Windows 服务,但是还有一个带有--install-manual选项的命令可用于启动 MySQL 8 而不使用 Windows 服务。要删除 MySQL 8 服务,请使用--remove命令,如下所示:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install-manual
E:\> "E:\MySQL\MySQL Server 8\bin\mysqld" --remove
在 Linux 上安装 MySQL 8
对于 Linux 上的 MySQL 8 安装,有各种解决方案可用。用户可以根据自己的需求选择任何发行版。以下是不同的发行版,其中有三种进行了详细描述:
-
使用
Yum仓库进行安装 -
使用
APT仓库进行安装 -
使用
SLES仓库进行安装 -
使用
RPM软件包进行安装 -
使用
Debian软件包进行安装 -
使用 Docker 进行安装
-
使用本地软件仓库进行安装
-
使用 Juju 进行安装
使用 Yum 仓库进行安装
执行以下步骤以使用Yum仓库安装 MySQL 8:
-
从
dev.mysql.com/downloads/repo/yum/链接下载Yum仓库。 -
选择适合您安装的 MySQL 软件包。
-
执行安装命令将 MySQL
Yum仓库添加到您的local仓库中:
shell> sudo yum localinstall package_name.rpm
shell> yum repolist enabled | grep "mysql.*-community.*"
用实际的 RPM 软件包名称替换package_name。安装后,执行第二个命令以检查Yum仓库是否已正确安装。
- 选择发布系列:MySQL Yum 仓库包含各种发布系列供安装。执行以下命令以检查可用系列的列表:
shell> yum repolist all | grep mysql
在 MySQL Yum 仓库中,默认情况下启用了最新的 GA 系列进行安装,但除此之外,其他开发系列也以禁用状态可用。对于开发系列的安装,请执行以下两个命令以禁用 GA 发布并启用所需的开发系列:
shell> sudo yum-config-manager --disable mysql57-community
shell> sudo yum-config-manager --enable mysql80-community
定义发布系列的另一种方式是在仓库文件中使用手动条目。例如,将以下条目添加到/etc/yum.repos.d/mysql-community.repo文件中:
mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/
enabled=1
在这里,enabled=1表示启用此系列,enabled=0表示禁用此系列。Yum 一次只允许一个启用的子仓库用于一个发布;如果启用了多个发布系列,则 Yum 仓库将只选择最新的系列。在保存配置文件中的更改后,执行以下命令以检查是否已选择正确的子仓库:
shell> yum repolist enabled | grep mysql
- 安装 MySQL 8:执行以下命令:
shell> sudo yum install mysql-community-server
它将安装带有所有依赖项的 MySQL 8 服务器,例如客户端、客户端的字符集和所需的库。
- 启动 MySQL 8 服务器:第一个命令将启动 MySQL 服务,第二个命令显示 MySQL 服务的当前状态:
shell> sudo service mysqld start
shell> sudo service mysqld status
在初始启动期间,执行以下任务:
-
服务器已初始化
-
SSL 证书和密钥文件在数据目录中生成
-
插件名称
validate_password_plugin已安装并已启用 -
创建了一个超级账户
使用 RPM 软件包进行安装
RPM 软件包可从 Yum 仓库和 SLES 仓库获取,用于 MySQL 8。这是 MySQL 8 安装的推荐方式。RPM 软件包遵循packagename-version-distribution-arch.rpm的语法,其中 distribution 和 arch 分别表示 Linux 发行版和处理器。RPM软件包是所有必需软件包的捆绑包,它们彼此依赖。RPM 软件包遵循与 Yum 仓库安装中讨论的相同步骤。在基于 RPM 的系统中,MySQL 服务不会自动启动。要手动启动它,请执行以下命令:
shell> sudo service mysqld start
与其他安装一样,RPM 软件包安装还会在系统上创建文件和目录,路径如下:
| 文件或资源 | 位置 |
|---|---|
| 客户端程序和脚本 | /usr/bin |
| - mysqld 服务器 | /usr/sbin |
| - 配置文件 | /etc/my.cnf |
| - 数据目录 | /var/lib/mysql |
| - 错误日志文件 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:/var/log/mysqld.log 对于 SLES:/var/log/mysql/mysqld.log |
| - secure_file_priv 的值 | /var/lib/mysql-files |
- System V init 脚本 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:/etc/init.d/mysqld 对于 SLES:/etc/init.d/mysql |
| - Systemd 服务 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:mysqld 对于 SLES:mysql |
| - Pid 文件 | /var/run/mysql/mysqld.pid |
- Socket | /var/lib/mysql/mysql.sock |
| - 密钥环目录 | /var/lib/mysql-keyring |
| - Unix 手册页 | /usr/share/man |
- 包括(header)文件 | /usr/include/mysql |
| - 库 | /usr/lib/mysql |
| - 其他支持文件(例如错误消息和字符集文件) | /usr/share/mysql |
使用 Debian 包进行安装
MySQL APT 仓库或 MySQL Developer Zone 的下载区域提供了 Debian 包。每个 MySQL 组件都有自己的 Debian 包进行安装,但也准备了一个 tarball 捆绑包,将不同的 Debian 包组合成一个单独的捆绑包。tarball 命名约定为 mysql-server_MVER-DVER_CPU.deb-bundle.tar,其中 MVER 表示 MySQL 版本,DVER 表示 Linux 发行版版本,CPU 表示处理器。要使用 Debian 包安装 MySQL 8,请执行以下步骤:
-
从 MySQL 站点下载所需的 tar 包。
-
使用以下命令解压包:
shell> tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tar
- 可能需要
Libaio1库,因此执行库安装命令:
shell> sudo apt-get install libaio1
- 执行以下命令对 MySQL 服务器进行预配置:
shell> sudo dpkg-preconfigure mysql-community-server_*.deb
这是在安装前实施的进程,适用于一组 Debian 包和其他使用 debconf 的配置脚本来检查系统的包。在此过程中,系统将要求输入 MySQL 8 安装的 root 用户密码。
- 安装 MySQL 8 所需的依赖项:
shell>sudo apt-get -f install
MySQL 8 配置文件在 Debian 包中的以下路径下可用:
-
配置文件存储在
/etc/mysql下 -
数据目录存储在
/var/lib/mysql下 -
二进制文件、库和头文件存储在
/user/bin和user/sbin下
MySQL 8 的后安装设置
后安装是描述用户在 MySQL 8 安装后必须执行的基本步骤或配置的过程。
数据目录初始化
在前面的部分中,我们已经看到了 MySQL 8 安装的不同方法。其中一些方法将自动为 MySQL 8 创建数据目录。对于通用二进制分发和源分发,必须创建数据目录。数据目录初始化可以通过以下两个命令之一执行:
E:\> bin\mysqld –-initialize
E:\> bin\mysqld --initialize-insecure
可以根据用户的需求选择这两个命令中的任何一个来生成一个随机的初始密码。无论数据目录初始化的平台如何,用户都可以使用这两个命令。初始化是一种生成随机初始 root 密码的方法。在 initialize-insecure 的情况下,不会生成密码。
另一个选项是使用命令行参数指定安装目录和数据目录,如下命令所示:
E:\> bin\mysqld --initialize --basedir E:\mysql --datadir :\mydata\data
用户还可以在名为 Option 文件的单独文件中指定这些目录,该文件位于 mysqld 参数下。此配置在本章的 Option 文件部分中有详细描述。当用户执行这两个命令中的任何一个时,mysqld 将执行以下步骤:
-
它检查数据目录的存在
-
MySQL 8 服务器将创建系统数据库及其表、授予表、帮助表和时区表
-
它使用
InnoDB表的数据结构初始化系统表空间 -
将创建
root@localhost超级用户账户和其他保留账户
保护初始的 MySQL 账户
本节解释了在工作站上首次执行 MySQL 8 服务器时如何为 root 账户分配密码。当用户在 Windows 中使用安装程序或在 Linux 中使用Debian软件包安装 MySQL 8 时,安装过程提供了输入密码并将该密码分配给 root 账户的选项。但是使用RPM软件包时,将为 root 账户生成随机密码,该密码在安装过程中写入服务器日志文件。初始 root 账户可能有也可能没有密码。要在初始阶段分配密码,请使用以下任一程序:
- 如果 root 账户有随机密码:
-
查看服务器日志文件以获取自动生成的密码。
-
通过执行以下命令连接到 MySQL 8 服务器,使用自动生成的密码:
shell> mysql -u root -p
Enter password: (enter the random root password here)
- 为
root账户设置新密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
- 如果 root 账户没有密码:
- 无需密码连接到 MySQL 8 服务器:
mysql -u root
- 为
root账户设置新密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
分配新密码后,每当您想要连接到 MySQL 8 时,都必须使用新密码。
MySQL 8 服务的启动和故障排除
本节解释了如何启动 MySQL 8 服务器以及如何在启动过程中解决问题。在 Linux 系统上成功安装 MySQL 8 服务器后,执行以下命令启动 MySQL 8 服务:
shell> sudo service mysqld start
要详细检查服务是否已启动,请参考日志文件。您可以使用 status 命令来检查 MySQL 8 服务的状态:
shell> sudo service mysqld status
在收到服务启动/运行消息后,您可以使用以下命令连接到 MySQL 8:
shell> mysql -uroot -p
上述命令会提示输入密码,因此输入密码并按下Enter键。MySQL 提示将显示在那里,您可以输入mysql命令进行执行。在执行上述命令时,可能会出现一些常见问题,因此在这里我们将提出以下故障排除建议:
-
查看
log文件以找到服务启动期间发生的确切错误。如前一节所述,error文件和log文件位于数据目录下。它们的命名约定为host_name.err和host_name.log。通过阅读文件的最后几行,您可以确定在上次执行的命令期间发生的问题。 -
检查所需的端口/套接字是否可用。以下错误将表明所需的端口和套接字不可用,意味着它们正在被其他程序使用。要识别这一点,通过禁用服务来跟踪所有问题。另一个原因是防火墙设置阻止了对所需端口的访问,因此修改防火墙设置并允许对所需端口的访问:
-
无法启动服务器:在 TCP/IP 端口上绑定:地址已在使用中
-
无法启动服务器:在 Unix 套接字上绑定
-
建议将特定参数定义到
Option文件中。如果参数未定义到文件中,则 MySQL 8 将考虑默认参数,因此在使用之前,请参考 MySQL 8 提供的所有可用参数。 -
验证
data目录路径和权限是否正确定义。该目录用作 MySQL 8 的当前目录。要查找数据目录的当前设置路径,请使用mysqld命令执行--verbose和--help命令。如果data目录位于 MySQL 安装目录以外的其他位置,则使用mysqld命令的--datadir选项。对于权限,您将收到错误代码 13,表示权限被拒绝的错误。要解决此问题,请更改所需文件和文件夹的权限。另一种方法是使用 root 用户登录,但这在所有情况下都不可能,因此建议首先采用第一种方法来解决权限问题。
执行命令以测试服务器
执行上述步骤后,现在您的 MySQL 8 服务已启动,并已连接到指定用户。现在,通过执行以下基本命令来检查您的 MySQL 8 服务器是否正常工作:
shell> bin/mysqladmin version
该命令列出了与安装的 MySQL 服务器相关的所有信息,包括其版本详细信息、协议版本等。连接到 MySQL 8 后,执行以下命令以检查是否已正确从服务器检索到信息:
mysql>mysqlshow
mysql>mysqlshow mysql
第一个命令显示服务器中可用的数据库列表。列表可能因系统而异,但mysql和information_schema必须在列表中可用。第二个命令列出了在mysql数据库下创建的所有表。
升级 MySQL 8
在以前的 MySQL 版本中,数据字典存储在基于文件的系统中,而在 MySQL 8 中,它存储在数据字典结构中。因此,升级过程将文件式结构移动到数据字典结构中。从 MYSQL 5.7 GA 版本(即从 5.7.9 或更高版本)可以升级到 MySQL 8。对于 5.7 的非 GA 版本,无法进行升级。在开始升级过程之前,需要了解以下几点。
升级方法
有两种升级方法,它们通过其实施方法进行区分。让我们详细讨论这些方法。
MySQL 的就地升级
顾名思义,这是一个过程,我们将 MySQL 的现有旧版本包替换为更新版本。在开始之前,请确保旧服务器已停止,并在替换包后,使用 MySQL 升级重新启动现有数据目录上的 MySQL 8 服务器。
执行以下步骤进行就地升级:
- 使用以下命令对加密的
InnoDB表空间进行主密钥旋转:
ALTER INSTANCE ROTATE INNODB MASTER KEY;
- 使用
innodb_fast_shutdown命令配置关闭参数:
SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
- 使用以下命令关闭旧的 MySQL 版本:
mysqladmin -u root -p shutdown
-
这是用户将旧包替换为新 MySQL 8 包的升级过程。
-
使用现有的
data目录启动 MySQL 8 服务器。
在服务器启动时,它将检查data字典表。如果不存在,则服务器将在data目录中创建表,并使用其正常启动顺序填充元数据和进程。如果这些步骤成功执行,服务器将通过创建backup_metadata_57目录来执行清理。此外,服务器将事件和 proc 表重命名为event_backup_57和proc_backup_57。如果此步骤失败,则服务器将恢复所有更改。
- 成功完成 MySQL 8 启动后,执行
mysql_upgrade:
mysql_upgrade -u root -p
- 升级后,关闭并重新启动服务器,以检查是否已应用所有更改。
MySQL 8 的逻辑升级
导出或获取旧的 MySQL 版本的转储。安装新的 MySQL 8 版本,并使用 MySQL 升级将转储文件加载到新的 MySQL 8 版本。执行以下步骤来应用逻辑升级:
- 使用
mysqldump命令导出数据:
mysqldump -u root -p --add-drop-table --routines --events --all-databases --
force > data-for-upgrade.sql
--routines 和--events选项用于在转储文件中包含存储例程和事件,并明确定义这些选项以产生效果。
-
关闭旧的 MySQL 服务器。
-
安装新版本的 MySQL 8。
-
初始化
data目录:
mysqld --initialize --datadir=/path/to/8.0-datadir
- 使用新的
data目录启动 MySQL 8 服务器:
mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir
- 将 SQL 转储文件加载到新的
MySQL数据库中:
mysql -u root -p --force < data-for-upgrade.sql
- 使用以下命令升级 MySQL:
mysql_upgrade -u root -p
MySQL 5.7 的升级先决条件
在开始升级之前,执行以下检查以避免后期失败:
- 执行以下命令以检查是否存在绝对数据类型或函数:
mysqlcheck -u root -p--all-databases--check-upgrade
- 使用以下命令检查本机分区支持:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
AND CREATE_OPTIONS LIKE '%partitioned%';
此命令将列出使用不支持本机分区的存储引擎的表。在执行前述查询后,如果发现任何表,则删除表上的分区并更改存储引擎,如以下命令所示:
ALTER TABLE table_name ENGINE = INNODB;
ALTER TABLE table_name REMOVE PARTITIONING;
-
确保 MySQL 5.7 中不包含在 MySQL 8 中用作数据字典的任何表。
-
使用以下代码检查外键约束名称是否不超过 64 个字符:
SELECT CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE LENGTH(CONSTRAINT_NAME) > 64;
- 确保 MySQL 5.7 不包含 MySQL 8 中不可用的功能,例如:
-
如果表使用了 MySQL 8 不支持的存储引擎,则已更改为支持的存储引擎
-
使用 MySQL 8 中不可用的选项或变量进行配置更改
MySQL 8 降级
降级是从升级的反向过程,我们将从 MySQL 的较高版本降级到 MySQL 的较低版本。在本节中,我们将介绍如何从 MySQL 8 降级到 MySQL 5.7。不支持版本跳过的降级意味着不支持从 MySQL 8 降级到 MySQL 5.6。在支持版本跳过的同一系列中,意味着您可以跳过 MySQL 8.y 版本,从 MySQL 8.z 降级到 MySQL 8.x。首先,我们将解释在开始降级之前需要理解的一些基本要点。
降级方法
原地降级意味着关闭 MySQL 8 的新版本,用旧版本的 MySQL 替换其二进制文件或软件包。重新启动旧版本意味着在现有数据目录中的 MySQL 5.7。此降级方法在同一系列的 GA 版本之间得到支持。执行以下步骤进行原地降级:
-
关闭较新版本的 MySQL 8。
-
关闭后,从
data目录中删除InnoDB重做日志文件,以避免降级问题:
rm ib_logfile*
-
将旧版本的 MySQL 定位到新版本的二进制文件或软件包的位置。
-
通过指定
data目录启动降级版本的 MySQL,使用以下命令:
mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
- 执行
mysql_upgrade命令:
mysql_upgrade -u root -p
- 关闭并重新启动 MySQL 服务器,以检查所有更改是否已应用。
对于基于 APT、SLES 和 Yum 存储库安装的 MySQL 安装,不支持原地降级
逻辑降级
使用新版本中的mysqldump对所有表进行转储。安装新版本的 MySQL 8,并将旧版本的转储加载到新数据库中。此降级也支持在同一 GA 发布系列和发布级别中。使用逻辑降级方法支持 MySQL 8.0 到 5.7 的降级。
要执行逻辑降级,请按照以下步骤操作:
- 使用以下代码对数据库进行转储:
mysqldump -u root -p --add-drop-table --routines --events
--all-databases --force > data-for-downgrade.sql
- 关闭 MySQL 服务器,如下所示:
mysqladmin -u root -p shutdown
- 将新的
data目录初始化为旧的 MySQL 版本,使用以下代码:
mysqld --initialize --user=mysql
- 使用新的
data目录启动旧版 MySQL,使用以下代码:
mysqld_safe --user=mysql --datadir=/path/to/new-datadir
- 将转储加载到旧的 MySQL 服务器中,如下所示:
mysql -u root -p --force < data-for-upgrade.sql
- 执行
mysql_upgrade:
mysql_upgrade -u root -p
- 重新启动服务器以应用所有更改,使用以下代码:
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/new-datadir
降级前需要手动更改
本节描述了在降级之前用户需要手动执行的一些更改:
- 系统表更改:MySQL 5.7 为系统表管理单独的表空间,而在 MySQL 8 中,系统表迁移到一个名为
mysql.ibd的单个表空间文件中。因此,在降级到 MySQL 5.7 之前,使用以下命令将系统表移回单独的表空间文件:
ALTER TABLE mysql.columns_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.component TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.db TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.default_roles TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.engine_cost TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.func TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.general_log TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.global_grants TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.gtid_executed TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_category TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_keyword TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_relation TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_topic TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.innodb_index_stats TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.innodb_table_stats TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.plugin TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.procs_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.proxies_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.role_edges TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.server_cost TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.servers TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_master_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_relay_log_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_worker_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slow_log TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.tables_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_leap_second TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_name TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_transition TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_transition_type TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.user TABLESPACE=innodb_file_per_table;
在 MySQL 8.0.2 中,六个系统表的存储引擎从 MyISAM 更改为 InnoDB。它们的名称分别是columns_priv、db、procs_priv、tables_priv和user。因此,在降级之前,通过执行以下命令更改这些表的存储引擎。对于其余的表也应用相同的命令:
ALTER TABLE mysql.columns_priv ENGINE='MyISAM'
STATS_PERSISTENT=DEFAULT
在 MySQL 8.0.2 中,通过添加两个表来更改了mysql.usertable,因此,在降级到 MySQL 5.7 之前,从表中删除这些列:
ALTER TABLE mysql.user drop Create_role_priv;
ALTER TABLE mysql.user drop Drop_role_priv;
- InnoDB 更改:在进行原地降级之前,使用
innodb_fast_shutdown选项关闭 MySQL。使用innodb_fast_shutdown=0关闭服务器。建议在进行原地降级时删除重做日志。
摘要
选择适当的软件及其版本进行开发是一个重要的阶段,对吧?在本章中,我们了解了如何通过了解其版本模式来选择 MySQL 8 的适当版本。我们还学习了在 Microsoft Windows 中使用安装程序和命令行安装 MySQL 8 的执行步骤。对于 Linux 平台,我们使用 Yum 存储库、RPM 包和 Debian 包安装了 MySQL 8。安装后描述了开始使用 MySQL 8 的基本配置。最后,我们解释了如何通过执行步骤从 MySQL 8 升级和降级。
在下一章中,我们将学习有关 MySQL 8 可用的各种程序和实用程序。主要关注如何在 MySQL 8 中使用这些程序以及命令行执行。
第三章:MySQL 8-使用程序和实用程序
在上一章中,我们安装了 MySQL 8,并了解了安装 MySQL 8 的替代方法。我们还学习了如何迁移和升级到 MySQL 8。以下是上一章中解释的摘要主题:
-
MySQL 8 安装
-
安装后设置
-
MySQL 8 升级
-
MySQL 8 降级
在本章中,读者将了解 MySQL 8 中可用的各种程序和实用程序。读者还将了解如何在 MySQL 8 中使用程序和实用程序。读者将学习在 MySQL 8 中使用命令行程序的方法。读者将学习程序的语法以及它们如何使用特定选项来执行特定操作。以下是本章涵盖的主题摘要。
-
MySQL 8 程序概述
-
MySQL 8 命令行程序
-
MySQL 8 客户端程序
-
MySQL 8 管理程序
-
MySQL 8 环境变量
-
MySQL GUI 工具
MySQL 8 程序概述
MySQL 安装中有各种不同的程序。本节将简要概述这些程序。接下来的章节将详细描述每个程序,并且描述将有自己的调用语法和选项来执行操作。
大多数 MySQL 发行版都将拥有所有这些程序,除了特定于平台的程序;例如,在 Windows 中不使用服务器启动脚本。RPM(Red-hat 软件包管理器)发行版非常专业化,并且是分发中所有程序的例外。RPM 发行版有何专业之处?嗯,它们为不同的操作有不同的程序;例如,一个程序将用于服务器,第二个程序将用于客户端,依此类推。如果您的安装中似乎缺少一个或多个程序,那就不用担心。请参阅第二章,安装和升级 MySQL 8,了解可用的分发类型以及其中包含的内容。也许您的分发不包括所有程序,您需要安装额外的软件包。
每个 MySQL 8 程序都有自己的选项,但大多数程序都有一个--help选项,可用于检索有关程序的所有选项的描述。例如,在命令行上尝试mysql --help(即您的 shell 或命令提示符)。
第一行的描述将包含有关已安装的 MySQL 的特定版本信息,以及操作系统和许可信息。下一行将以Usage: mysql [OPTIONS] [database]开头,即程序命令用法的语法,后面的行描述了可用的选项,以便根据使用说明使用它们。这只是我们将要查看的内容的一瞥:带有选项的程序详细信息,它们的用法和默认选项,以及在各种命令行程序、客户端程序、管理程序等中覆盖默认选项值。
有关在命令行中执行程序和指定程序选项的详细信息,请参阅MySQL 8 命令行程序部分*,*随后将列出安装、客户端和服务器启动以及其他实用程序。
简要介绍 MySQL 程序
让我们先从 MySQL 服务器程序开始!
mysqld是第一个程序,也被认为是 MySQL 安装的主要程序。它与几个脚本一起工作,帮助启动和停止服务器。以下是根据其操作范围划分的程序:
-
启动程序
-
安装/升级程序
-
客户端程序
-
管理和实用程序
启动程序
启动程序是在 MySQL 启动期间使用的程序,并根据配置启动所需的后台服务。
-
mysqld:这是 MySQL 服务器守护程序。所有其他客户端程序都使用这个服务器程序与数据库交互。除了维护之外,它必须始终处于启动和运行状态。 -
mysqld_safe:这是服务器启动程序脚本之一,尝试启动mysqld程序。 -
mysql.server:另一个服务器启动程序脚本,用于那些使用包含脚本的 V-style 运行目录的系统。它在特定运行级别启动系统服务。它调用mysqld_safe来启动 MySQL 服务器。 -
mysqld_multi:顾名思义,这是一个启动程序脚本,用于在系统上启动或停止多个 MySQL 服务器。
安装/升级程序
以下是安装和升级操作相关的程序及其各自的用法:
-
comp_err:这个程序用于从错误源文件编译错误消息文件,并在 MySQL 构建或安装操作期间使用。 -
mysql_secure_installation:这个程序用于更新安装 MySQL 时的安全配置,以启用安全性。 -
mysql_ssl_rsa_setup:顾名思义,这个程序用于生成SSL证书和密钥文件以及RSA 密钥对文件,如果这些文件丢失并且需要支持安全连接。 -
mysql_tzinfo_to_sql:这个程序获取主机系统时区信息数据库的内容(描述时区的文件),并将信息加载到 MySQL 的时区表中。 -
mysql_upgrade:顾名思义,用于升级操作。它检查是否存在任何不兼容性,并在必要时进行修复。它还根据 MySQL 新版本中的任何更改更新授权表。
客户端程序
客户端程序是常用于连接到 MySQL 数据库并执行不同查询操作的程序之一:
-
mysql:这是最常用的程序。它是一个用于直接执行 SQL 语句或使用批处理模式中的文件的交互式命令行工具。详细信息在下一个MySQL 8 命令行程序部分中介绍。 -
mysqladmin:这个程序负责执行各种管理操作,如创建或删除数据库、刷新表、重新加载授权表、重新打开日志文件等。该程序还用于从服务器检索信息,如版本、进程和状态。 -
mysqlcheck:这是用于维护表、执行分析、检查、修复和优化表的客户端程序。 -
mysqldump:这是客户端程序,将 MySQL 数据库转储到文本、SQL 或 XML 格式的文件中。它通常被称为数据库备份程序。 -
mysqlimport:这是客户端程序,使用LOAD_DATA_INFILE将文本文件导入到相应的表中。它也通常被称为数据导入程序。 -
mysqlpump:将 MySQL 数据库转储到 SQL 文件的客户端程序。 -
mysqlshow:显示数据库、表、列和索引信息的客户端。 -
mysqlslap:这是用于检查 MySQL 服务器客户端负载能力的客户端程序。该程序模拟多个客户端访问服务器。
管理和实用程序
以下是执行各种管理活动的程序。它们与一些辅助程序一起描述,这些辅助程序有助于管理操作:
-
innochecksum:用于InnoDB离线文件校验和的程序。 -
myisam_ftdump:提供MyISAM表中全文索引信息的实用程序。 -
myisamchk:用于检查、描述、修复和优化MyISAM表的程序。 -
myisamlog:处理MyISAM日志文件内容的实用程序。 -
myisampack:通过压缩生成更小的只读MyISAM表的实用程序。 -
mysql_config_editor:可以在加密和安全的登录路径文件mylogin.cnf中启用身份验证凭据存储的实用程序。 -
mysqlbinlog:可以读取二进制日志文件语句的实用程序。在服务器崩溃的情况下,执行二进制日志文件语句可以提供很大的帮助。 -
mysqldumpslow:可以读取和总结慢查询日志内容的实用程序。
环境变量
使用以下环境变量的 MySQL 客户端程序与 MySQL 服务器进行通信:
-
MYSQL_UNIX_PORT:此变量负责提供用于连接到本地主机的默认 Unix 套接字文件 -
MYSQL_TCP_PORT:此变量负责提供默认端口号,并在 TCP/IP 连接中使用 -
MYSQL_PWD:此变量负责提供默认密码。 -
MYSQL_DEBUG:此变量负责在调试操作期间提供调试跟踪选项 -
TMPDIR:此变量负责提供临时文件和表将被创建的目录
有关程序中环境变量的详细列表和用途,请参见MySQL 8 环境变量部分。使用MYSQL_PWD是不安全的。
MySQL GUI 工具
由 Oracle 公司提供的 MySQL Workbench GUI 工具用于管理 MySQL 服务器和数据库,用于创建,执行和评估查询。它还用于从其他关系数据库管理系统迁移模式和数据以供与 MySQL 一起使用。还有其他 GUI 工具,包括 MySQL Notifier,MySQL for Excel,phpMyAdmin 等。
MySQL 8 命令行程序
在上一节中,我们介绍了 MySQL 8 提供的各种类型的程序,并简要概述了它们的用法。
在本节中,我们将查看命令行程序,并学习如何从命令行执行程序。我们将详细了解选项的提供方式以及它们如何用于管理。
从命令行执行程序
从命令行(shell 或命令提示符)执行程序是 MySQL 中最常用的管理形式之一。许多程序已经添加了管理选项。
执行 MySQL 程序
要执行 MySQL 程序,请输入程序名称,然后输入选项或其他参数,以告诉程序您希望它执行什么操作。以下是一些示例执行命令。这里shell>表示命令解释器。典型的提示符将是c:>\(对于使用command.com或cmd.exe作为命令解释器的 Windows 机器),$(对于使用sh,ksh或bash作为命令解释器的 Unix 机器),以及%(对于使用csh或tcsh作为命令解释器的 Mac 机器)。
shell> mysql --verbose --help
shell> mysql --user=root --password=******** mysampledb
shell> mysqldump -u root personnel
shell> mysqlshow --help
有非选项参数,即没有任何前导破折号的参数,为程序提供补充信息。例如,如果您看到前面示例的第二行,它有一个带有数据库名称mysampledb的第三个非选项参数,因此命令mysql --user=root --password=******** mysampledb告诉mysql程序您要使用mysampledb作为数据库名称。
以单破折号或双破折号(-,--)开头的参数用于指定程序选项。指定程序选项表示程序将连接到服务器的连接类型或将影响操作模式。选项的语法将详细解释,参见为程序指定选项部分。
连接到 MySQL 服务器
在本节中,我们将解释如何建立与 MySQL 服务器的连接。我们将使用客户端程序连接到 MySQL 服务器。要连接到服务器程序,我们需要一些信息来指定 MySQL 帐户的“主机名”、“用户名”和“密码”,因为我们需要告诉客户端程序服务器运行在哪个主机上以及相关的用户名和密码。尽管这些选项都有默认选项值,但在必要时可以覆盖选项值。例如,考虑使用常见的客户端程序mysql:
shell> mysql
在前面的程序中,未指定任何选项,但将自动应用以下默认值:
-
主机名默认值为
localhost -
用户名默认值根据登录名(在 Windows 中为 ODBC 名称或在 Unix 中为登录名)
-
如果未与程序一起指定
-p或--password选项,则不会向程序发送任何选项值 -
第一个非选项参数被视为
mysql程序的默认数据库名称,如果未指定此类选项,则mysql不会选择任何默认数据库
应用于客户端程序mysql的原则也适用于其他客户端程序,如mysqldump、mysqladmin或mysqlshow。现在让我们看一个具有特定选项值参数的示例客户端程序连接:
shell> mysql --host=localhost --user=root --password=mypwd mysampledb
如您在前面的示例中看到的特定选项值,主机应被视为localhost,用户值提供为myname。密码也被指定,最后,指定了一个非选项参数,告诉程序使用mysampledb作为默认数据库名称。
为程序指定选项
在前面的部分中,我们已经看到程序选项如何根据客户端程序中指定的参数值改变操作模式。在这里,我们将看几种指定 MySQL 程序选项的方法。这些包括:
-
在程序名称后面提供命令行选项。这是提供选项的常见方式,但它仅适用于该时间执行程序的执行。
-
在程序开始执行之前读取的选项文件中提供选项。这是提供您希望程序每次执行时使用的选项的常见方式。
-
在环境变量中提供选项。通过使用这种方法,您还可以指定每次执行程序时要应用的选项。在一般实践中,使用选项文件通常用于此目的,但在某些情况下,在环境变量中指定选项值也非常有用;例如,在 Unix 系统上运行多个 MySQL 实例时。
MySQL 程序通过检查相关环境变量来确定首先给出哪些选项,然后处理选项文件,最后考虑命令行中的选项参数。因此,命令行选项具有最高优先级,环境变量具有最低优先级。但是,有一个例外适用,即数据目录中处理的mysqld-auto.cnf选项文件,因此它比命令行选项具有更高的优先级。
命令行选项
使用命令行程序选项时,请遵循以下规则:
-
选项后跟程序名称。
-
选项参数以单破折号或双破折号开头,具体取决于它们使用选项名称的简写形式还是长形式。
-
选项名称区分大小写。例如,
-V和-v都是有效的,因为它们分别是--verbose和--version的简写形式,因此对程序表示不同的含义。 -
选项也可以带有后面跟着选项名称的值。例如,
-h localhost或--host=localhost告诉客户端程序将 localhost 作为主机名。 -
使用短选项,值可以紧跟在选项字母后面,或者两者之间也可以用单个空格。唯一的例外是指定 MySQL 密码选项时。
-
使用长选项,值和名称可以用=号分隔。
-
在选项名称中可以互换使用(-)和(_),例如
--skip-grant-table或--skip_grant_table.。两者都是有效的,并且工作方式相同,但下划线不能用来代替前导破折号。 -
带有数字值的选项值可以使用 K、M 或 G 的后缀表示 1,024 的倍数,大小写不限。考虑以下示例,命令告诉
mysqladmin程序对服务器进行 1,024 次 ping,并且每次 ping 后休眠10秒:
shell> mysqladmin --count=1k --sleep=10 ping
-
对于文件名选项值,避免使用
~元字符,因为它不会按预期解释。 -
包含空格的选项值在命令行指定值时必须用引号括起来。
修改程序选项
一些选项是boolean类型的,控制可以打开或关闭的行为。让我们考虑一个例子,mysql程序。它支持--column-names选项,用于控制在查询结果的第一行中显示列名。为了禁用列名,以下规范将适用于我们:
--disable-column-names
--skip-column-names
--column-names=0
如前面的例子所示,=0 后缀 和 --skip 和 --disable 前缀 有相同的效果。当使用=1后缀和--enable前缀时也适用。
如果使用--loose 前缀指定选项,并且指定的选项不存在,程序将发出警告而不是退出。
对于某些程序,--maximum 前缀可用于与选项名称一起指定限制。它也可以与环境变量一起使用。
使用文件修改选项
大多数 MySQL 程序可以从选项文件中读取启动选项,有时也称为配置文件。这是一种非常方便的方式,可以提供常用的选项,一旦指定,就无需每次执行程序时都指定它们。要检查程序是否读取选项文件,请使用--help选项。例如,考虑mysqld程序,如果它读取选项文件,应该使用--verbose和--help。帮助消息将指示它查找哪个选项文件以及哪个选项组:
使用--no-defualts选项的 MySQL 程序除了.mylogin.cnf之外不会读取任何选项文件。如果服务器程序启动时禁用了persisted_globals_load系统变量,则程序不会读取mysqld-auto.cnf文件。
大多数选项文件都是纯文本文件,可以由任何文本编辑器创建和编辑。这些文件中的例外包括.mylogin.cnf,它具有登录路径选项,由mysql_config_editor实用程序加密。
MySQL 按特定顺序检查 Windows 和 Unix 系统的选项文件,并遵循从读取全局选项开始的优先顺序,例如在 Windows 系统中:
-
%PROGRAMDATA%\MySQL\MySQL Server 8.0\my.ini和%PROGRAMDATA%\MySQL\MySQL Server 8.0\my.cnf -
%WINDIR%\my.ini和%WINDIR%\my.cnf -
C:\my.ini和C:\my.cnf -
BASEDIR\my.ini和BASEDIR\my.cnf -
--defaults-extra-file指定的文件(如果有的话) -
在
%APPDATA%\MySQL\.mylogin.cnf中的登录路径选项(仅限客户端程序) -
对于使用
SET_PERSIST或PERSIST_ONLY(如果是服务器程序)持久化的系统变量在DATADIR\mysql-auto.cnf中
类似地,在 Unix 系统中,它遵循以下读取选项文件的优先顺序:
-
/etc/my.cnf -
/etc/mysql/my.cnf -
SYSCONFDIR/my.cnf -
$MYSQL_HOME/my.cnf(仅限服务器程序) -
使用
--defaults-extra-file指定的文件(如果有的话) -
~/.my.cnf用于特定用户的选项 -
~/.mylogin.cnf用于特定用户的登录路径选项(仅限客户端程序) -
对于使用
SET_PERSIST或PERSIST_ONLY(如果是服务器程序)在DATADIR\mysql-auto.cnf中持久化的系统变量
在前面的选项中,~指的是当前用户的主目录。
选项文件中的空行将被忽略,以及注释。可以使用#或;字符指定注释,#也可以在任何行的中间开始。
group
group是要设置选项的程序或组的名称。它们不区分大小写。一旦将组行添加到选项文件中,所有后续行都适用于命名组,直到指定另一个组行或选项文件结束。
opt_name
这类似于命令行中的--opt_name,打开了命名优化。
opt_name=value
这类似于命令行中的--opt_name,但是在值的位置上,您可以指定带有空格的值,而在命令行中则不行。
包含指令
可以在选项文件中使用!include指令包含另一个选项文件,使用!includedir搜索特定目录以检查选项文件。例如,!include /home/dev/myopt.cnf和!includedir /home/dev,用于目录。MySQL 不考虑的唯一一件事是在目录搜索期间的任何顺序。
在 Windows 系统上,要在!includedir指令中使用的任何选项文件必须以.ini或.cnf扩展名结尾,在 Unix 系统中,它们必须以.cnf结尾。
影响选项文件处理的命令行选项
大多数 MySQL 程序支持选项文件。由于它们会影响选项文件的处理,因此必须在命令行中给出,而不是作为选项文件的一部分。
为了使它们正常工作,必须在其他选项之前给出。以下是一些例外情况:--print-defaults可能会在--login-path、--defaults-file或defaults-extra-file之后立即使用。
--no-defaults和--print-defaults也用于修改选项文件处理。
使用选项设置程序变量
许多 MySQL 程序具有我们可以在运行时操作中使用SET语句设置的内部变量,也可以使用我们指定选项值的相同语法。这将在程序启动时起作用。例如,如果我们使用选项值语法,那么我们必须这样指定:shell> mysql --max_allowed_packet=16M。要使用SET指定运行时选项,我们可以这样指定:mysql> SET GLOBAL max_allowed_packet=16*1024*1024。
要查看选项变量语法是否正确,可以转到mysql并使用以下内容:mysql> show variables like 'max%'。
设置环境变量
在命令提示符中,我们可以设置环境变量,这将影响程序的运行时执行,或者可以设置为永久影响未来的执行。它们可以在启动文件中设置,也可以使用系统提供的界面进行设置。可以在MySQL 8 环境变量部分详细列出可以影响 MySQL 程序的环境变量。
要指定环境变量的值,语法将基于底层命令解释器。对于 Windows 系统,可以使用以下语法设置用户变量:
SET USER=your_user_name
对于 Unix 系统,这取决于 shell,因此如果使用sh、ksh、zsh或bash,则需要使用以下语法:
MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT
如果使用csh或tcsh,请使用setenv,这将使 shell 变量可用于执行环境:
setenv MYSQL_TCP_PORT 3306
执行的设置环境变量的命令将立即影响正在执行的程序,但如果要使环境变量持久存在,您需要在系统提供的界面上指定它,或者可以在命令处理器在启动时使用的启动文件中设置它。在 Windows 上,可以从控制面板选项设置环境变量,在 Unix 上,可以根据您使用的命令行处理器进行设置。对于bash,您需要将值放在.bashrc或.bash_profile中,对于tcsh,请使用.tcshrc。
服务器和服务器启动程序
MySQL 提供了特定的程序,您需要首先执行这些程序才能使 MySQL 正常工作。在接下来的部分中,我们将看看可以根据您的需求使用多个选项的服务器程序和相关启动程序。
mysqld - MySQL 服务器程序
MySQL 服务器是一个守护程序。所有其他程序都通过该服务器连接到数据库,因此它应该始终运行。守护程序通常从名为mysqld_safe的脚本启动。需要该程序脚本,因为它设置适当的环境变量并使用所需的参数-option值执行mysqld程序。
选项
以下是详细介绍各种命令行可用选项的选项:
-
-?,-I,--help:显示程序的使用信息。
-
-# debuglevel,--debug=debuglevel:设置指定的调试级别。
-
-b directory,--basedir=directory:指定用于确定所有其他相关目录的基本目录。
-
--big-tables:用于允许大型结果集。它们被保存为临时结果文件。
-
--bind-address=ip-number:指定服务器将绑定到的 IP 地址。
-
-h directory,--datadir=directory:指定存储数据库数据文件的目录。
-
-l [logfile],--log[=logfile]:添加各种日志信息,包括连接和错误信息。如果未提供参数,则使用
hostname.log作为日志文件,这里的hostname是服务器机器的名称。 -
--log-isam[=logfile]:在日志中添加对数据(ISAM)文件的更改。如果未提供参数,则使用
isam.log作为日志文件,此选项生成的日志只能使用theisamlog实用程序读取和操作。 -
--log-update[=number]:记录数据库更新信息。日志文件被命名为
hostname.num,其中hostname是服务器机器的名称,num是选项的参数,如果未指定参数,则生成唯一数字。 -
-L=language,--language=language:指定服务器的语言(英语、法语、德语等)。
-
-n,--new:启用新例程(可能是不安全的例程)。
-
-S,--skip-new:禁用/启用新例程(可能是不安全的例程)。
-
-O variable=value,--set-variable variable=value:指定并设置变量的值
-
--pid-file=file:获取运行服务器的进程 ID(PID)的文件名。文件的默认值是
hostname.pid,其中hostname是服务器机器的名称。 -
-P port,--port=port:指定网络端口号。
-
--secure:启用网络安全检查。但这会降低数据库性能。
-
--skip-name-resolve:指定仅使用 IP 号码(而不是名称)进行连接。这会增加网络性能。
-
--skip-networking:禁用网络连接,仅允许本地访问。
-
--skip-thread-priority:为所有线程提供相同的优先级。
-
-Sg:禁用访问检查。这允许所有用户对所有数据库拥有完全访问权限。
-
-Sl:指定不执行线程锁定。
-
--use-locking:启用线程锁定。
-
--socket=file:指定 Unix 套接字的文件名。
-
-T,--exit-info:用于在关闭服务器时显示调试信息。 -
-v,-V和--version:显示服务器的版本信息。
mysqld_safe - MySQL 服务器启动脚本
这是在基于 Unix 的系统中启动 MySQL 服务器的最推荐方式,因为它增加了一些安全功能,例如在运行时将信息记录到错误日志中,如果出现错误,则重新启动服务器。
在某些 Unix 平台上,从 RPM 或 Debian 软件包安装的 MySQL 包括systemd支持来管理 MySQL 的启动和关闭操作,因此在这些系统上不安装mysqld_safe。
mysqld_safe尝试执行mysqld并覆盖默认行为以指定您想要执行的服务器的名称。还可以使用--ledir指定目录的选项,以便mysqld_safe将在该目录中查找服务器。mysqld_safe中的大多数选项也在mysqld中可用,如果指定的选项对mysqld_safe是未知的,则会传递给mysqld。mysqld_safe从选项文件中读取mysqld、服务器和mysqld_safe部分中的所有选项。为了向后兼容,mysqld_safe还读取safe_mysqld部分,但是您应该将这样的部分重命名为当前的mysqld_safe。
如前所述,mysqld和mysqld_safe中都指定了非常常见的选项,因此以下选项列表中排除了一些选项:
--core-file-size=size
指定mysqld应该创建的核心文件的大小。
--ledir=dir_name
如果mysqld无法找到服务器,则使用此选项指定服务器所在的目录的路径名。此选项仅可在命令行上使用,而不可在选项文件中使用。在使用systemd的平台上,该值应在MYSQLD_OPTS的值中给出。
--mysqld-safe-log-timestamps
此选项是指定mysqld_safe生成的日志输出中的timestamps格式。
--mysqld=prog_name
指定包含您想要启动的ledir目录中的服务器程序名称。如果mysqld_safe找不到服务器,请使用--ledir选项指定服务器所在的pathname目录。此选项仅在命令行上接受,而不是从选项文件中接受。
--open-files-limit=count
mysqld可以打开的文件数。
--plugin-dir=dir_name
指定插件目录的路径和名称。
--timezone=timezone
这个选项是将timezone环境变量设置为给定的选项值,具体取决于操作系统的时区规范格式。
--user={ username | user_id }
以您拥有用户名的名称运行mysqld服务器。指定user_name或指定数字user ID作为user_id。
mysql.server - MySQL 服务器启动脚本
这是在 Unix/类 Unix 系统的 MySQL 发行版上使用的服务器启动脚本。它使用mysqld_safe来启动 MySQL 服务器程序。该程序还用于包含脚本的V-style运行目录的系统。它在特定运行级别启动系统服务。
basedir=dir_name
指定 MySQL 安装目录的路径。
datadir=data_dir
指定 MySQL 数据目录的路径。
pid-file=file_name
指定服务器写入其进程 ID 的路径名和文件名。
service-startup-timeout=seconds
指定等待服务器启动确认的秒数。如果服务器在此时间内未启动,mysql.server将以错误指示退出。该选项的默认值为 900 秒,值为 0 表示根本不等待启动,提供负值表示永远等待(不应该有超时)。
mysqld_multi - 管理多个 MySQL 服务器
mysqld_multi用于管理在不同 Unix 套接字文件和 TCP/IP 端口上监听连接的多个mysqld进程。它还可以启动或停止服务器并报告其当前状态。
mysqld_multi在my.cnf或提供的文件中搜索名为mysqldN的组,作为--default-file选项。这里 N 可以是任何正数。这个数字被称为选项组号,即GNR。组号将选项组彼此分开,并且在mysqld_multi的参数中用于指定要启动、停止或请求状态的服务器。此组中的选项与用于启动mysqld的[mysqld]组中使用的选项相同。
要执行mysqld_multi,使用以下语法:
shell> mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
在上述语法中,start、stop、reload(停止和重新启动)和 report 指的是要执行的操作。根据指定的GNR列表值,您可以对单个或多个服务器执行有针对性的操作。
请确保所有服务器的数据目录对启动特定mysqld进程的 Unix 帐户完全可访问。除非您确切知道要做什么,否则不要使用 root 帐户。
安装程序
本节讨论的程序在安装过程中或升级 MySQL 时使用,因此在对程序进行任何修改之前,请确保您正确理解它。
comp_err - 编译 MySQL 错误消息文件
这将创建errmsg.sys文件,mysqld用于识别错误消息并显示单独的错误代码。当构建 MySQL 时,通常会自动运行comp_err。errmsg.sys文件是从 MySQL 发行版中的文本文件sql/share/errmsg-utf8.txt编译而成。它还生成sql_state.h、mysqld_ername.h和mysqld_error.h头文件。
comp_err有几个选项,并且可以在前一个命令中使用--help选项检索。
mysql_secure_installation - 改进 MySQL 安装安全性
该程序有办法启用和改进 MySQL 安装的安全性,包括:
-
为
root帐户设置密码。 -
删除可以在
localhost之外访问的root帐户。 -
删除匿名帐户。
-
删除允许任何人访问以
test_开头的数据库的测试数据库权限。 -
如果您希望在本地 MySQL 服务器上进行正常使用,请执行
mysql_secure_installation命令而不带任何参数。它将要求您进一步检查要执行的操作。 -
validate_password插件可用于加强密码检查。如果插件尚未安装,它将要求您安装,一旦安装并启用,它可以验证密码。
使用以下语法执行mysql_secure_installation:
shell> mysql_secure_installation [options]
您可以在这里使用--help选项,并在需要时检索其他选项的列表。
mysql_ssl_rsa_setup - 创建 SSL/RSA 文件
正如其名称所示,此程序用于生成 SSL 证书和密钥文件以及 RSA 密钥对文件,如果这些文件丢失并且需要文件来支持安全连接。如果现有文件已过期,mysql_ssl_rsa_setup也可以用于创建新文件。
mysqlssl_rsa_setup使用Openssl命令,因此在使用它时,有必要在您的机器上安装OpenSSL。为了自动生成这些文件,服务器可以使用使用OpenSSL编译的 MySQL 发行版,这是生成SSL和RSA文件的另一种方式。
执行mysql_ssl_rsa_setup,如下所示:
shell> mysql_ssl_rsa_setup [options]
在这里使用--help选项,并在需要时检索其他选项的列表。
使用ssl``mysql_ssl_rsa_setup降低了ssl的障碍,并使生成所需文件变得更容易,但生成的文件是自签名的,这并不是非常安全的。您可以考虑从相应的机构获取 CA 证书。
mysql_tzinfo_to_sql - 加载时区表
该程序获取hostsystem区域信息数据库(描述时区的文件)的内容,并将信息加载到 MySQL 的时区表中。如果系统没有区域信息数据库,您可以从dev.mysql.com/downloads/timezones.html下载包含POSIX标准timezone_2017c_posix_sql.zip和非POSIX标准timezone_2017c_leaps_sql.zip的可下载包。
mysql_tzinfo_to_sql可以以以下不同的方式执行:
shell> mysql_tzinfo_to_sql tz_dir
shell> mysql_tzinfo_to_sql tz_file tz_name
shell> mysql_tzinfo_to_sql --leap tz_file
运行mysql_tzinfo_to_sql程序后,强烈建议重新启动服务器,以便它不使用任何先前缓存的时区数据。
mysql_upgrade - 检查和升级 MySQL 表
顾名思义,这用于升级操作。它检查任何不兼容性,如果有必要进行修复,并且还会更新 MySQL 新版本中的授权表中的任何更改。它还更新系统表,以便您可以利用在较新版本中添加的任何新特权或兼容性。
在执行升级之前,始终备份当前的 MySQL 安装。
如果mysql_upgrade发现表可能存在不兼容性,它将执行表检查并尝试修复表,如果无法修复,它将要求手动修复表。
每次升级 MySQL 时都应执行mysql_upgrade。它直接与 MySQL 服务器通信,并发送所需的 SQL 语句以执行升级。
运行mysql_upgrade后,我们应该重新启动服务器。如果对系统表进行了任何更改,需要在运行之前确保服务器正在运行。
使用以下语法执行mysql_upgrade:
shell> mysql_upgrade [options]
您可以在此处使用--help选项,并在需要时检索其他选项的列表。
MySQL 8 客户端程序
MySQL 8 客户端程序是通常用于连接到 MySQL 数据库并执行不同查询操作的程序。
以下子节中详细介绍了程序信息,包括mysql - 带有许多命令和相关选项和配置的命令行工具,用于logging,mysqlcheck,mysqldump,mysqlimport,mysqlsh,mysqladmin等等。
mysql - 命令行工具
这是最常用的程序。命令行工具用于直接执行 SQL 语句或以批处理模式使用文件。它支持交互和非交互模式。在本节中,我们将查看mysql命令行以及各种选项,命令,日志记录和其他相关程序。
mysql 选项
mysql是一个长期提供的命令行工具,因此有很多选项可以完成您的工作。以下是带有格式和描述的选项表:
| 格式 | 描述 |
|---|---|
--auto-rehash | 启用自动重新散列 |
--auto-vertical-output | 启用自动垂直结果集显示 |
--batch | 不使用历史文件 |
--binary-as-hex | 以十六进制表示法显示二进制值 |
--binary-mode | 禁用 \r\n - 到 - \n 的转换和将 \0 视为查询结束 |
--bind-address | 使用指定的网络接口连接到 MySQL 服务器 |
--character-sets-dir | 安装字符集的目录 |
--column-names | 在结果中写入列名 |
--column-type-info | 显示结果集元数据 |
--comments | 确定是否保留或剥离发送到服务器的语句中的注释 |
--compress | 压缩客户端和服务器之间发送的所有信息 |
--connect-expired-password | 指示服务器客户端可以处理过期密码沙箱模式 |
--connect_timeout | 连接超时前的秒数 |
--database | 要使用的数据库 |
--debug | 写入调试日志;仅在 MySQL 构建时支持调试 |
--debug-check | 在程序退出时打印调试信息 |
--debug-info | 在程序退出时打印调试信息、内存和 CPU 统计信息 |
--default-auth | 要使用的身份验证插件 |
--default-character-set | 指定默认字符集 |
--defaults-extra-file | 除了通常的选项文件之外,读取命名的选项文件 |
--defaults-file | 仅读取命名的选项文件 |
--defaults-group-suffix | 选项组后缀值 |
--delimiter | 设置语句分隔符 |
--enable-cleartext-plugin | 启用明文身份验证插件 |
--execute | 执行语句并退出 |
--force | 即使发生 SQL 错误也继续 |
--get-server-public-key | 包含 RSA 公钥的文件路径名 |
--help | 显示帮助消息并退出 |
--histignore | 指定要忽略记录的语句模式 |
--host | 连接到给定主机上的 MySQL 服务器 |
--html | 生成 HTML 输出 |
--ignore-spaces | 忽略函数名后的空格 |
--init-command | 连接后要执行的 SQL 语句 |
--line-numbers | 为错误写入行号 |
--local-infile | 启用或禁用LOAD DATA INFILE的LOCAL功能 |
--login-path | 从.mylogin.cnf 中读取登录路径选项 |
--max_allowed_packet | 发送到服务器或从服务器接收的最大数据包长度 |
--max_join_size | 使用--safe-updates时连接中的行的自动限制 |
--named-commands | 启用命名的mysql命令 |
--net_buffer_length | TCP/IP 和套接字通信的缓冲区大小 |
--no-auto-rehash | 禁用自动重新哈希 |
--no-beep | 发生错误时不发出哔声 |
--no-defaults | 不读取任何选项文件 |
--one-database | 忽略除了命令行上指定的默认数据库之外的语句 |
--pager | 用于分页查询输出的给定命令 |
--password | 连接到服务器时使用的密码 |
--pipe | 在 Windows 上,使用命名管道连接到服务器 |
--plugin-dir | 插件安装的目录 |
--port | 用于连接的 TCP/IP 端口号 |
--print-defaults | 打印默认选项 |
--prompt | 将提示设置为指定的格式 |
--protocol | 要使用的连接协议 |
--quick | 不缓存每个查询结果 |
--raw | 写入列值而不进行转义转换 |
--reconnect | 如果与服务器的连接丢失,自动尝试重新连接 |
--i-am-a-dummy, --safe-updates | 仅允许指定键值的UPDATE和DELETE语句 |
--secure-auth | 不以旧(4.1 之前)格式将密码发送到服务器 |
--select_limit | 使用--safe-updates时SELECT语句的自动限制 |
--server-public-key-path | 包含 RSA 公钥的文件路径名 |
--shared-memory-base-name | 用于共享内存连接的共享内存名称 |
--show-warnings | 如果有的话,在每个语句后显示警告 |
--sigint-ignore | 忽略SIGINT信号(通常是键入Control+C的结果) |
--silent | 静默模式 |
--skip-auto-rehash | 禁用自动重新哈希 |
--skip-column-names | 在结果中不写入列名 |
--skip-line-numbers | 跳过错误的行号 |
--skip-named-commands | 禁用命名的 mysql 命令 |
--skip-pager | 禁用分页 |
--skip-reconnect | 禁用重新连接 |
--socket | 对于本地主机的连接,要使用的 Unix 套接字文件或 Windows 命名管道 |
--ssl-ca | 包含受信任的 SSL CA 列表的文件路径 |
--ssl-capath | 包含 PEM 格式的受信任 SSL CA 证书的目录路径 |
--ssl-cert | 包含 PEM 格式 X509 证书的文件路径 |
--ssl-cipher | 用于连接加密的允许密码列表 |
--ssl-crl | 包含证书吊销列表的文件路径 |
--ssl-crlpath | 包含证书吊销列表文件的目录路径 |
--ssl-key | 包含 PEM 格式 X509 密钥的文件路径 |
--ssl-mode | 与服务器连接的安全状态 |
--syslog | 将交互式语句记录到 syslog |
--table | 以表格格式显示输出 |
--tee | 将输出的副本附加到指定文件 |
--tls-version | 加密连接允许的协议 |
--unbuffered | 在每次查询后刷新缓冲区 |
--user | 连接到服务器时要使用的 MySQL 用户名 |
--verbose | 详细模式 |
--version | 显示版本信息并退出 |
--vertical | 垂直打印查询输出行(每个列值一行) |
--wait | 如果无法建立连接,则等待并重试,而不是中止 |
--xml | 生成 XML 输出 |
参考:dev.mysql.com/doc/refman/8.0/en/mysql-command-options.html
要获取有关各个选项的更多信息,请将该选项与--help选项一起使用。
mysql 命令
您发出的每个 SQL 语句都将发送到服务器以进行执行。mysql本身也有一系列命令。要获取所有这些命令的列表,请在mysql>提示处键入\h或\help。
每个命令都有长格式和短格式,可以使用; 除了短格式不能在多行注释中使用。长格式不区分大小写,但短格式命令区分大小写。
help [arg], \h [arg],? [arg], ? [arg]
help arg[]命令用于显示帮助消息,并列出mysql中所有可用的命令。
charset charset_name, \C charset_name
要更改默认字符集,请发出SET_NAMES语句。
clear, \c
要清除命令行中的当前输出或先前的查询结果。
connect [db_name host_name], \r [db_name host_name]
通过提供数据库和host_name参数来重新连接服务器。
edit, \e
要编辑当前提供的输入语句。
exit, \q
退出mysql命令行。
prompt [str], \R [str]
要指定一个字符串并使用mysql提示重新配置它。
quit, \q
退出mysql命令行。
status, \s
这用于检查当前正在使用的服务器连接的状态。
use db_name, \u db_name
要指定使用提供的db_name作为默认数据库。
mysql logging
mysql程序可以按以下类型进行记录。
在 Unix 系统上,它将日志写入默认名称为.mysql_history的历史文件中。
在所有平台上,如果提供了--syslog选项,它将将语句写入系统日志实现。在 Unix 上,它是syslog,在 Windows 上,它是事件日志,在 Linux 发行版上,它通常会写入/var/log/message文件。
mysql 服务器端帮助
要从mysql获取服务器端帮助,使用以下语法。
mysql> help search_string
如果在 help 命令之后提供任何参数,mysql将使用该参数来搜索字符串,以从 MySQL 参考手册内容中访问服务器端帮助。如果没有匹配搜索的字符串,搜索操作将失败,并显示如下:
mysql> help me
Nothing found
Please try to run 'help contents' fro a list of all accessible topics
如果search_string匹配主题的多个内容,则显示匹配主题项的列表。还可以将主题用作search_string,并查找主题的条目。它还包含通配符字符%和_,这些字符对LIKE运算符执行的匹配操作具有相同的含义。
从文本文件执行 sql
mysql客户端通常用于交互式使用,但也允许您从文件中执行 SQL 语句。为此,请创建一个包含需要执行的多个语句的text_file,如下所示:
shell> mysql db_name < text_file
如果将USE db_name保留为text_file的第一条语句,则可以在命令行中省略指定db_name:
shell> mysql < text_file
如果已经使用mysql连接,则使用 source 或\.命令:
mysql> source file_name
通过使用--verbose选项,每个语句在产生结果之前都会显示出来。
mysqladmin - 用于管理 MySQL 服务器的客户端
mysqladmin是用于管理操作的客户端。它可以用于检查服务器的配置、连接状态、删除和创建数据库等。
mysqladmin命令的执行语法如下:
shell> mysqladmin [options] command [command-arg] [command [command-org]] ...
mysqladmin支持大量的程序命令,从create db_name创建名为db_name的新数据库,debug获取调试信息,drop db_name删除数据库,flush-xxxx,其中xxxx可以替换为 logs、hosts、privileges、status、tables、threads 等。kill id杀死服务器线程或多个线程,password new_password设置新密码,ping检查服务器的可用性,shutdown停止服务器,start-slave在从服务器上启动复制,stop-slave停止从服务器上的复制,variables显示服务器系统变量及其相应的值。
mysqladmin status命令显示了有关服务器的配置、连接状态、删除和创建数据库等信息。
除了命令列表之外,还有一些在从服务器检索特定信息时非常有用的选项。可以使用mysqladmin --help命令检索此类信息。
mysqlcheck - 表维护程序
该程序用于表维护。它检查、修复、优化或分析表。该程序可能会耗费时间,特别是对于大型表。mysql_upgrade使用mysqlcheck命令来检查和修复所有表。必须运行mysqld服务器才能使用mysqlcheck命令。
mysqlcheck以用户方便的方式使用CHECK TABLE、REPAIR TABLE、ANALYZE TABLE和OPTIMIZE TABLE。如果mysqlcheck修复表失败,则需要手动修复表。
以下是mysqlcheck命令的执行语法:
shell> mysqlcheck [options] db_name [tbl_name ...]
shell> mysqlcheck [options] --databases db_name ...
shell> mysqlcheck [options] --all-databases
mysqlcheck具有一个特殊功能,即检查表的默认行为。可以通过重命名二进制文件来更改它,例如通过创建mysqlcheck的副本并为mysqlcheck添加符号链接,将mysqlcheck重命名为mysqlrepair程序,之后mysqlrepair可以修复表。这也适用于mysqlanalyze和mysqloptimize选项,使它们成为mysqlcheck命令的默认操作。
与其他管理程序类似,该程序也有许多选项可用于获取特定信息,通过使用mysqlcheck --help命令,可以检索到选项列表。
mysqldump - 数据库备份程序
该程序是一个实用程序,用于通过生成一组 SQL 语句进行逻辑备份,以便重新生成原始数据库表数据和对象定义。它可以备份一个或多个数据库,也可以转移到另一个 SQL 服务器。它还可以以不同格式生成数据输出,如 CSV、XML 或其他分隔文本文件。
性能和可扩展性
不应将其视为备份大量数据的快速或可扩展的解决方案。备份需要一些时间,恢复数据可能非常慢,因为 SQL 语句涉及索引创建、插入的磁盘 I/O 等。它可以逐行检索和转储表数据行;否则,它可以获取整个表并将其缓冲在内存中以进行转储。
以下是mysqldump的执行语法:
shell> mysqldump [options] db_name [tbl_name ...]
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
mysqldump命令有超过 25 个选项可用于修改其操作,可以通过使用mysqldump --help命令来检索。根据您的需求,可以在此命令中使用特定的修改选项,例如调试选项、帮助选项、连接选项、DDL 选项等。
mysqlimport - 数据导入程序
此客户端程序提供了LOAD_DATA_INFILE SQL 语句的CLI接口。大多数选项对应于LOAD_DATA_INFILE语法的子句。
mysqlimport的执行语法如下:
shell> mysqlimport [options] db_name textfile1 [textfile2 ...]
命令的选项可以根据您的需求在 CLI 上或在选项文件的[mysqlimport]或[client]组中指定。它提供了检索和修改数据导入操作的选项,例如使用不同的分隔符格式、调试、强制文件路径、提供默认值、忽略和锁定表等,可以通过使用mysqlimport --help命令来检索。
mysqlpump - 数据库备份程序
该程序是一个实用程序,用于通过生成一组 SQL 语句来进行逻辑备份,以便执行以重现原始数据库表数据和对象定义。它可以备份一个或多个数据库,也可以转移到另一个 SQL 服务器。
mysqlpump具有以下重要功能:
-
数据库和数据库对象的并行处理,加快了转储处理速度
-
更多控制要转储的数据库对象和数据库
-
将用户帐户数据转储到帐户管理语句,而不是插入数据到系统数据库
-
创建压缩输出的能力
-
显示进度指示器
-
转储文件重新加载;对于
InnoDB表,在插入行后添加索引
mysqlpump转储了所有数据库,如下代码中明确指定的:
shell> mysqlpump --all-databases
要转储多个数据库,请指定--databases,然后是要转储的数据库名称。您还可以指定--exclude-databases=,然后是不要转储的数据库名称。有许多选项可用于转储数据库或对象,例如用于指定排除或包含数据库选项的选项,适用于对象(如表、触发器、例程、事件、用户等),如果它们支持多个选项条目:
shell> mysqlpump --include-databases=db1,db2 --exclude-tables=db1.t1,db2.t2
上述命令转储了数据库db1和db2,但它将从数据库db1中排除表t1,从数据库db2中排除表t2。
mysqlpump使用并行处理来实现并发处理,可以在数据库之间或数据库内进行。--default-parallelism=N指定程序创建的队列中使用的默认线程数,N的默认值为2。--parallel-schemas=[N:]db_list根据提供的数据库名称列表设置处理队列。因此,可以控制额外的队列和线程数。
mysqlpump默认不转储performance_schema、nbdinfo或sys,但可以通过指定--include-databases选项来执行,同样它也不转储INFORMATION_SCHEMA。
mysqlsh - MySQL Shell
MySQL 的高级命令行客户端和编辑器是非常著名的 MySQL Shell。它具有使用 Python 和 JavaScript 进行脚本编写的功能。当使用 X 协议连接到 MySQL 服务器时,X DevAPI 可以处理文档和关系数据。它包括 AdminAPI,可以与InnoDB集群一起使用。
MySQL Shell 有许多与之相关的选项,但重要的选项如下:
--port=port_num, -P port_num
要使用的 TCP/IP 端口号为port_num。默认端口为33060。
--node
使用 X 协议创建到单个服务器的节点会话,在 8.0.3 中已弃用。
--js
启动 JavaScript 模式。
--py
启动 Python 模式。
--sql
启动 SQL 模式。
--sqlc
在 ClassicSession 中启动 SQL 模式。
--sqln
在 NodeSession 中启动 SQL 模式。
--sqlx
通过创建 X 协议连接启动 SQL 模式。
--ssl*
以 --ssl 开头的选项指定使用 SSL 连接服务器,并查找证书和 SSL 密钥。它的工作方式与 MySQL 服务器相同,并接受 SSL 选项:--ssl-crl、--ssl-crlpath、--ssl-mode、--ssl-ca、--ssl-capath、--ssl-cert、--ssl-cipher、--ssl-key、--tls-version。
使用 mysqlsh --help 命令可以获取未列出的其他选项。
mysqlshow - 显示数据库、表和列信息
这是主要用于快速检查哪些数据库、它们的表、列和索引是否存在的客户端。它提供了一些 SQL SHOW 语句的接口。
该命令的执行语法如下:
shell> mysqlshow [options] [db_name [tbl_name [col_name]]]
通过执行上述命令,您将获得有关您具有权限的数据库、表或列的信息:
-
如果没有给出数据库,则显示数据库列表
-
如果没有给出表,则显示数据库中所有匹配的表的列表
-
如果没有给出列,则显示表中所有匹配的列和列类型的列表
在前面的命令执行中,如果使用了 SQL 通配符字符(*、?、%、_),则会显示与通配符匹配的名称。如果给出了 * 和 ? 通配符字符,则会将它们转换为 SQL % 和 _ 通配符字符。当尝试显示具有表或列名中的 _ 的列时,它可能会造成混淆,它只显示与模式匹配的名称,但可以通过在命令行的末尾作为单独的参数添加额外的 % 来轻松解决。
该程序有许多选项,可以通过使用特定选项参数来获取所需的信息。以下是一些重要的选项:
--character-sets-dir=dir_name
指定安装字符集的目录名称。
--compress, -C
如果客户端和服务器都支持压缩,则发送的所有信息都将被压缩。
--enable-cleartext-plugin
启用 cleartext 认证插件。
--get--server-public-key
从服务器请求 RSA 公钥,用于基于密钥对的密码交换。此外,如果客户端使用安全连接连接到服务器,则不需要 RSA 密码交换,并且将被忽略。
--keys, -k
显示表索引。
--ssl*
指定以 --ssl 开头的选项,使用证书和 SSL 密钥连接到服务器的 SSL 连接。
使用 mysqlshow --help 命令可以获取这里未列出的许多其他选项。
mysqlslap - 负载仿真客户端
这是用于检查 MySQL 服务器的客户端负载能力的诊断客户端程序。该程序模拟多个客户端访问服务器。
执行语法如下:
shell> mysqlslap [options]
有许多选项可用于修改执行中的命令,其中一些选项,如 --create 或 --query,提供了指定具有特定分隔符的 SQL 语句或文件的方法。
mysqlslap 在三个不同的阶段运行:
-
创建表、模式和可选的存储程序或数据进行测试。它仅使用单个客户端连接。
-
运行负载测试。它使用多个客户端连接。
-
清理(如果之前指定了,删除表,并断开连接)。它使用单个客户端连接。
例如,使用 20 个客户端和每个客户端 100 次查询创建我们自己的查询语句将如下所示 CLI:
mysqlslap --delimiter=";" --create="CREATE TABLE t (i int);INSERT INTO t VALUES (21)" --query="SELECT * FROM t" --concurrency=20 --iterations=100
mysqlslap 也可以添加或创建自己的查询语句,如下面的代码块所示:
mysqlslap --concurrency=7 --iterations=20 --number-int-cols=2 --number-char-cols=2 --auto-generate-sql
在这里,mysqlslap 将使用两个 INT 列和两个 VARCHAR 列的表构建一个语句,并七个客户端对每个表查询 20 次。它还支持指定用于分别创建和查询的语句文件,并运行负载测试。它提供了许多这样的负载测试执行的变化选项,您可以通过在命令行上执行 mysqlslap --help 命令来检查。
MySQL 8 管理程序
本节描述了不同的管理程序以及一些实用程序,这些程序将有助于进行管理操作,如执行校验和、压缩和提取等。
ibdsdi - InnoDB 表空间 SDI 提取实用程序
这是一个实用程序,从InnoDB表空间文件中提取序列化的字典信息。SDI 数据中的序列化字典信息将始终存在于所有持久的InnoDB表空间文件中。它可以在文件表空间文件和通用表空间文件、系统表空间文件和数据字典表空间文件上运行,但不支持使用临时表空间或撤消表空间。
ibd2sdi可以在服务器离线或运行时使用。它从指定的表空间中读取 SDI 的未提交数据,并撤消日志和重做日志,这些日志是不可访问的。
idb2sdi的执行将如下命令行所示:
shell> ibd2sdi [options] file_name1 [file_name2 file_name3 ...]
ibd2sdi还支持多个表空间,但不像InnoDB系统表空间那样一次运行多个表空间。指定每个文件将按如下方式工作:
shell> ibd2sdi ibdata1 ibdata2
ibd2sdi以 JSON 格式输出 SDI 数据。
该程序有许多选项可供使用,可以使用ibd2sdi --help命令检索。
innochecksum - 离线 InnoDB 文件校验和实用程序
这是一个用于InnoDB文件的校验和实用程序。它读取InnoDB表空间文件,为它们计算校验和,并将其与存储的校验和值进行比较。如果比较失败,它将报告带有损坏页面详细信息的错误。它是为了验证停电后的完整性而开发的,但也可以在复制文件后使用。在运行InnoDB时,如果发现任何损坏的页面,它非常有用。它将关闭正在运行的服务器,因此为了避免由于损坏的页面而导致任何生产问题,需要注意。
如果表空间文件是打开的,则无法使用innochecksum。命令的执行语法将如下所示:
shell> innochecksum [options] file_name
innochecksum命令还有一些选项,用于显示正在验证的页面的信息,并可以使用innochecksum --help命令检索。
myisam_ftdump - 显示全文索引实用程序
这是一个用于显示MyISAM表和FULLTEXT索引信息的实用程序。它将扫描和转储整个索引,这可能是一个缓慢和冗长的过程。如果服务器已经在运行,则需要确保首先插入FLUSH TABLES语句。
myisam_ftdump命令的执行将如下代码块所示:
shell> myisam_ftdump [options] <table_name> <index_num>
在前面的示例中,table_name应该是带有.MYI索引扩展名的MyISAM表的名称。
假设测试数据库有一个名为 mytexttable 的表,其定义如下:
CREATE TABLE mytexttable ( id INT NOT NULL, txt TEXT NOT NULL, PRIMARY KEY (id), FULLTEXT (txt) ) ENGINE=MyISAM;
在FULLTEXT索引上创建的 id 为 0,在txt上为 1。如果工作目录是测试数据库目录,则执行myisam_ftdump如下:
shell> myisam_ftdump mytexttable 1
myisam_ftdump也可以用来按出现频率生成索引条目列表,如下所示(Windows 中的第一行,Unix 系统中的第二行):
shell> myisam_ftdump -c mytexttable 1 | sort /R
shell> myisam_ftdump -c mytexttable 1 | sort -r
myisam_ftdump还有一些选项,可以使用myisam_ftdump --help命令检索。
myisamchk - MyISAM 表维护实用程序
myisamchk是一个命令行工具,用于获取关于数据库表的信息,检查、修复和优化非分区的MyISAM表。它适用于MyISAM表。
CHECK_TABLE和REPAIR_TABLE语句也可用于检查和修复MyISAM表。
myisamchk命令的执行如下代码块所示:
shell> myisamchk [OPTIONS] tables[.MYI | .MYD]
在运行myisamchk命令之前,必须确保没有其他程序在使用表。否则,它将显示警告消息,提示:警告:客户端正在使用或未正确关闭表。为了有效地做到这一点,关闭 MySQL 服务器或锁定myisamchk正在使用的所有表。
该程序有许多选项可用于执行表维护。
myisamlog - 显示 MyISAM 日志文件内容
该程序是用于处理 MyISAM 日志文件内容的实用程序。启动 MySQL 服务器时,使用--log-isam=log_file选项。
执行myisamlog命令的语法如下代码块所示:
shell> myisamlog [options] [file_name [tbl_name] ...]
默认操作标记为更新,如果进行恢复,则所有写入、更新和删除都会被执行,只计算错误。myisam.log是默认的日志文件名。
该程序具有一些用于指定偏移量、恢复、打开多个文件等的选项,可以使用myisamlog --help命令检索。
myisampack - 生成压缩的只读 MyISAM 表
这是一个压缩MyISAM表的实用程序。它分别压缩表中的每一列,并将数据文件压缩约 40%至 70%。
MySQL 最好使用mmap()函数对压缩表进行内存映射;否则,它将使用正常的读/写文件操作。
myisampack不支持分区表。
一旦表被打包,它们就变成了只读。
停止服务器,然后进行压缩表是执行压缩操作的安全方式。
myisampack的执行语法如下命令行中的块:
shell> myisampack [options] file_name ...
指定索引文件名时,可以带有或不带有.MYI文件,并且如果不在数据库目录中,还可以添加pathname。
使用myisampack压缩表后,应使用myisampack -rq重新构建压缩表的索引。它支持一些常见选项,如版本控制、调试等,以及特定的压缩检查,如--test、--backup、--join=big_tbl_name、--silent等。如果您想进行详细检查,可以在命令行上执行myisampack --verbose --help命令。
mysql_config_editor - MySQL 配置实用程序
这是一个实用程序,用于在加密的登录路径文件中存储和更新认证凭据,文件名为.mylogin.cnf。
有关详细信息,请使用mysql_config_editor --verbose --help命令在命令行上执行。
mysqlbinlog - 用于处理二进制日志文件的实用程序
该程序是用于处理服务器的二进制日志文件的实用程序。二进制日志文件包含描述对数据库内容的修改的事件数据。服务器以二进制格式将此类内容写入文件。为了将它们转换为可读(文本)格式,使用mysqlbinlog实用程序。
mysqlbinlog还可以用于显示由从服务器在复制设置期间写入的中继日志文件的内容,因为中继日志文件和二进制日志文件的格式相同。
程序语法的执行如下代码块所示:
shell> mysqlbinlog [options] log_file ...
有几个选项可以修改mysqlbinlog的输出格式和用法。它们列如下:
-
它可以转换为包含字节位置、事件时间戳和发生的事件类型的十六进制转储格式
-
它还提供了一种行事件显示格式,以伪 SQL 语句的形式显示数据修改信息
-
它还用于通过提供所需的选项值(如备份文件的路径和备份中的类型或格式)来备份二进制日志文件的内容
-
当使用
mysqlbinlog连接到 MySQL 服务器时,它会提供一个特定的服务器 ID 来标识自己,并从服务器请求二进制日志文件
该程序具有一些常见选项,未列出,但可以使用mysqlbinlog --help命令检索。
mysqldumpslow - 汇总慢查询日志文件。
该程序是一个实用程序,用于读取慢查询日志文件的日志内容,其中包含执行时间较长的查询。它解析 MySQL 慢查询日志文件并打印出查询内容的摘要。
它通常将类似的查询分组在一起,除了特定的数字或字符串数据值。它会将这些值抽象化,并分别使用 N 和 S 显示摘要输出。-n 和 -a 选项用于修改值的抽象行为。
在命令行语法中执行程序的方式如下所示:
shell> mysqldumpslow [options] [log_file ...]
您可以通过使用一些选项来修改输出,例如限制结果的数量 -t N,其中 N 是要显示的查询结果的数量。-s 代表按查询时间、锁定时间或行数排序类型,-r 代表反转排序顺序。
MySQL 8 环境变量
在本节中,我们将查看直接或间接用于不同 MySQL 程序的环境变量的数量,并使用环境变量改变它们的行为。
命令行提供的选项优先于选项文件和环境变量中指定的值,同样,选项中的值优先于环境变量;因此,在大多数情况下,最好使用选项文件而不是环境变量来修改行为。
以下是环境变量和变量描述的列表:
-
CXX: 用于运行 CMake 的 C++ 编译器的名称 -
CC: 用于运行 CMake 的 C 编译器的名称 -
DBI_USER: Perl DBI 的默认用户名 -
DBI_TRACE: Perl DBI 的跟踪选项 -
HOME:mysql历史文件的默认路径是$HOME/.mysql_history -
LD_RUN_PATH: 用于指定libmysqlclient.so的位置。 -
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN: 启用mysql_clear_password认证插件 -
LIBMYSQL_PLUGIN_DIR: 查找客户端插件的目录 -
LIBMYSQL_PLUGINS: 预加载的客户端插件 -
MYSQL_DEBUG: 调试时的跟踪选项 -
MYSQL_GROUP_SUFFIX: 可选的组后缀值(例如指定--defaults-group-suffix) -
MYSQL_HISTFILE:mysql历史文件的路径;如果设置了此变量,其值将覆盖$HOME/.mysql_history的默认值 -
MYSQL_HISTIGNORE:指定不应将其记录到$HOME/.mysql_history或orsyslog if --syslog的语句模式 -
MYSQL_HOME: 服务器特定的my.cnf文件所在目录的路径 -
MYSQL_HOST: 服务器特定的my.cnf文件所在目录的路径 -
MYSQL_PWD: 连接到mysqld时的默认密码;使用此选项是不安全的 -
MYSQL_TCP_PORT:默认的 TCP/IP 端口号 -
MYSQL_TEST_LOGIN_FILE:.mylogin.cnf登录路径文件的名称 -
PATH: 用于 shell 查找 MySQL 程序 -
PKG_CONFIG_PATH:mysqlclient.pcpkg-config文件的位置 -
TMPDIR: 创建临时文件的目录 -
TZ: 这应该设置为您的本地时区 -
UMASK: 创建文件时的用户文件创建模式 -
UMASK_DIR: 创建目录时的用户目录创建模式 -
USER: 连接到mysqld时 Windows 上的默认用户名
MYSQL_TEST_LOGIN_FILE 是由 mysql_config_editor 创建的登录路径文件的路径名。
UMASK 和 UMASK_DIR 变量用作模式而不是掩码。
如果使用 pkg-config 构建 MySQL 程序,则必须设置 PKG_CONFIG_PATH。
MySQL GUI 工具
有许多 MySQL GUI 工具可用于执行各种操作,从创建数据库到执行日常管理任务。
MySQL Workbench
MySQL Workbench 是一个与 MySQL 服务器和数据库一起工作的图形工具。它完全支持 MySQL 版本 5.1 及以上。在本节中,我们将简要讨论 MySQL Workbench 的功能。
MySQL Workbench 提供的五个主要功能如下:
-
SQL 开发:创建和管理数据库连接,并配置连接参数。它使用内置的 SQL 编辑器执行 SQL 语句,并替换了之前提供的独立应用程序查询浏览器。
-
数据建模:这将以图形方式创建数据库模式的模型,并在两个不同的模式之间进行反向和正向工程,以及在实时数据库上进行。它提供了一个全面的表编辑器,易于使用,用于编辑表、列、触发器、索引、选项、插入、分区、例程、视图和权限。
-
服务器管理:这将创建、维护和管理服务器实例。
-
数据迁移:这允许从 PostgreSQL、SQLite、Sybase ASE、Microsoft SQL Server 和其他关系数据库管理系统对象、表和数据迁移到 MySQL。它还便于从早期版本迁移到最新版本。
-
MySQL 企业支持:这为产品提供企业级支持;例如,MySQL 企业备份,MySQL 审计。
MySQL Workbench 有两个不同的版本,商业版和社区版。社区版是免费提供的。商业版提供额外的功能,如数据库文档生成。
MySQL Notifier
MySQL Notifier 是一个简单的工具,用于监视和调整本地/远程 MySQL 服务器实例的状态。它是一个放置在系统托盘中的指示器。它是与 MySQL 安装程序一起安装的。
MySQL Notifier 充当快速启动器,其中列出的操作可以很容易地从系统托盘中进行操作和监视,并且它会根据指定的间隔进行监视,并在状态更改时通知。
MySQL Notifier 的使用
MySQL Notifier 停留在系统托盘中,并提供了一个点击选项,用于 MySQL 的状态和维护。以下是 MySQL Notifier 的重要用途。
-
MySQL Notifier 提供 MySQL 服务器实例的启动、停止和重启。
-
MySQL Notifier 配置 MySQL 服务器服务,并自动检测并添加新的 MySQL 服务器服务。
-
MySQL Notifier 监视本地和远程 MySQL 实例。
摘要
在本章中,我们深入研究了用于 MySQL 服务器几乎所有活动的命令,从安装、服务器启动、客户端程序到管理程序,以及用于数据库管理的各种不同目的的多个实用程序。本章还提供了制作数据库备份和导入数据库的工作知识,包括具体表或不包括具体表。
下一章将详细介绍 MySQL 8 数据类型。它将根据其内容类型对数据类型进行分类,并详细描述每个类别的属性和在表和列设计期间应该牢记的存储级别细节。