MySQL 5.7 CREATE USER命令增强

 

在MySQL5.7之前,在使用CREATE USER命令时有以下多个限制:

  • 无法设置授权插件并密码
  • 无法禁用一个用户
  • 无法设置用户资源限制
  • 无法设置非默认密码的过期策略
  • 无法使用SSL/x509
所有这些限制实际上都可以通过其它方法来得到实现,但通常你需要涉及到使用其它语句,如GRANT命令。
从MySQL 5.7.6开始,这些操作可以通过这个新增强的CREATE USER语法来进行实现。

 

密码及授权插件设置

 

从安全角度来说,这是最重要的部分,在使用建立用户账户的同时能够使用非默认的授权插件(如sha256_password)和非空密码设置:
mysql> CREATE USER dbdao@localhost IDENTIFIED WITH sha256_password BY 'mysqlpassword';
Query OK, 0 rows affected (0.00 sec)
这里,我们可以使用CREATE USER ... IDENTIFIED BY子句来设置密码,在建立用户时,不能强制建立的账户不使用空密码是一个非常大的安全问题。

[Read more…]

MySQL初学者入门视频教程

MySQL初学者入门视频教程, 观看地址:

课件下载地址: https://zcdn.askmac.cn/MySQL%E5%88%9D%E5%AD%A6%E8%80%85%E5%85%A5%E9%97%A8.pdf

 

QQ截图20150703112122 QQ截图20150703112114 QQ截图20150703112056

 

0 – 课程简介

 

 

1 – 数据库简介

 

 

2 – MySQL Install on Windows

 

3 – MySQL Install on Linux

 

 

4 – MySQL远程访问

 

 

5 – MySQL基础(一)- 数据库和表的新建

 

6 – MySQL基础(一)- 表数据插入及查询

 

 

7 – MySQL基础(一)- 多条件查询及排序

 

 

8 – MySQL基础(一)- 表更新及结构修改

 

9 – MySQL基础 ( 一 ) – 表删除及数据清空

 

10 – MySQL基础(二)- 范围查询及合并查询

 

11 – MySQL基础(二)- 数据库表的拷贝

 

12 – MySQL基础(三)- 数据库表定义 – 主键, 唯一键及外键

 

13 – MySQL基础(三)- 数据库表定义 – 自增列, NOT NULL及DEFAULT

 

 

14 – MySQL基础(四)- 数据库表连接

 

 

 

15 – 课程结尾

 

【MySQL学生手册】MySQL在Windows上的启动及停止

这一节会讨论在Windows上运行MySQL Server前,你应该检查的相应先决条件。这里同时会说到如何手工通过命令行模式来运行服务,或者作为一个Windows服务来自动启动运行。

 

3.3.1 WindowsMySQL服务启动的先决条件

由于MySQL的安装目录中包含了几个非常重要的子目录,因此我们应该在MySQL安装时,就明确了解MySQL安装在哪里。如果你在是通过MySQL Installer进行的安装,那么MySQL默认的安装目录为C:\Program Files\MySQL\MySQL Server 5.x。如果你使用noinstall归档压缩包进行安装,那么安装的路径就是你当时解压的位置。

 

在安装目录下,你会找到一个bin子目录,其包含了MySQL服务和客户端程序。而data子目录中则用于存放server对应的数据库。

 

在Windows上的MySQL安装,data目录会预先进行设定以备使用。例如,它会包含一个mysql目录以用于数据库mysql,这个数据库包含了授权表。data目录中也会包含一个test数据库目录以用于测试目的。在服务被安装后,你需要设置账户初始密码,而这些账号会被列在授权表中。

[Read more…]

大多数人认为Oracle并不会抹杀MySQL

在开源社区的争吵并无益于Oracle公司对待MySQL的态度,开源社区当然希望Oracle能充分理解开源精神。 自从Oracle在2010年收购了SUN公司,开源开发者都忧心忡忡,因为担心Oracle可能将MySQL彻底抹杀,或者将其代码闭源专有化。 但实际上呢,这2种担心都没有发生。MySQL的性能在Oracle的管理下有显著的提高, 同时MySQL的主体代码仍是完全开源的。

 

那么为什么开源社区仍不舍地抨击Oracle对MySQL源码的管理呢?这样做公正吗?

 

MySQL社区的末日

 

Oracle被大众认为从没有对开源社区特别友善过。 甚至于哪些从前在生意上给与Oracle数十亿美元收益的用户,也并不特别喜欢这家公司。

