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数据库目录以用于测试目的。在服务被安装后,你需要设置账户初始密码,而这些账号会被列在授权表中。

在MySQL的Windows分支版本相应bin目录中你可能会看到以下服务程序:

  • mysqld作为Linux操作系统的标准服务(最新的Windows分支版本中也会使用mysqld),它包含了MyISAM和InnoDB存储引擎。
  • mysqld-ntmysqld一样,不过它包含了对基于NT系统如Windows NT, 2000, XP和2003的命令管道支持。
  • mysqld-maxmysql-max-nt对应的mysql和mysql-nt一样,但包括了一些非max服务所有的其他一些存储引擎。
  • mysqld-debug包含了对调试的支持。通常情况下你不需要选择此类MySQL server来用于生产环境,因为它会需要更多的运行时资源,并占用更多内存。

 

通常分支版本中仅包含mysqld或mysqld-nt服务程序。

 

当你在Windows上启动MySQL,MySQL会认为你的默认安装路径为C:\mysql,当然实际上你可以将它装在任何位置,但如果你真的这么做了,你就必须在server启动时告知它对应的位置在哪里。一种方法是你建立一个配置文件,并在文件中定义好你的路径位置。在使用MySQL Installer进行安装时,过程中会启用配置精灵,通过以下步骤引导你进行基本或完整组件安装的设置并建立配置文件:

  • 配置精灵会首先使用安装目录C:\Program Files\MySQL\MySQL Server 5.x并在其中建立一个名为ini的配置文件。配置文件包含了一个[mysqld]组,组中包括有一个basedir参数用于设置安装的目录:

    请注意:配置文件中设置的Windows路径中使用斜杠”/”,而不是反斜杠”\”

  • 配置精灵会在安装server时将其注册为一个Window服务。其在进行注册时,其命令中会包含一个--defaults-file参数项来指定ini的文件位置:

    (其中–install参数后的MySQL为服务名,你可根据情况自行设定,下图中注册的服务名为MySQL56)

这样当服务启动后,MySQL Server会知道在哪里可以找配置文件,并从配置文件中获取安装目录的位置。

 

如果你使用配置精灵来安装MySQL,但又希望MySQL服务使用其他服务程序(非mysqld,如mysqld-max)来启动运行,那么你需要移除原有Windows服务,并使用其他服务名来对应进行服务注册。

 

3.3.2 Windows上手动运行MySQL Server

在Windows命令行窗口中手工使用命令来运行MySQL,你需要通过命令行转至MySQL安装目录的bin子目录下,并调用服务命令:

** 你可以将bin目录路径整个添加到Windows系统环境变量path中,这样就可以直接调用命令而不必频繁进行跳转目录操作。

默认情况下,Windows会将报错信息写入data子目录下的host_name.err日志文件中(host_name为MySQL服务主机名)。如果MySQL Server未能正常启动,你需要检查报错日志文件已分析报错原因。当然,你也可以通过使用以下命令在MySQL启动时在Windows命令行窗口中显示诊断输出进行查看分析:

其他一些server参数也可以在命令中或在配置文件中进行设置。

 

当你在命令行窗口中调用MySQL服务程序后,命令行将不会再显示任何提示直至服务退出。关闭窗口会导致服务被中止,因此,如果你希望在命令窗口中运行其他MySQL程序,你需要在server运行时打开一个新的命令窗口,在新窗口中执行命令操作。

如果需要关闭MySQL服务,可以在命令行中使用mysqladmin命令实现:

你也可以通过Windows任务管理器来关闭MySQL,不过你应该尽量避免这么操作;因为任务管理器会强行中止MySQL server的运行,这将导致server没有机会进行干净地关闭。结果可能导致数据讹误并需要进行表修复。

 

3.3.3 Windows服务的方式运行MySQL

之前我们讲述了如何手工运行MySQL server。其他方法,则可以在安装时将MySQL server注册为一个Window服务,并设置为【自动】。这样,MySQL server就会在Windows启动或关闭时进行自启动及自动关闭。

 

如果你在安装MySQL时使用了MySQL Installer,你可能已经使用了配置精灵建立起了MySQL的Windows服务并启动了服务。否则,你将需要自己来进行服务注册,为了完成注册,你需要转到MySQL安装路径的bin子目录下。之后在调用mysqld命令时使用 –install参数:

** 这里命令使用时,对应的bin目录路径已经存入了path环境变量中了。

 

你也可以将所需的启动参数写入配置文件中,并在注册服务中告知server在启动时读取此配置文件。如使用C:\server-opts.ini文件作为服务配置文件:

通过--defaults-file设置,MySQL服务在启动时读取对应文件中的[mysqld]配置组,由于设置了--defaults-file因此,它会忽略默认位置的配置文件中的设置。

命令中 –install设置并不会真正启动server。它仅仅是告诉Windows将其作为一个服务来进行处理,并当Windows启动或关闭时,同时自动启动mysqld或关闭它。你也可以通过以下命令来手动启动或关闭服务,通过此操作来开启MySQL或关闭它:

这里的MySQL为注册的Windows服务名。

可以使用一个图形界面来控制此MySQL服务,你可以使用Windows服务管理器。

列出所有服务,找到对应MySQL的服务,进行启动或关闭操作。

 

你也可以使用mysqladmin shutdown命令来进行手工关闭。

 

如果服务不能正常启动,检查data子目录中的报错日志或直接使用mysqld启动,同时带上–console参数,这样报错信息就会直接出现在命令行窗口中了。

 

如果需要移除MySQL服务,请先确保MySQL已经被关闭,然后使用以下命令:

以上命令默认MySQL服务名为MySQL。如果Windows对应服务名不同,则你可以使用以下命令显示提供服务名:

如果你不是使用服务名MySQL来进行安装,且在服务注册时也未指定--defaults-file参数项,那么MySQL服务将会查找默认位置的标准配置文件, 除了读取其中[mysqld]组的设置之外,还会读取[service_name]组中的参数设置。

 

除了以上这些方法外来启动关闭MySQL之外,你也可以使用MySQL Workbench等集成工具来实现此操作。如果你在使用MySQL Installer安装MySQL的时候同时安装有MySQL Notifier,你也可以使用这个小工具来进行MySQL的启动和关闭控制:

 

MySQL 5.7 CREATE USER命令增强

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

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

 

密码及授权插件设置

 

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

 

禁用账号

 

MySQL团队注意到之前有许多大量关于避免终端用户可直接访问某些账户的需求。甚至在MySQL 5.6版本中实现了mysql_no_login授权插件来支持此类使用。现在有更好的方法了 – 只需要定义账号为锁定状态即可:

 

其他新建账号语句项

 

还有一些对CREAT USER命令的其他方便的增强,如建立一个新账号并定义一个非标准密码过期策略:
同时,在建立一个新账号时,你不再需要其他很多命令来实现SSL安全通信:
你也能在同一句建立账号的语句中限制资源使用:
通过使用这些语法,用户可以大大简化用户建立过程及脚本命令行数量。同时我们也需要感谢Satish和所有带来这些功能增强的人!
如果你对相关的新语法感兴趣,可查阅MySQL最新文档。
MySQL 5.7关于CREATE USER命令文档链接:

 

MySQL在Unix上的启动及停止

MySQL可以在许多Unix和Unix-like系统中运行,这些系统包括BSD Unix, System V Unix以及Linux的各种分支版本等。这节会阐述如何使得MySQL在这些平台上运行的通用步骤。主题包括了在运行服务前进行先决条件检查以及MySQL server的启动和停止等。

 

在Unix上,我们推荐使用一个明确的用户和组(而不是使用root)来进行MySQL Server的运行和管理,这样MySQL可以在相应权限下运行。在文中,我们假设所使用的用户和用户组都为mysql。

 

3.4.1 UnixMySQL Server启动的先决条件

尝试在Unix上运行MySQL之前,你应该先确认MySQL相关的组件都已经安装好了,且已经有一个MySQL登陆账号可用于管理和运行此服务。如果必要的话你也需要初始化对应数据目录。

 

在Unix上,预编译好的MySQL分发版以RPM文件或压缩tar文件(或其他类型)存在。RPM被用于Linux系统的安装。tar文件则可在用于更多平台。这些文件也是大家通常下载最多的文件类型。

 

由于分发版本中会分成多个不同RPM文件,因此MySQL RPM安装通常要求一个或多个RPM文件。其中最重要的文件为server程序安装文件和对client程序安装文件,所以做为最小安装的情况,你一般会将这两个都安装上。如果你想进行MySQL server的全组件安装,你就需要下载对应bundle组件包并解压,除了安装其中最基本的MySQL server RPM 外,将其下的其它所有RPM包都一并进行安装。

 

RPM的安装过程中会建立一个操作系统登陆用户以用于管理和运行MySQL服务,用户名和组名都为mysql。过程中也会安装所有相关文件,初始化数据目录,及安装已包含了初始MySQL账号的mysql数据库。之后安装会名为mysql的启动脚本注册到/etc/init.d目录中,并启动数据库。Server程序会被安装在/usr/sbin下,而数据目录则被建立在/var/lib/mysql中。

 

tar包发行版的安装很简单,仅通过解压即可。

例如,如果你下载的Linux发行版为mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz,你可以将其解压至/usr/local下以建立mysql-5.6.25-linux-glibc2.5-x86_64的子目录,通常你可以在/usr/local下另建立一个软链接(symbolic link)以指向此目录,名字如mysql,用以方便访问。在本节中,我们假设之后Unix上的MySQL tar包安装目录路径为/usr/local/mysql。

 

建立软链接的好处,除了目录名更短之外,当你需要升级MySQL时,你可以很容易地将此软链接指向新版本MySQL安装目录(只需要删除后重建此软链接即可)。如使用以下命令:

由于tar包版本安装并不会自动建立运行服务的操作系统账户和相应数据目录。你必须建立系统登录账号和用户组并建立初始数据目录(默认情况下数据目录为/usr/local/mysql/data),在章节中,我们这里假设建立的账号和组都为mysql。 为了建立初始数据目录,首先跳转当前目录到安装目录并运行mysql_install_db脚本。对于tar包发行版,此脚本一般被放置在对应的scripts或bin(根据版本位置有一定变化)子目录中。命令运行如:

 为了确保所有被安装的目录文件对应的所有者属性正确,你可以使用mysql账户登录并运行。或者,以root运行此脚本同时使用--user=mysql项:

mysql_install_db脚本建立数据目录并初始化mysql数据库(根据版本不同也会相应初始化test或sys等数据库)。如果你不运行此脚本,当你运行MySQL时会发现无法找到mysql数据库相应文件的报错,如:Can’t find file: ./host.frm。

请注意:在MySQL 5.7.6之后,mysql_install_db将不再使用,改用mysqld --initialize命令。

 

使用tar包发行版,你还需要安装一个启动脚本。

 

在过去版本中,不管你如何在Unix上安装MySQL(通过RPM文件或tar包文件),初始的MySQL root账号都没有密码。在服务器启动后,你需要手工建立密码。但是在5.6和5.7之后,通过RPM文件的MySQL Linux平台安装会调用mysql_secure_installation脚本以生成root随机密码,并将此随机密码存放在.mysql_secret文件中(此文件会为存放在系统环境变量HOME指定的目录下)。而当前最新5.7.6的tar包安装中,在执行数据库安装命令后会被要求执行:

其中mysqld命令的--initialize项会对root生成一个随机密码并以[warning]的提示信息显示。
更多最新版本安装细节,可访问:http://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

 

3.4.2 Unix上选用一种MySQL Server启动方法

MySQL服务在Unix上可以通过以下几种方式启动

  • 你可以手工调用mysqld。除非为了调试目的,通常不会使用此方法。如果你通过这个方法调用服务,相关报错信息会默认在命令行terminal窗口中进行显示,而不是写入报错日志中。
  • 使用mysqld_safe Shell脚本来调用mysqld。脚本会建立报错日志(error log),启动mysqld并进行监控。如果mysqld异常中止,mysqld_safe会尝试重启它。
  • 使用mysql.server Shell脚本来调用mysqld_safe。它在mysqld_safe外又包了一层,此脚本用于哪些使用System V run-level目录的Linux和Solaris系统。
  • mysqld_multi是一个Perl脚本,其目的是为为了更容易地管理单个主机上的多个MySQL Servers。它能启动和停止服务,或报告server的运行状态。

 

为了让MySQL服务能在系统启动时自动运行,你需要在系统上安装适合的启动脚本:

  • 在类似BSD的Unix系统中,通常可以通过使用系统启动脚本来调用mysqld_safe,如/etc目录下的local启动脚本。

在Linux和System V Unix类等在/etc/init.d下有run-level目录的系统,可以使用mysql.server脚本。如果你在Linux上进行RPM安装,安装命令会自动将mysql.server脚本以mysql为名安装在的相应运行级下。它可以配以start或stop参数通过手工调用进行服务的启动或关闭:

 操作系统在启动和关闭过程中会自动执行以上命令。

如果服务未能正常启动,那么请查看报错日志。Unix上的默认报错日志名为host_name.err,且放于数据目录中,这里host_name为你服务器主机名。

你可以使用以下方法中的一种来手工关闭MySQL server

  • 使用mysqladmin程序的shutdown参数命令。它以一个客户端形式来连接服务并关闭本地或远程的MySQL服务。
  • 使用mysql.server脚本并配以stop参数来关闭本地服务。
  • 使用mysqld_multi脚本的stop命令来关闭其所管理的任意一个MySQL服务。实际操作中此脚本会调用mysqladmin程序。

mysqld_safe脚本并没有服务关闭能力。你可以使用mysqladmin shutdown来进行服务关闭。请注意如果你使用kill -9命令来强行中止mysqld,mysqld_safe将会探测到mysqld的异常中止并重新启动它。当然,你可以先杀掉mysqld_safe,然后再中止mysqld,但是最好还是使用mysqladmin shutdown,此命令用于完成一个正常(干净)的服务关闭。

 

在MySQL 5.6之前,除了使用mysql_multi脚本来管理多个MySQL数据库之外,我们还可以使用MySQL实例管理器 – MySQL Instance Manager (IM)来进行多个MySQL实例的启停及监控,由于功能相同,因此mysqlmananger在MySQL 5.6之后就被移除了,这里我们对此工具仅作为知识知道即可,不再做深入展开。

对于mysql_multi更多的配置细节,我们可以查看官方MySQL 5.7最新版本文档(最后由Tim Young提供了随主机启停后的自启动及关闭脚本供参考):

http://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html

使用Partition分区来提升您的MySQL数据库性能

使用Partition分区来提升您的MySQL数据库性能
By Antoinette O’Sullivan-Oracle

你可以通过使用分区来进一步提升你的MySQL数据库性能,将特定表行分成多个行集。可以在很多不同场景通过分区获得益处,如提升大表效率:

  • 将数据分成很多小组以提升查询效率
  • 符合系统文件大小限制
  • 对维护和删除等行操作进行加速

要了解更多关于分区和其他主要议题,欢迎大家来参加MySQL数据库管理员培训课程

 

你将通过以下形式来获得5天由教员引导的课程:

按需培训:在注册后24小时内即可开始课程,按照讲义材料并收看培训视屏学习,学习后你可以自己预定时间来Oracle实验室环境获取手把手教学体验。

在线虚拟教学:无需至Oracle培训地,你只需要在线参加线上班级课程即可。从一系列教学计划中选择对应时区的在线培训即可,你也可以选择不同时区不同语言的在线培训课程,一切如您所需。

实地培训:直接到Oracle教育培训中心参加课程,以下为亚洲区的培训计划安排:

ASIA

 Location  Date  Delivery Language
Shanghai, China 6 July 2015 Simplified Chinese
Causeway Bay, Hong Kong 11 May 2015 English
Bangalore, India 18 May 2015 English
Seoul, Korea 6 April 2015 Korean
Kuala Lumpur, Malaysia 17 August 2015 English
Petaling Jaya, Malaysia 11 May 2015 English
Pulau Pinang, Malaysia 17 August 2015 English
Pasig City, Philippines 8 June 2015 English
Singapore 6 April 2015 English
Bangkok, Thailand 15 June 2015 English

 

 

MySQL数据库管理课程被推荐给正准备参加MySQL 5.6数据库管理OCP认证考试的人。

MySQL的配置

除了通过命令行来进行MySQL参数项配置之外,你还可以将设置写入一个配置文件中来实现设置。标准的MySQL客户端程序会在启动时查找此类配置文件并使用文件中的相应设置项。通过写配置文件可以大大减少你运维工作时间,因为你不必在每次调用程序的时候通过命令来重新定义这些参数项。

 

默认情况下,MySQL server会在运行时使用其预编译的值作为其配置项值。如果这些默认值在实际环境中是不适合的,你可以在server运行时给予不同的运行时参数值:

  • 有几个配置项定义了MySQL重要目录和文件的位置信息。如,Windows下,默认预编译的安装目录(base directory)为C:\mysql。如果你系统将MySQL安装在其他地方,你就必须通过使用 --basedir参数设置告知服务正确的目录位置,否则服务无法启动。同样的,如果你并非使用安装目录下的data子目录作为你的数据存放目录的话,你就必须使用 –datadir项设置来告诉服务正确的位置。
  • 有些配置项对MySQL server写哪些日志进行了控制。
  • 有些配置项被用于覆盖调整server中与性能相关的内部变量值,如控制最大同时连接数的配置项,控制buffer和cache大小的配置项等等。
  • 一些存储引擎在预编译时的设置为启用或禁用状态。如,服务程序已经编译启用了InnoDB支持(默认为启用),假如你并不使用InnoDB表的话,你可以设置 --skip-innodb项来节省内存(注意,由于现在InnoDB已成为标准配置,因此此参数在MySQL 5.7版本及其以后版本中被废用,这里仅作为例子进行说明)。你也可以设置默认存储引擎进行设置修改。
  • 有些配置项也可对InnoDB表空间进行进行设置。在未显式配置的情况下,如 --innodb_autoextend_increment, -- innodb_page_size等,这些值也可以根据你的情况进行调整。

你可以通过定义运行时配置项在服务启动时改变其表现。通常,这种设置可以通过命令行和配置文件来达到你的目的。(例外的是,如果你是以Window Service服务运行MySQL服务的话,你可能不能通过命令行来进行配置设置,你必须在启动时使用 --defaults-file 参数项,将配置设置于配置文件中。请依据对应版本而定。)

 

为了了解哪些配置项是server支持的,我们可以手工调用以下命令:

在帮助中所看到的那些配置项都可以使用mysqld命令时同时进行设置使用。当然,更常见的是将它们写入配置文件中,这都多方面原因:

  • 通过将配置项写入文件中,你可以不必每次在启动MySQL服务时将配置参数定义在命令中。这不仅方便,也可以避免太多复杂配置项造成的输入错误。
  • 如果你是通过server启动脚本来调用服务的话,你就不能通过在命令中加入配置项来进行启动。因为此脚本仅有参数值start和stop,这里你不需使用配置文件来进行启动设置。
  • 如果你在配置文件中列出有所有你所需的服务配置,你可以从文件中快速方便得了解你所进行的设置。

 

标准MySQL服务会在几个位置查找配置文件。它会使用那些在相应存放位置的配置文件,但是如果它找不到的话,服务也照样正常启动,不会报错。在Windows和Unix上,对应的标准配置文件有所不同。

 

在Windows上,程序会在目录(例如,C:\Winodws或C:\WinNT目录)中按以下顺序查找配置文件:my.ini,然后是my.cnf。

按目录查找的顺序如下:最上面的文件先读。

更多信息可阅读:http://dev.mysql.com/doc/refman/5.7/en/option-files.html

