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


Posted

in

by

Tags:

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *