重学MySQL系列(二):一文让你了解MySQL启动整个过程

原创做者,公众号【程序员读书】,欢迎关注公众号,转载文章请注明出处哦。mysql

平时咱们在开发应用程序的时候,更可能是以客户端(Client)的身份链接到一台已经启动好的MySQL服务器,所以咱们对于如何启动一个MySQL服务器,如何设置启动参数,以及在启动完成后如何更改MySQL的行为等操做并无太多的了解。程序员

而实际上,MySQL服务器启动或运行过程当中各项启动参数的设置,对MySQL的行为与性能有相当重要的影响,所以在这篇文章中,咱们一块儿探究一下有关MySQL服务器启动和关闭、配置文件与系统变量一些细节。sql

在类Unix操做系统上启动与关闭MySQL

虽然MySQL支持多种不一样的平台和操做系统,好比Windows,Mac OS,但做为数据库服务器,MySQL更多的时候仍是运行在类Unix操做系统上,好比Centos、Ubuntu。数据库

在类Unix操做系统中,有许多种方式来启动MySQL,咱们既能够手动运行MySQL,也能够将MySQL设置为系统的标准服务,在系统启动时自动运行。windows

设置启动帐号

在启动MySQL前,首先要考虑的是用哪个登陆帐号来运行MySQL,若是不作设置的话,通常会把咱们当前登陆的帐号做为MySQL的启动帐号。安全

设置启动帐号的注意事项

咱们这里讲的是要本身设置启动帐号的状况,其实有一些安装方式会自动帮咱们设置好启动帐号的,这时候咱们就不须要再本身设置了。bash

不使用root帐号做为MySQL启动帐号

root在类Unix操做系统中是无所不能的存在,因此通常不要使用root去启动一些服务软件,否则的话,若是服务被黑客入侵,那么黑客即可以轻易得到root权限,进而彻底控制咱们的服务器,这是很是危险的。服务器

应该始终用同一个帐号来启动MySQL

应该以同一个帐号来启动服务器软件,若是咱们在启动服务软件时使用不一样的帐号,那么这个软件所生成的一些文件就属于不一样的帐号,这时候软件所管理的文件权限将变得乱七八糟,权限混乱。session

应该使用低权限的帐号来运行MySQL

不使用root帐号启动MySQL,因此须要建立一些低权限的帐号来做为启动帐号,这样的话,即便被黑客攻击,形成的破坏也在有限的控制范围以内。socket

添加启动帐号

若是须要本身指定MySQL服务器的运行帐号,可使用下面的建立进行建立,好比下面咱们建立一个名为mysql的帐号:

# 下面两条命令须要使用root来执行
useradd -g mysql mysql
复制代码

若是以前使用过其余帐号启动过MySQL,还须要将MySQL的数据目录的用户及用户组为mysql这个帐号全部,如:

# 下面两条命令须要使用root来执行
$ chown -R mysql /usr/local/mysql/data
$ chgrp -R  mysql /usr/local/mysql/data
复制代码

设置启动帐号有两种方式

在配置文件是指定启动帐号,好比咱们能够/etc/my.cnf文件中增长下面的选项:

[mysqld]
user=mysql
复制代码

这样在启动时MySQL会将mysql做为启动帐号。

关于MySQL的配置文件方面的内容,后面有更详细的讲解。

也能够直接在启动项中指启动帐号,如:

#以mysql做为启动用户
mysqld -u mysql
复制代码

关于MySQL的启动项的内容,后面有更详细的讲解。

启动MySQL

在Linux中通常有如下几种启动MySQL服务器的方式,下面咱们来一一介绍一下。

mysqld

mysqld命令是MySQL的主程序,经过运行mysqld命令能够启动一个MySQL守护进程,即MySQL服务器,经过mysqld来启动MySQL服务器是最直接简单,但同时也是最不经常使用的方式。

# 在MySQL安装目录的bin目录下执行
$ mysqld
复制代码

mysqld_safe

mysqld_safe是MySQL的启动脚本,mysqld_safe添加了一些安全功能,在发生错误时重启服务器以及将运行时信息记录到错误日志中,因此通常更推荐使用mysqld_safe来启动MySQL服务器。

# 查看mysqld_safe支持的选项
$ mysqld_safe --help
复制代码

须要注意的是,在一些平台中并不会安装mysqld_safe脚本,这是由于这些平台在系统上支持mysql的启动与关闭,所以mysqld_safe便不须要了。

mysql.server

mysql.server也是一个用于管理MySQL服务器的脚本,其底层调用的是mysqld_safe脚本。

启动MySQL

$ mysql.server start
复制代码

关闭MySQL

$ mysql.server stop
复制代码

mysqld_safe同样,在一些支持mysql启动与关闭的平台上,并不会安装mysql.server脚本。

mysqld_multi

mysqld_multi是MySQL提供的用于管理多个MySQL服务器的脚本,能够同时启动或中止多个MySQL服务器,当咱们运行mysqld_multie脚本时,该脚本会在配置文件中查找名称为[mysqldN]的选项,N能够是任意的正整数。