注意:如果你使用配置精灵进行的安装(即将MySQL server注册为一个Windows服务),那么服务就不会按照标准配置文件目录顺序进行查找,它仅会找MySQL安装目录下的my.ini文件。当然如果你在注册服务时使用 --defaults-file指定过配置文件,那么服务只会找你指定位置的那份配置文件。因此,如果你需要进行配置修改,请将设置放在服务会读的那个配置文件中。

 

在Unix上,所查找的配置文件则包括两个通用配置文件,/etc/my.cnf和$MYSQL_HOME/my.cnf。第二个文件仅在MYSQL_HOME环境变量已设置好的情况下才会被使用。通常你可以设置它作为MySQL安装目录。(如果在启动服务时此参数未设置,则mysql_safe脚本在执行时会尝试设置此MYSQL_HOME环境变量。) 

 

Unix配置文件的查找顺序中还包括了~/.my.cnf,配置文件可被放置在当前启动MySQL的用户HOME目录下。不过,由于此文件是一个特定于用户的文件,因此不太适合存放作为服务配置参数。(正常在你以root用户且使用 --user=mysql调用mysql服务时,服务会读取的特定用户配置文件取决于你调用服务的那个登陆用户,这可能会导致不一致的配置信息被使用。)

 

按目录查找的顺序如下:最上面的文件先读。

更多信息可阅读:http://dev.mysql.com/doc/refman/5.7/en/option-files.html

 

在配置文件中定义服务启动配置项时,使用[mysqld]组。如果文件不存在,那么你可以使用编辑器新建一个平文件。建立和修改文件需要对应的写入权限。MySQL服务本身仅需要读取权限即可;它会读取其中信息,但并不会新建或改动文件。

 

以下例子中,我们例举了一些使用配置文件进行设置的方法:

    • 如果在的MySQL安装在Windows上,服务假设默认安装目录为C:\mysql且数据子目录名为data。然而你希望将MySQL安装在其它地方,如: E:\mysql,你就必须使用 --basedir参数项告知服务对应路径。配置文件中的配置项前不用写双横杠【--】,你如下在配置文件中设置安装目录:
    • 如果你将E:\mysql下的data子目录作为数据目录,那basedir值已近足够了。不过如果你希望使用不同的数据目录路径,你就必须设置 --datadir项,如:
    • 请注意,在这种情况下,你也需要将原数据目录的拷贝到新对应位置D:\mysql-data上。如果不这样的话,当启动服务时,由于找不到配置文件对应的数据目录,会导致服务启动失败。
    • 对于配置参数中设置的Windows路径名,你可以使用斜杠【/】或者【\\】。例如,定义basedir值为E:\mysql,你可以以以下两种格式进行设置:
    • 如果路径名包含空格,你可以用双引号括起来,如:
    • 在Windows上,默认共享内存(shared-memory)连接方式是未启用的。为了使用此连接方式,使用以下配置项:

      类似,mysqld-nt和mysql-max-nt服务程序都在Windows平台上支持命名管道(named-pipe)连接方式,但它们都并未启用。为了启用这种连接方式,可使用以下配置项:

    • 为了启用日志,可以使用配置项启用你所希望的类型。以下配置项启用了通用查询日志,二进制日志以及长时间查询日志(以MySQL v5.7版本为例):
    • 为了定义默认存储引擎为InnoDB,可以使用 --default-storage-engine项:
    • 配置文件中也可设置许多MySQL服务系统变量值。例如,为了将最大客户端连接数从默认151提升至201,并增加MyISAM的键缓存(key cache)从8MB到128MB,你需要设置max_connections和key_buffer_size变量:

MySQL版本在v5.6.8之前包含有几个模板配置文件。在Windows中,文件名如my-small.ini和my-large.ini。这些被安装时同时建立在安装目录中。在Unix中,它们名为my-small.cnf和my-large.cnf。在my-default.cnf v5.6.8之后,这些文件被my-default.cnf文件代替。

 

你可以通过拷贝模板文件到标准配置文件路径上,将其文件名修改为指定所用配置文件名。不过在使用模板文件时,你需要确保能读懂文件中的意思,理解其中配置项设置的效果并作出相应修改。

 

3.5.1 使用 --safe-updates 配置项

 

配置文件中的配置项按组进行组织,每组配置项前都有一个以中括号括起来的组名(如:[group-name])。通常情况下,组名为所使用配置项对应的程序名。例如, [mysql]和[mysqldump]组对应的配置项被用于mysql和mysqldump命令工具。而特别的组名如[client]则被用于所有客户端程序。一般[client]组被设置连接配置参数,因为不管你使用哪个客户端程序都连接到此相同server上。

 

在配置文件中进行设置时,请将使用于命令行时的参数前的双横杠去掉。如果配置项设置一个值,可与允许在等号【=】两边有空格,不过在用于命令行时,这是不允许的。以下为一个配置文件例子:

注意:除非服务由root用户启动,否则端口号必须为1024或比之更大的值。

 

在上面这个例子中,[client]组定义了主机名,且设定C/S访问协议需使用压缩模式进行发送。组中的配置项应用于所有标准的客户端。而[mysql]组仅应用于客户端程序mysql。[mysql]组的设置要求了mysql命令应该使用 --safe-updates项。(mysql命令程序将会同时使用[client]和[mysql]组中的配置,因此总共有3个配置项被mysql使用。)

 

3.5.2 配置文件位置

 

配置文件的位置取决于你的操作系统。标准配置文件如:

  • 在Windows上,一般MySQL会按以下顺序查找配置文件: my.ini和cnf。而MSI安装精灵会将配置文件放置在服务注册设定时所指定的位置下)。
  • 在Unix平台上,文件/etc/my.cnf将作为全局配置文件被所有用户使用。你也可以在你的HOME目录中建立用户自己定义的cnf文件。如果两个都存在,全局文件会被先读取。
  • 当然,MySQL的命令行程序会在查找$HOME目录下的配置文件前,先在$MYSQL_HOME目录下查找配置文件(例如,../MySQL Server 5.6)。

 

MySQL(客户端)程序也可以对多个配置文件进行访问。程序会查找每个标准配置文件并在文件存在时进行读取。如果文件不存在也不会报错。

如果需要使用某个配置文件,你可以使用编辑器建立一个平文件进行编辑。

为了建立或修改此文件,你必须有相应的写权限。客户端程序仅需读权限即可。 

为了告知程序读取指定的配置文件,使用命令行启动时可使用以下参数项(在命令中必须是第一个参数项):

配置项 注释
--defaults-file=file_name 使用指定位置的配置文件
--defaults-extra-file=file_name 使用指定位置的额外配置文件
--no-defaults 使程序不使用配置文件

例如,使用mysql工具命令时使用C:\my-opts配置文件而不使用标准配置文件:

在配置文件中,你还可以使用 !include!includedir指令:

  • 如果某行中出现 !include file_name,那就会从这句指令开始跳转到对应file_name进行读取,读完后再调回原先的配置文件继续之前的读取。
  • 如果某行中出现 !includedir dir_name,那么类似的会从这句指令开始跳转到对应dir_name目录并查找尾缀为.cnf的文件(Windows平台上为.cnf和.ini)进行配置读取,在读完后回到之前跳出的配置文件完成余下的读取工作。

 

如果一个配置项被定义多次,不管是在同一个文件中还是在不同的多个配置文件中,配置项的值取最后设置的那个。

注意:在命令行中设置的配置项会最终覆盖配置文件读取的配置项的值。

MySQL的SQL模式

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

 

 

3.6.1 设置SQL模式

 

MySQL Server中的许多操作特性可以通过设置SQL模式(SQL mode)来进行配置。模式包含了可选值,其每个值控制了查询处理的某个方面。经过恰当的设置,服务就能按指导对输入数据采取严格或宽容的处理,启用或禁用对SQL一致性有关的操作,或者提供对其它数据库更好的兼容性。这一节将讨论如何设置SQL模式。

 

默认情况下,SQL模式值为空值,因此没有特定的限制或一致性行为要求被启用。独立的客户端按他们自己的需要来配置SQL模式,不过也可以通过在服务启动时使用 --sql-mode项来设置默认的SQL模式。你可能在运行数据库时需要某个模式来更小心地处理无效数据或建立MySQL用户账号。例如,如果你启用TRADITIONAL模式,MySQL Server会如其它数据库一样对输入的数据进行强制约束,而不会采取宽容态度。它这种模式不会允许未设置密码的新账号被建立。你可以通过配置文件来启用TRADITIONAL SQL模式:

 

你可以在启动mysqld时使用 --sql-mode=”mode_value”来设置SQL模式,或者可以通过使用SET命令来设置sql_mode变量来实现:

设置的值可以是空值,或是由一个或多个模式使用逗号组成的混合模式。如果是空值或两个以上模式值,你需要用单引号括起来。尽管SQL模式值在设置时总是使用大写,但是实际上其对大小写不敏感,以下是一些例子:

 

  • 清空SQL模式值:
SET sql_mode=’’;
  • 使用单个模式值对SQL模式进行设置:
SET sql_mode=ANSI_QUOTES;SET sql_mode=’TRADITIONAL’;
  • 使用多个模式值对SQL模式进行设置:
SET sql_mode=’IGNORE_SPACE,ANSI_QUOTES’;

 

如果需要检查当前sql_mode设置,可以使用以下命令:

 

3.6.2 SQL模式值

 

以下列出了对一些通用模式值的简单描述:

  • ANSI_QUOTES

此模式将导致双引号【”】被用于作为标识符引用字符,而不能用于作为字符串引用字符。

  • IGNORE_SPACE

默认情况下,功能函数和括号之间不能有空格。启用此模式后,服务会无视功能后的空格。这将允许功能函数和括号间有空格,但这有可能导致有些功能被认作为保留字。

  • ERROR_FOR_DIVISION_BY_ZERO

默认,被0除后所得返回结果为NULL。启用此模式后,在插入表数据的内容中,如果存在除以0,将会生成警告,如果同时也启用了严格模式,则会返回错误。(在MySQL 5.7.4以后,此模式被合并入STRICT_ALL_TABLES,STRICT_TRANS_TABLES模式中)

  • STRICT_TRANS_TABLES, STRICT_ALL_TABLES