Oracle对MySQL的管理自从Oracle收购SUN以来(MySQL是SUN公司的财产)始终饱受抨击也就不奇怪了。

大部分疑虑都是捕风捉影,毫无依据的阴谋论。少数确实是真实的,例如MySQL的测试样例从2012年开始令人惊讶的消失了。测试样例用来帮助用户确定在某个版本上bug已经被修复了。缺少这部分资料显然让用户和开发者失去了指南。

[Read more…]

【MySQL学生手册】MySQL的安装

MySQL数据库服务的推荐安装方法是通过MySQL网站直接下载安装。这种方法在一些不同的平台上都有支持,仅在不同的平台上的安装细节上略有不同。然而,其主要步骤都一样。请注意你需要管理好权限设置以完成此安装。

 

对于在Windows和Linux操作系统上的安装步骤如下:

MySQL ServerWindows操作系统上的安装

1)访问MySQL官网下载页http://dev.mysql.com/downloads/

2)找到对应主题: MySQL on Windows -> MySQL Installer

3)下载my-installer-community MSI版本

4)双击下载的MSI文件,启动MySQL Installer, 选择Custom安装模式后,选择对应MySQL Server组件。

5)Next后按提示进行一步步安装,你需要提供相应root密码。

6)默认安装目录为:C:\Program Files\MySQL\MySQL Server 5.x

7)完成安装时会有提示信息告知。

 

MySQL ServerLinux操作系统上的安装:

1)访问MySQL官网下载页http://dev.mysql.com/downloads/

2)找到对应主题MySQL Community Downloads -> MySQL Community Server (GPL)

3)找到对应操作系统并下载最新二进制tar包(这里举例Linux-Generic), 如:

mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

4)将tar包解压至/usr/local目录下(如果tar包在/tmp目录下)

# cd /usr/local
# tar -zxvf /tmp/mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz

5)对目录建立软链接

# ln -s mysql-5.6.25-linux-glibc2.5-x86_64 mysql

6)安装系统表

# cd mysql
# scripts/mysql_install_db

7)建立mysql系统用户及用户组

# groupadd mysql
# useradd -g mysql mysql

8)修改data目录所有者

# chown -R mysql:mysql data

9)可选操作,将启动脚本拷贝到/etc/init.d下

# cp support-files/mysql.server /etc/init.d/mysql.server

 

3.2.1 时区表的数据导入

MySQL的安装过程中会在mysql数据库(/data/mysql)下建立一组时区表(对应表文件time_zone*):

  • 在Windows上,这些表是作为预先初始化的mysql数据库中一部分存在的。
  • 在Unix上,这些表是在RPM安装中自动执行或tar包解压后手工执行mysql_install_db脚本时被建立的。

 

MySQL Server使用时区表来实现对如’Europe/Warsaw’等命名时区的支持。然而,时区表在建立后为空表,并没有数据。这意味着默认情况下,命名时区不可用。为了启用此功能,你必须对这些表导入数据。这是一个可选配置过程,除非你进行配置,否则时区支持将被限制为SYSTEM时区且时区偏移值也将受当前系统限制如’+08:00’。

在操作系统上有其自有的时区文件,最好是使用它们来导入MySQL时区表,以保证系统和MySQL时区基于相同的信息。许多Unix系统上有这些文件,它们常被放置在/usr/share/zoneinfo目录中。对于这些系统,可以使用mysql_tzinfo_to_sql程序来将这些文件内容转换为SQL语句并导入到MySQL表中。如果文件在/usr/share/zoneinfo目录中,使用命令如下:

# mysql_tzinfo_to_sql /usr/share/zoneinfo |mysql -uroot mysql

有些系统中没有时区文件,如Windows和HP-UX。对于这中情况,MySQL在http://dev.mysql.com/downloads/timezones.html上提供了对应版本的时区表文件(MyISAM表文件)。你可以对应版本下载后在你的mysql数据库中替换空的时区表文件即可。停止MySQL Server,将解压后的文件拷贝至/data/mysql数据库目录中,重启服务。

 

【MySQL学生手册】MySQL的发行版本类型

MySQL可用于多种操作系统,其包括Windows和Unix操作平台。除非特别说明,这里”Unix”一般指包括Linux和其他Unix-like操作系统。

 

你可以通过使用已经包含有MySQL预编译程序的二进制发行版来进行MySQL安装,也可以自己动手编译源文件发行版来完成MySQL的安装。这里我们会对你可选择的各类MySQL发行版进行一下描述。

 