mysqld_multi的其完整用法以下所示:

# GNR表示咱们上面提到的N
mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...]
复制代码

如今咱们定义一个以下所示的配置文件:

[mysqld1]
socket     = /tmp/mysql.sock2
port       = 3306
pid-file   = /usr/local/mysql/data2/hostname.pid2
datadir    = /usr/local/mysql/data2
language   = /usr/local/mysql/share/mysql/english
user       = unix_user1

[mysqld2]
mysqld     = /path/to/mysqld_safe
ledir      = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket     = /tmp/mysql.sock3
port       = 3307
pid-file   = /usr/local/mysql/data3/hostname.pid3
datadir    = /usr/local/mysql/data3
language   = /usr/local/mysql/share/mysql/swedish
user       = unix_user2
复制代码

使用下面的命令能够配置文件中定义的全部服务器:

mysqld_multi start
复制代码

也能够单独启动某个服务器,如:

mysqld_multi start 1
复制代码

mysqld_safe同样,在一些支持mysql启动与关闭的平台上,并不会安装mysqld_multi脚本。

关闭MySQL

前面咱们已经演示两种关闭MySQL服务器的方式,固然,咱们也能够经过使用mysqladmin命令来关闭MySQL服务器,如:

mysqladmin -p -u root shutdown
复制代码

在Windows上启动与关闭MySQL

在Windows操做系统要启动MySQL服务器有两种方式,一种方式是像Linux同样,直接经过命令行启动,另外一种方式是把MySQL注册为一个Windows服务,这种方式可使用MySQL随着Windows启动而启动,并且还能够经过界面启动。

命令行启动与闭

mysqld
复制代码

与Linux操做系统同样,咱们可使用mysqladmin命令关闭一个正在运行的MySQL服务器

mysqladmin -p -u root shutdown
复制代码

经过Windows服务启动与关闭

在windows操做系统中,除上面的本身运行命令启动外,也能够经过Windows服务的方式来管理MySQL。

注册Windows服务

使用下面的命令能够将MySQL注册为Windows服务:

mysqld --install
复制代码

若是你不想MySQL服务在开机时自动启动,可使用下面的命令:

mysqld --install-manual
复制代码

使用上面的命令,注册的服务名为mysqld,咱们也能够自定义服务名,如:

# service_name为自定义的服务名
mysqld --install service_name
复制代码

也能够在注册Windows服务的时候,指定加载的配置文件,如:

mysqld --install service_name --default-file=filename
复制代码

启动

使用上面的命令,咱们把MySQL注册为Windows服务,所以咱们可使用下面的命令启动MySQL:

net start mysql
复制代码

关闭

若是MySQL已经注册为Windows服务,也可使用下面的命令关闭MySQL。

net stop mysql
复制代码

删除Windows服务

若是想删除Windows服务,可使用上面的命令,把服务停掉,而后再执行下面的命令:

sc delete mysql
复制代码

设置启动项

上面咱们演示启动MySQL服务器时,在启动命令后面没有跟任何参数,这意味着使用MySQL会使用本身程序内默认的参数,若是咱们想修改这些参数,在使用启动命令时能够一一指定。

好比,默认的MySQL监听的是3306端口,咱们能够启动时,将端口更改成3307,如:

$ mysqld -P3307
复制代码

使用下面的命令能够查看mysqld的所有选项参数:

$ mysqld --verbose --help
复制代码

对于mysqld_safemysql.servermysqld_multi,也能够像mysqld同样查看选项参数,好比:

mysqld_safe --help
复制代码

MySQL的选项参数支持长选项和短选项两种,长选项的参数比较长,像--user,--posrt这种称为长选项,而-P,-u这种称为短选项,如:

mysqld --user=mysql --port=3307
复制代码

MySQL的配置文件

上面咱们讲了经过启动项参数来控制MySQL服务器的行为,这种方式虽然简单直接,但若是须要指定的启动参数不少,那每次运行MySQL时,就须要在命令行敲一大堆的参数,很是不方便。

因此在MySQL中,还支持使用 配置文件(或者叫选项文件) 来保存启动项,当咱们配置文件中指定相应的选项后,在启动MySQL时,就会将配置文件中的选项做为启动项,好比咱们前面的示例的/etc/my.cnf文件:

[mysqld]
user=mysql
复制代码

以--no-defaults选项启动的MySQL程序除.mylogin.cnf外,不读取任何选项文件。

$ mysqld --no-defaults
复制代码

若是配置文件中指定的选项与在命令行中指定的选项相同,则以命令行中指定的选项为优先,好比咱们在配置文件中指user=mysql,但在命令行以--user=mysql做为启动参数,如:

mysqld --user=test
复制代码

这样则以test做为MySQL的启动帐号。

配置文件的加载顺序

MySQ配置文件通常以cnf为后缀名,不过在Windows中也能够ini为后缀名,下面咱们来看看配置文件的加载顺序。

类unix相关配置文件

