MySQL服务器的启动与退出

 MySQL在ArchLinux上的安装与启动
在ArchLinux上我们可以很容易的来安装MySQL。我们可以通过下面的命令来安装:
pacman -Sv mysql
只是这样的一个简单命令,我们就可以在我们的系统安装上最新的MySQL数据库了。当然我们还要做一些下面的工作,才可以使得我们的MySQL服务器可以启动起来。
首先我们要添加mysql用户与组,我们可以通过下面的命令来做到:
groupadd mysql (添加mysql组)
useradd -g mysql mysql(添加mysql用户)
然后我们可以用下面的命令来安装MySQL数据库预定义的一些数据表:
mysql_install_db --user=mysql
这时如果我们来启动MySQL服务器会有一些提示信息,我们还要做下面的一些事情:
mkdir /var/lib/mysql
touch /var/lib/mysql/myhost.err
经过这样的操作以后,我们就可以启动MySQL服务器了:
mysqld_safe &
MySQL服务器启动脚本
mysqld_safe--MySQL服务器启动脚本
mysqld_safe是在Unix或是NetWare系统推荐使用来启动MySQL服务器的方法。mysqld_safe添加了许多安全的特征,例如,当发生错误时重新启动服务器,并且可以将运行时的信息写入错误日志文件。
在这里我们要注意的是,为了与旧版本的MySQL保持向后兼容,MySQL的二进制发行版本同时也包含safe_mysqld作为指向mysqld_safe的链接。然而我们并不应依赖于这个启动程序,因为这在将来的版本中会被移除。
在默认的情况下,如果在存在一个可执行的mysqld-max,mysqld_safe
1 在Linux系统上,MySQL-Max RPM依赖于mysqld_safe的行为。RPM安装一个名为mysqld-max的可执行程序,这会使得mysqld_safe从此以后自动调用这个可执行程序。
2 如果你安装了一个包含名为mysqld-max服务器的二进制发行版本,然后在以后的某一个时期我们更新到了一个没有Max版本的MySQL, mysqld_safe仍然会试着运行旧的mysqld-max的服务器。如果我们执行了这样的更新,我们应手式移除旧的mysqld-max服务器,并 且保证mysqld_safe运行新的的mysqld服务器。
要覆盖默认的行为并且显示的指明我们要运行的服务器,我们可以为我们的mysqld_safe指定一个-mysqld或是-mysqld-version选项。
mysqld_safe的大多数选项与mysqld的相同。
mysqld命令行选项
在命令行为mysqld_safe指定的所有选项都传递给mysqld。如果我们要使用任何一个为mysqld_safe指定的并且mysqld不支持的,不要在命令行指定他们。相反的,我们可以在一个可选的文件[mysqld_safe]组中列出。
mysqld_safe从选项文件中的[mysqld],[server],[mysqld_safe]部分读出各个选项。为了向后兼容,他还会读出[safe_mysqld]部分,虽然我们要在MySQL5.0的安装中将这一部分重命名为[mysqld_safe].
mysqld_safe支持下列的选项:
--help
显示帮助信息并退出。
--autoclose
在NetWare系统上,mysqld_safe提供一个屏幕显示.当我们御载(关闭)mysqld_safe NLM,在默认的情况下这个屏幕并不会消失.相反,他们提示用户进行输入:
*<NLM has terminated; Press any key to close the screen>*
如果我们希望NetWare自动关闭这个屏幕,我们可以为mysqld_safe提供--autoclose选项
--basedir=path
指定MySQL的安装目录
--core-file-size=size
mysqld可以创建的core文件的大小。这个选项的值将会传递给ulimit -c.
--datadir=path
数据目录的路径。
--defaults-extra-file=path
在常规选项文件之外要读取的额外的选项文件名。如果要指定,这个选项必须是第一个。
--defaults-file=path
替换常规选项文件要读取的选项文件。如果要指定,这个选项必须是第一个。
--ledir=path
包含mysqld程序的目录路径。使用这个选项来显示指明服务器的位置。
--log-error=path
将错误日志写入指定的文件。
--mysqld=prog_name
我们要启动的服务器程序的名字。如果我们使用MySQL的二进制发行版本,但是使用却是二进制版本以外的数据目录,那么这个选项是必须的。
--mysqld-version=suffix
这 个选项与--mysqld程序相似,但是我们只是为服务器程序指定了前缀。基础名会被假定为mysqld。例如,如果我们使用-mysqld- version=max,mysqld_safe将会启动ledir目录中的mysqld-max程序。如果--mysqld-version的参数为 空,mysqld_safe会使用ledir目录中的mysqld程序。
--nice=priority
使用nice程序来为服务器的运行级别指定一个数值。
--no-defaults
并不读入任何选项文件。如果要指定,这个选项必须是第一个。
--open-files-limit=count
mysqld可以打开的文件数量。这个选项值将会传递给ulimit -n。在这里我们要注意的是如果要使用这个选项正常工作,我们需要以root身份来启动mysqld_safe。
--pid-file=path
进程序ID文件的路径。
--port=port_num
当监听TCP/IP连接时要使用的端口号.这个端口号必须是1024或是更高,除非MySQL是以root系统用户运行的.
--skip-character-set-client-handshake
忽略客户端发送的字符设置信息,而使用默认的服务器字符设置.
--socket=path
为本地连接所用的Unix套接字文件.
--timezone=zone
将TZ时区环境变量设置为指定的值.查看我们的操作系统文件可以得到合法时区的详细格式.
--user={user_name | user_id}
以用户名user_name或是数字用户ID user_id的用户来运行mysqld服务器.
当运行mysqld_safe时,必须首先指定--defaults-file或是--defaults-extra-option选项,否则选项将不会被使用.例如,下面的命令就不会使用指定的选项文件:
mysqld_safe --port=port_num --defaults-file=file_name
相反,我们应使用下面的命令:
mysqld_safe --defaults-file=file_name --port=port_num
mysqld_safe这样进行编写就可以保证正常的启动由源码包或是二进制发行版本�沧暗腗ySQL中的服务器,甚至是这些二进制发行版本将其安装在不同的位置也可以正常的启动。mysqld_safe要求下列条件中的一个为真:
1 在相对于mysqld_safe的目录的相对目录中可以找到服务器和数据库。对于二进制发行版本,mysqld_safe在他的工作目录下查找bin和 data目录。对于源码包安装的MySQL,他会查找libexec和var目录。如果我们从我们的MySQL安装目录执行mysqld_safe,这些 条件必须满足。
2 如果服务器和数据并没有在MySQL的工作目录的相对目录中找到,mysqld_safe就会试着以绝对路径来进行查找。典型的路径是 /usr/local/libexec和/usr/local/var。实际的路径将会决定于二进制发行版本在构建时所配置的值。如果MySQL安装在配 置时指定的路径内,这些必须正确。
因为mysqld_safe会试着在相对于他的工作目录的目录中查找服务器与数据库,所以我们可以将MySQL安装在任何地方,只要我们在MySQL的安装目录中执行mysqld_safe即可:
shell> cd mysql_installation_directory
shell> bin/mysqld_safe &
如果mysqld_safe失败,即使是在MySQL的安装目录中进行调用,我们也可以指定--ledir和--datadir选项来表明服务器与数据库在我们的系统中所在的目录。
在 通常情况下我们不应修改mysqld_safe脚本,我们可以使用命令或是在my.cnf选项文件中的[mysqld_safe]部分进行修改。只有在极 少的情况下也许必须修改mysqld_safe脚本来使得他正常启动。然而,如果我们这样做,如果我们在将来进行升级,我们所修改的版本就会被覆盖掉,所 以我们要备份一个我们的修改版本,从而我们可以进行重装。
MySQL服务器的关闭过程
MySQL服务器的关闭过程可以总结为以下几点:
1 初始化关闭过程
2 如果必须服务器创建一个关闭进程
3 服务器停止接受新的连接
4 服务器结束当前的活动
5 存储引擎结束或是关闭
6 服务器结束
更为详细的描述如下:
1 初始化关闭过程
可 以用几种方法来初始服务器关闭。例如,一个有着SHUTDOWN权限的用户可以执行mysqladmin shutdown命令。mysqladmin可以在MySQL支持的任何平台上运行。其他与操作系统相关的实始化方法也是可以的:在Unix系统上,当服 务器接收到一个SIGTERM信号时服务器就会结束。在Windows系统上以服务运行的服务器可以在任务管理器中结束。
2 如果必须服务器会创建一个结束进程
依 据如何初始化结束,服务器也许会创建一个进程来处理结束过程。如果结束是由客户端请求,就会创建一个结束进程。如果结束是由接收到SIGTERM信号引起 的,信号进程将会处理结束过程,或者他会创建一个单独的进程来处理。如果服务器试着创建一个结束进程但是却创建失败时,他会显示如下的错误信息:
Error: Can't create thread to kill server
3 服务器停止接受新的连接
为了避免在结束过程中新的活动,服务器停止新收新的连接。这样做的方法是结束平时监听的网络连接:TCP/IP端口,Unix套接字文件,Windows命令管道,Windows上的共享主存.
4 服务器结束当前的活动
为每一个与客户端相关的进程,到客户端的每一个连接断开并且每一个进程被标识为死亡.当进程发现他们被进行了这样的标识时就会死掉.空连接的进程会很快死掉.当前正在进行查询的进程会检查他们的状态并且过后死掉.
对于有一个开放事务的进程,事务会滚回.在这里我们要注意的是如果一个进程在更新一个非事务表,例如多行更新或是插入的操作,将会使得表部分更新,因为这样的操作会在完成之前结束.
如果这个服务器是一个主复制服务器,与当前连接的从服务器的进程也会被当作其他的客户端进程对待.也就是说,每一个进程都会被标识为死亡,当下一次检查状态时退出.
如果这个服务器是一个从复制服务器,I/O与SQL进程,如果是活动,将会在客户端进程被标识为死亡之前被停止.SQL进程会允许结束当前的语句然后退出.如果SQL进程此时正在进行事务处理,事务将会滚回.
5 存储引擎结束或是关闭
在这一步,数据表缓存将会被刷新,而所有打开的表都会被关闭.
每一个存储引擎都会为他所管理的数据表进行必要的操作.例如,MyISAM会刷新一个表的索引.
6 服务器结束.事务会滚回.在这里我们要注意的是如果一个进程在更新一个非事务表,例如多行更新或是插入的操作,将会使得表部分更新,因为这样的操作会在完成之前结束.
如果这个服务器是一个主复制服务器,与当前连接的从服务器的进程也会被当作其他的客户端进程对待.也就是说,每一个进程都会被标识为死亡,当下一次检查状态时退出.
如果这个服务器是一个从复制服务器,I/O与SQL进程,如果是活动,将会在客户端进程被标识为死亡之前被停止.SQL进程会允许结束当前的语句然后退出.如果SQL进程此时正在进行事务处理,事务将会滚回.
5 存储引擎结束或是关闭
在这一步,数据表缓存将会被刷新,而所有打开的表都会被关闭.
每一个存储引擎都会为他所管理的数据表进行必要的操作.例如,MyISAM会刷新一个表的索引.
6 服务器结束.
原文地址:https://www.cnblogs.com/dyllove98/p/2462086.html