3.1.1 MySQL二进制发行版(Binary Distribution)

在Windows上,你可以从以下类型的预编译二进制发行版进行安装:

一个基础发行版(MySQL Installer MSI, GA Release),包含了MySQL所需安装的最通用组件及相关配置精灵。这是一个推荐大多数用户使用的版本。

一个包含了所有MySQL安装相关文件的非安装发行版(Zip Archive, GA Release),其中不含有MySQL installer及配置精灵。

你可以使用Installer选择最基本MySQL组件的安装或进行完整安装。默认,MySQL 5.x会被安装在%ProgramFiles%\MySQL\MySQL Server 5.x下,一般%ProgramFiles%值为C:\Program Files。而非安装发行版则仅是一个Zip压缩包,安装时,你只需要解压并移至你所希望的位置即可。

 

在Unix上,你可以选择以下类型的二进制版本:

  • RPM包可用于Linux系统。这些文件可通过使用rpm命令进行安装。你可以使用rpm -qpl rpm_file来查看RPM软件包中所包含的安装文件。m31_ch3.1_rpm_install_wm_18f9ee9e01cab58dae39b540d029ff242504d607
  • tar包文件可用于其他各种Unix和Unix-like系统。为了安装此类发行版,你可以通过使用tar命令将tar包解压至你希望安装的目录即可。
还有许多其他Unix和Linux发行版特定安装包。你可以访问MySQL网站下载页来了解可用的安装包: http://www.mysql.com/downloads/

注意:安装后的启动及服务配置会在本章稍后进行说明。

 

使用二进制发行版有这样几个好处。除了明显的,你不需要经历整个建立编译过程外,一个最大的好处是使用MySQL二进制安装文件比你自己去建立文件更高效。

  • MySQL团队有大量编译器使用的选择配置经验,这有助于产生最优化的二进制文件。
  • 在多数情况下,MySQL团队使用商业编译器进行编译,相比于使用通用编译器,这样可以获得更高质量代码。
  • 在一些情况下,MySQL团队在编译时会使用比一般标准操作系统供应商所提供的库文件更好的库文件。例如,在Linux系统上,MySQL会使用特定的C库文件以允许更大数量的并行连接。其它一些情况,使用特定库文件来临时解决供应商库文件中的存在的bug问题等。

 

3.1.2 MySQL源发行版

你也可以通过编译源发行版来建立MySQL。劈开使用预编译发行版进行安装所带来的好处,你可能仍然有理由选择自己编译MySQL:

  • 你的操作平台没有对应可用的二进制发行版,你不得不选择自己通过源文件来建立MySQL。
  • 你需要启用一个在预编译发行版中没有的功能,如全面调试支持。或你可能希望关闭一个你不需要的特性,以降低server对内存的使用。例如,你可以禁用可选的存储引擎,或仅编译那些你需要的字符集等。
  • 二进制发行版仅会在正式版中提供下载,而最新的开发版本则仅提供源码版本。如果你希望使用当前最新的源码版本,则你必须进行编译。

你可以将源发行版安装在你所需的位置上。其默认安装位置为/usr/local/mysql。

如果你最终决定通过源文件来建立MySQL,请阅读MySQL参考手册(MySQL Reference Manual)在线文档, 其中包含了对特定平台安装的相关注意信息。

 

【MySQL学生手册】MySQL的内存使用

MySQL Server内存使用中包括了用于管理与客户端之间进行沟通和处理数据库内容Server所建立的数据结构。它会在运行时为许多类型的信息分配内存,如:

 

  • 线程(Thread Handler):

 

线程在MySQL(或其它程序)中被用于将应用的执行分成多个同步运行的任务。对每个连接到MySQL Server的客户端,Server都会建立一个独立的线程来进行连接处理。MySQL Server为了避免一些可能产生的性能问题,会分配一块小的缓存给这些线程,在客户端断开后,被分配的缓存仍然会被保持。任何新的连接会首先通过此缓存来实例化线程,而不是重新建立一个新线程。这样就能确保内存消耗始终处于最低状态。

  • 缓存(Buffers / Cache)

MySQL Server会使用多个buffers(或者称为caches),作为内存集以临时保存数据的输入或输出,目的是避免高成本的磁盘I/O访问。这些缓存主要由缓存管理子系统来进行操作,可对支持MyISAM索引块的索引缓存和持有已打开表的表述符的授权表缓存进行快速访问。此外,MySQL Server还包含了一个查询缓存(Query Cache)用于加速重复查询的处理速度。

  • MEMORY存储引擎