对于类Unix操做系统中而方,会按照如下的顺序加载配置文件:

文件路径与名称 相应说明
/etc/my.cnf 全局有效
/etc/mysql/my.cnf 全局有效
SYSCONFDIR/my.cnf 全局有效
$MYSQL_HOME/my.cnf 特定于服务器的选项(仅限服务器)
defaults-extra-file 在命令行中指定的额外配置文件路径
~/.my.cnf 用户特定选项,~表示当前用户家目录
~/.mylogin.cnf 用户特定的登陆路径选项(仅限客户端),~表示当前用户家目录

SYSCONFDIR表示在MySQL源码安装使用CMake编译时经过DSYSCONFDIR选项指定的目录,若是不指定,默认为源码的etc目录,$MYSQL_HOME是咱们能够本身指定的环境变量。

windows相关配置文件

而对于Windows操做系统而言,启动MySQL时会按照如下的顺序加载各个配置文件:

文件路径与名称 解释说明
%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 登陆路径选项(对客户端命令有效)

%WINDIR%通常是指C:\WINDOWS目录,固然咱们也能够经过下面的命令查看:

C:\> echo %WINDIR%
复制代码

%APPDATA%的值是Windows操做系统用于存放应用程序数据目录,一样能够在命令行查看:

C:\> echo %APPDATA%
复制代码

BASEDIR是MySQL的基本安装目录,若是咱们安装的是MySQL5.7,则这个目录通常是指C:\PROGRAMDIR\MySQL\MySQL 5.7 Server,PROGRAMDIR表示Program Files目录。

--default-extra-file

虽然MySQL在启动的时候会按顺序加载前面所说的配置文件,不过在启动时也能够经过--default-extra-file选项指定其余的配置文件,如:

$ mysqld --default-extra-file=/home/test/config/my.cnf
复制代码

mylogin.cnf

MySQL的配置文件通常是纯文本文件,用通常文本文件编辑器就可能编辑,但mylogin.cnf文件是个例外,mylogin.cnf文件是使用mysql_config_editor程序生成的的一个加密文件,mylogin.cnf文件只对客户端命令(mysql,mysqladmin等)有效,该文件只能包含user,host,password,socket等与客户端登陆有关的选项。

如何写一个MySQL配置文件

MySQL配置的格式通常为一个分组(group)下能够有多个opt_name=value或单独opt_name的选项,以下所示:

[group]
opt_name1=value1
opt_name2=value2
opt_name3
...
opt_nameN=valueN

[group]
opt_name1=value1
opt_name2=value2
opt_name3
...
opt_nameN=valueN
复制代码

用#或;能够注释一行选项,如:

[mysql]
;user=mysql
#port=3306
复制代码

group须要用中括号([])包含起来,表示一个选项组,其取值经常使用的有server、mysqld、mysqld_safe、client、mysql、mysqladmin、mysqldump,分别对应不一样的MySQL命令。

不过server和client,server选项组表示服务器命令的选项,因此mysqld,mysqld_safe等服务器命令能够读取[server]选项组的配置,而client而对应客户端命令的配置,因此mysql,mysqladmin,mysqldump等客户端命令能够读取到[client]选项组。

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

[mysqldump]
quick
复制代码

系统变量

对于已经启动起来的MySQL服务器来讲,已经不能经过启动项或配置文件来更改MySQL服务器的行为,这时候可能经过设置MySQL的系统变量来作到这一点。

查看系统变量

经过命令行客户端登陆MySQL服务器后,咱们能够经过下面的命令打印MySQL的系统变量:

mysql> show variables
复制代码

因为直接show variables命令会将全部的系统变量打印出来,因此咱们能够加上like来筛选出系统变量,如:

mysql> show variables like '%character_set_client%'
复制代码
设置系统变量

MySQL系统变量根据做用范围的不一样可分为:全局系统变量(global variable)和会话系统变量(session variable)。

全局系统变量(global variable):对全部连到到服务器的客户端都有用。

会话系统变量(session variable):只有当前链接会话发生做用。

经过SET语句能够设置系统变量,SET后面跟GLOBAL为设置全局系统变量,SESSION为会话系统变量语法以下:

SET [GLOBAL|SESSION] var_name = var_value;
复制代码

也可使用下面的语法:

SET [@@(GLOBAL|SESSION).]var_name = var_value;
复制代码

简单示例:

mysql> set global character_set_client=utf8;
复制代码

若是咱们在设置系统变量时,不指定global或session,则默认为设置会话系统变量,如:

mysql> set character_set_client=utf8;
复制代码

查看不一样做用范围的系统变量

mysql> show global variables like 'character_set_client';
复制代码

小结

经过上面的了解,咱们知道,在启动MySQL时,经过启动项或都配置文件的各类参数,咱们能够控制MySQL服务器的各类行为,而即便MySQL服务器已经启动完成,咱们仍然能够经过系统变量来控制MySQL服务器。

欢迎扫码关注,共同窗习进步

相关文章
相关标签/搜索