这些模式值启用了【严格模式(strict mode)】,它对数据库输入可接受的值进行了某些严格限定。默认,MySQL会对于某些遗漏的值,超出范围,或奇怪的值采取宽容处理。启用严格模式将造成这些值在录入时被报错处理。

STRICT_TRANS_TABLES 启用了对所有事务表的严格模式,而STRICT_ALL_TABLES启用了对所有表的严格模式。

  • TRADITIONAL

这是一个复合模式,它在启用严格模式的同时还加入了其它一些输入数据的采纳限制。

  • ANSI

这也是一个复合模式,启用它会导致MySQL Server更符合ANSI标准。也就是说,其表现行为更像标准SQL,如其模式中含有ANSI_QUOTES(之前提到的)和PIPES_AS_CONCAT,使用【||】来作为字符串连接符,而不是作为逻辑或操作。

 

注意: 官方文档手册中列出所有可用的SQL模式值,如需查看MySQL5.7相关模式值,可访问:

 

http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html

 

 

 

【MySQL学生手册】MySQL的SQL模式

3.6.1 设置SQL模式

 

MySQL Server中的许多操作特性可以通过设置SQL模式(SQL mode)来进行配置。模式包含了可选值,其每个值控制了查询处理的某个方面。经过恰当的设置,服务就能按指导对输入数据采取严格或宽容的处理,启用或禁用对SQL一致性有关的操作,或者提供对其它数据库更好的兼容性。这一节将讨论如何设置SQL模式。

 

默认情况下,SQL模式值为空值,因此没有特定的限制或一致性行为要求被启用。独立的客户端按他们自己的需要来配置SQL模式,不过也可以通过在服务启动时使用 --sql-mode项来设置默认的SQL模式。你可能在运行数据库时需要某个模式来更小心地处理无效数据或建立MySQL用户账号。例如,如果你启用TRADITIONAL模式,MySQL Server会如其它数据库一样对输入的数据进行强制约束,而不会采取宽容态度。它这种模式不会允许未设置密码的新账号被建立。你可以通过配置文件来启用TRADITIONAL SQL模式:

[mysqld]
sql-mode=TRADITIONAL

[Read more…]

【MySQL学生手册】MySQL的配置文件

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

 

 

除了通过命令行来进行MySQL参数项配置之外,你还可以将设置写入一个配置文件中来实现设置。标准的MySQL客户端程序会在启动时查找此类配置文件并使用文件中的相应设置项。通过写配置文件可以大大减少你运维工作时间,因为你不必在每次调用程序的时候通过命令来重新定义这些参数项。

 

 

默认情况下,MySQL server会在运行时使用其预编译的值作为其配置项值。如果这些默认值在实际环境中是不适合的,你可以在server运行时给予不同的运行时参数值:

  • 有几个配置项定义了MySQL重要目录和文件的位置信息。如,Windows下,默认预编译的安装目录(base directory)为C:\mysql。如果你系统将MySQL安装在其他地方,你就必须通过使用 --basedir参数设置告知服务正确的目录位置,否则服务无法启动。同样的,如果你并非使用安装目录下的data子目录作为你的数据存放目录的话,你就必须使用 –datadir项设置来告诉服务正确的位置。
  • 有些配置项对MySQL server写哪些日志进行了控制。
  • 有些配置项被用于覆盖调整server中与性能相关的内部变量值,如控制最大同时连接数的配置项,控制buffer和cache大小的配置项等等。
  • 一些存储引擎在预编译时的设置为启用或禁用状态。如,服务程序已经编译启用了InnoDB支持(默认为启用),假如你并不使用InnoDB表的话,你可以设置 --skip-innodb项来节省内存(注意,由于现在InnoDB已成为标准配置,因此此参数在MySQL 5.7版本及其以后版本中被废用,这里仅作为例子进行说明)。你也可以设置默认存储引擎进行设置修改。
  • 有些配置项也可对InnoDB表空间进行进行设置。在未显式配置的情况下,如 --innodb_autoextend_increment, -- innodb_page_size等,这些值也可以根据你的情况进行调整。

[Read more…]

数据库厂家排排坐,谁是最好的数据库软件?

本文地址:https://www.askmac.cn/archives/best-database.html

 

你并不需要我们告诉你现在市面上有多少种数据库系统软件。因此,当你在苦找下一个项目的参考,想要知道哪个数据库是最好的时候,那么这篇文章是一个很好的起点。

 

我们已经准备了一个入围名单,其中有我们的最爱- 这是一个对几个数据库的简单介绍;他们中的一些你可能听说过,一些可能没有。坐好了,祝你的研究一切顺利。

关系数据库

 

MySQL

 

MySQL是数据库中一个家喻户晓的名字。它也有几个分支,旨在提高MySQL的某些方面,比如MariaDB或者Percona。

这是一个成熟的系统,伴随着当前的存储引擎InnoDB,它现在处理只读和以读为主的文件比之前的存储引擎MyISAM好了很多。但是,如果你开始处理巨量的数据,你也会被在InnoDB中的问题绊倒。幸运的是TokuDB可以提供一些帮助(www.askmac.cn)。

 