MySQL Server的一种存储引擎,此引擎允许表被存储在内存上。MEMORY表默认使用哈希索引,这对建立临时表及提高临时表处理速度很有用。然而,当服务器被关闭后,MEMORY表中的所有数据行会丢失。这些表的表结构定义会被存储在.frm文件中,当server重启后,这些表都是空表。

  • 内部临时表

通常,我们碰到MySQL需要建立一张内部临时表的例子都是当你需要进行一个复杂查询时,这强迫你建立一个临时表来解决此类问题。系统变量tmp_table_size决定了这张临时表在转换为一张磁盘存储的MyISAM表之前所能增长的最大值,超出此值后,它将会被自动转换为一张MyISAM表。

  • 客户特定缓存(Client specific buffers)

MySQL server同时维护了多个特别设计的缓存以支持独立客户端的连接。例如包括了用于交互信息的通信缓存,用于表的读缓存及支持表连接和排序操作的缓存等。

 

2.5.1 数据存储

数据存储涉及到对性能调优和MySQL整体架构都非常重要的三个方面。这些方面是数据库服务器存储和检索系统的基础。

 

持久的数据存储:

数据存储系统要求持久性,或者说在服务重启时保留住数据的能力。这需要通过持久性数据设备如硬盘或二级存储设备来完成。此类数据存储对于数据的持续性和完整性保证是其关键,但是设备对数据的读写数据会相对慢些。

 

挥发性存储:

对于易挥发性存储如随机访问内存(RAM),一般处于持久性数据存储和数据库服务之间。好处是可以瞬时内存中读取数据。当然,一旦发生间歇性或非间歇性断电,这些数据会丢失。

m31_2.5_mysql_momery_use_wm_6a7b89b80c577336040e344de2cc979ce1828b3d

逻辑数据呈现:

当数据从持久数据存储(硬盘)中移至易挥发性存储(内存),它必须有逻辑性地组织在一起并被保存称为页的许多块中。这些页将会由操作系统和硬件缓冲池来管理,作为操作单元被自动分配或释放。

 

MySQL的缓存管理子系统将和操作系统上的缓存管理一起来处理不同数据类型的缓存。每个存储引擎有不同的处理方法,我们在之后的存储引擎章节中会对其进行讨论。

 

2.5.2 挥发性存储(Memory)

MySQL会对内部缓存的分配大致分为两类:

全局缓存将会被所有线程(连接)所共享。而本地缓存则和独立的线程相关。MySQL可对这两种分类内存进行大量的控制管理设置。

 

本地内存:

本地内存是针对特定会话连接并动态分配的。这些内存区在不连接后会被自动释放。本地内存大多被用于处理查询结果。

全局内存:

全局内存是那些被预先分配且可被共享使用的内存。全局内存仅分配一块缓存区。

需要注意的是不断增长的本地内存则会使用更多、甚至占用机器余下的全部内存。当所有服务器内存被使用,操作系统就会开始使用swap交换区来保存内存信息,这样性能就降低了。MySQL Server的性能最终会收到负面效果,甚至可能导致性能崩溃。

 

【MySQL学生手册】MySQL的磁盘空间使用

MySQL Server会通过几种方式使用其磁盘空间,主要的目录和文件都会放在一个称为”服务数据目录”(server’s data directory)的地方。MySQL会使用这个数据目录来存储:

  • 数据库目录(database directory)。不管你在数据库中建立何种类型的表,每个数据库都只会对应存在一个单一目录。
    在Windows中,如:
    C:\Program Files\MySQL\MySQL Server5.7\data
  • 对表结构进行描述的表格式文件(.frm文件)。不管哪个存储引擎进行的表管理,每个表都有其.frm文件,存在其对应的数据库目录下。
    在Windows中,如:
    C:\Program Files\MySQL\MySQL Server 5.7\data\<database>\<filename>.frm
  • 对应每张表由存储引擎建立的数据和索引文件,也会被存放在相应的数据库目录下。如MyISAM存储引擎对应某张表所建立的数据文件及索引文件。
    在Windows中:
    C:\Program Files\MySQL\MySQL Server 5.7\data\<database>\<filename>myd
    C:\Program Files\MySQL\MySQL Server 5.7\data\<database>\<filename>.myi
  • InnoDB存储引擎所拥有的表空间及日志文件。
    在Windows中:
    C:\Program Files\MySQL\MySQL Server 5.7\data\ib_logfile0
  • 服务日志文件和状态文件。这些文件包含了MySQL Server已处理或正处理的语句信息。日志文件可用于问题排查(troubleshooting),监控,复制(replication)和数据恢复。
  • 触发器也会和其受影响的表一起存储在相应数据库目录中。

MySQL也会将其系统数据库(mysql)存储在磁盘上,其中包含了用户,权限,插件,帮助内容,事件,时区实现等各种信息。

 

2.4.1 数据目录

m31_ch2.4_mysql_datadir_wm

有关数据目录的大致层级关系,我们可以从上图有进行了解。应该注意的是许多层级中都是对应特定存储引擎的。然而,不管存储引擎如何使用,所建的每个表都会有一个*.frm(包括视图view)文件。请确保MySQL server对数据目录的权限正确以进行文件建立操作。换言之,你必须保证server在其数据目录下的任何位置具有相应权限以建立数据文件或日志文件。

在MySQL数据目录中,MySQL Server会对其每个数据库匹配一个目录,并为数据库中的表匹配相应文件名。这里存在一些潜台词:

  • 在操作系统中(如大多Unix系统),MySQL Server的数据库和表名都是大小写敏感。
  • 标准的系统操作命令都可用于MyISAM存储引擎管理的表,进行诸如备份,重命名,移动,删除,拷贝表等操作。举个例子,我们可以通过重命名表对应的.myd, .myi和.frm文件来重命名一张MyISAM引擎表。(当然,你也可以使用RENAME TABLE或ALTER TABLE … RENAME命令来重命名文件)。
也有可能我们需要移动整个数据目录,或某些数据库,或单个表(依赖于存储引擎)到其他位置,这样通过对不同磁盘的使用以达到更好的性能。

 

【MySQL学生手册】MySQL的SQL解析器和存储引擎层

客户端通过以SQL语句的形式发送请求给服务器端从而从表中获取数据或对表数据进行修改。而服务端程序使用以下两层处理模型以执行每个语句请求:

  • 上层包括SQL解析器(parser)和优化器(optimizer)。
  • 下层包括了一组存储引擎。

需要注意的是,SQL层并不依赖于存储引擎管理的表。这意味着客户端通常不需要考虑哪个引擎被涉及处理其SQL语句,也不用考虑访问和更新的表是受到哪个引擎的管理。当然也有例外:

  • CREATE TABLE语句有ENGINE项可用于在建立表时启用你所定义的存储引擎。ALTER TABLE语句也含有一个ENGINE项可以使你能将原表转换使用一个不同的存储引擎。
  • 一些索引类型仅在某些特定存储类型中可用。例如, 仅MyISAM引擎支持空间索引(spatial index), 仅MyISAM, InnoDB(5.6.4以上)支持全文索引(full-text)等。
  • COMMIT和ROLLBACK仅对由事务型存储引擎(如InnoDB)管理的表有效果。

存储引擎细分

下图简单展示了MySQL服务和其存储引擎之间的交互。

m31_2.3_mysql_storage_engine_wm_a01e18650dc19d05904f5be78c4dbdf088be3bef

依赖存储引擎不同会有以下不同:

  • 存储方法 – 每张表中的数据按其自身的方法进行存储。
  • 事务处理能力 – 某些存储引擎可以对事务进行处理,在执行多SQL语句时能确保数据库的完整性。
  • – 是指每个引擎对于多线程执行场景中同一个资源的访问限制及同步机制处理。
  • 备份恢复 – 基于不同的存储方法,表数据的备份和恢复也有区分。
  • 优化 – 对于数据存储的优化和通过MySQL服务器的数据抽取,每个存储引擎都有其特定的优化点。
  • 特定特性 – 某些引擎具有一些不同的特性包括全文搜索,参照完整性和处理空间数据的能力。

多数MySQL服务器会以相同的方式进行操作,即所有的常用SQL语句都是引擎无关的。当然,其优化器可能会按不同的存储引擎做出不同的优化判断,但也都是通过所有引擎都支持的一套标准接口(API)进行所有处理。

MySQL Replication 复制高可用配置方案

 

MySQL Replication 复制高可用配置方案:

MySQL Replication复制高可用配置方案

沪ICP备14014813号-2

沪公网安备 31010802001379号