PostgreSQL

 

当涉及到关系数据库,PostgreSQL/Postgres也是一个很好的选择。 MySQL是比较流行的,但这主要是由于历史原因;PostgreSQL是比较容易上手的数据库。

Postgres的特别之处在于出色的可扩展性,所以如果你需要执行自定义程序,Postgres是一个不错的选择。这方面的一个例子是,它允许用户自定义函数不仅能用SQL还能用好几种语言编写。 Postgres也在NoSQL领域增加了一系列增强。通过Hstore你可以存储键值对,而无需离开Postgres。而在9.4版本中,你可以同时使用JSON和JSONB,这无疑挑战了一些NoSQL成员。这是PG在NoSQL功能上的一个突破。

 

TokuDB

TokuDB是一个MySQL,MariaDB和Percona均可用的存储引擎。在分析领域它可以替代InnoDB; TokuDB让人眼前一亮的是,它善于压缩数据。它一般比InnoDB节省了3倍的空间。 当数据集能装入内存,TokuDB的性能是和InnoDB一样的。但是,当数据变得太大,TokuDB仍能同样出色执行,而InnoDB的性能需要深入调优。

TokuDB和InnoDB之间的根本的不同在于,前者使用一个分形树数据结构,而后者使用B-树数据结构。总之,如果你的数据很大​​,你想要使用MySQL,你可能有兴趣考虑看看TokuDB。这些基准给了你TokuDB可以实现什么的提示(www.askmac.cn)。

 

NoSQL数据库

MongoDB

MongoDB是面向文档的数据库,部分人表示对它的厌恶。但一个DBMS走红是总是有其原因的,即它的速度,灵活的架构和分片。为了实现MongoDB的优良性能,MongoDB的做法是不默认采用安全写入,在你了解它和并且它对你的应用可行的情况下,这是很好的。

开始使用MongoDB的门槛是低的,它的灵活架构让你能随时改变。随着3.0版的推出,有一些不错的性能改进,同时由于其新的存储引擎WiredTiger,也让数据库更接近ACID兼容。如果你要把它投入生产,确保你一定要做好功课,并不是所有的开发者都这么做(www.askmac.cn)。

[Read more…]

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

MySQL可以在许多Unix和Unix-like系统中运行,这些系统包括BSD Unix, System V Unix以及Linux的各种分支版本等。这节会阐述如何使得MySQL在这些平台上运行的通用步骤。主题包括了在运行服务前进行先决条件检查以及MySQL server的启动和停止等。

 

在Unix上,我们推荐使用一个明确的用户和组(而不是使用root)来进行MySQL Server的运行和管理,这样MySQL可以在相应权限下运行。在文中,我们假设所使用的用户和用户组都为mysql。

 

UnixMySQL Server启动的先决条件

 

尝试在Unix上运行MySQL之前,你应该先确认MySQL相关的组件都已经安装好了,且已经有一个MySQL登陆账号可用于管理和运行此服务。如果必要的话你也需要初始化对应数据目录。

 

在Unix上,预编译好的MySQL分发版以RPM文件或压缩tar文件(或其他类型)存在。RPM被用于Linux系统的安装。tar文件则可在用于更多平台。这些文件也是大家通常下载最多的文件类型。

 

由于分发版本中会分成多个不同RPM文件,因此MySQL RPM安装通常要求一个或多个RPM文件。其中最重要的文件为server程序安装文件和对client程序安装文件,所以做为最小安装的情况,你一般会将这两个都安装上。如果你想进行MySQL server的全组件安装,你就需要下载对应bundle组件包并解压,除了安装其中最基本的MySQL server RPM 外,将其下的其它所有RPM包都一并进行安装。

 

RPM的安装过程中会建立一个操作系统登陆用户以用于管理和运行MySQL服务,用户名和组名都为mysql。过程中也会安装所有相关文件,初始化数据目录,及安装已包含了初始MySQL账号的mysql数据库。之后安装会名为mysql的启动脚本注册到/etc/init.d目录中,并启动数据库。Server程序会被安装在/usr/sbin下,而数据目录则被建立在/var/lib/mysql中。

 

tar包发行版的安装很简单,仅通过解压即可。

 

 

 

 

 

 

 

例如,如果你下载的Linux发行版为mysql-5.6.25-linux-glibc2.5-x86_64.tar.gz,你可以将其解压至/usr/local下以建立mysql-5.6.25-linux-glibc2.5-x86_64的子目录,通常你可以在/usr/local下另建立一个软链接(symbolic link)以指向此目录,名字如mysql,用以方便访问。在本节中,我们假设之后Unix上的MySQL tar包安装目录路径为/usr/local/mysql。

 

建立软链接的好处,除了目录名更短之外,当你需要升级MySQL时,你可以很容易地将此软链接指向新版本MySQL安装目录(只需要删除后重建此软链接即可)。如使用以下命令:

 

 

[Read more…]

沪ICP备14014813号-2

沪公网安备 31010802001379号