mysql启动停止,一台服务器跑 多个mysql数据库

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 一、以非特权用户运行MySQL服务器在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务器。服务器可以手动或自动启动。如果你手动启动它, 服务器以你登录Unix(Linux)的用户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换到root,然后运启动服务器,则它以root运行。

一、以非特权用户运行MySQL服务器
在讨论如何启动MySQL服务器之前,让我们考虑一下应该以什么用户身份运行MySQL服务
器。服务器可以手动或自动启动。如果你手动启动它, 服务器以你登录Unix(Linux)的用
户身份启动,即如果你用paul登录Unix并启动服务器,它用paul运行;如果你用su命令切换
到root,然后运启动服务器,则它以root运行。然而,大多数情况下你可能不想手动启动服
务器,最有可能是你安排MySQL服务器在系统引导时自动启动,作为标准引导过程的一部分,
在Unix下,该引导过程由系统的Unix用户root执行,并且任何在该过程中运行的进程均以
root权限运行。

你应该牢记MySQL服务器启动过程的两个目标:
1. 你想让服务器以某个非root用户运行。一般地,你想限制任何运行进程的能力,除
非确实需要root权限,而MySQL不需要。
2. 你想让服务器始终以同一个用户运行,此时用一个用户而其他时候以另一个不同的
用户运行服务器是很不方便的,这造成了为文件和目录以具有不同属主的数据目录
下被创建,并可能导致服务器不能访问数据库或表,这看你以哪个用户运行。统一
用同一个用户运行服务器是你避免这个问题。

要一个普通的非特权用户运行服务器,按照下列步骤:
1. 选择一个用于运行服务器的用户,mysqld可以用任何用户运行。但在概念上较清晰
的是为MySQL操作创建一个单独的用户。你也可以特别为MySQL选择一个用户组。本
文使用mysqladm和mysqlgrp分别作为用户名和用户组名。
2. 如果你已在自己的账号下安装好了MySQL且没有系统上的特殊管理权限, 你将可能
在你自己的用户ID下运行服务器。在这种情况下,用你自己的登录名和用户组代替
mysqladm和mysqlgrp。
3. 如果你在RedHat Linux上用rpm文件安装MySQL,该安装将自动创建一个名为mysql
的账号,用该账号代替mysqladm。
4. 如果必要,用系统通常的创建用户的过程创建服务器账号,你需要用root做它。
5. 如果服务器在运行,停止它。
6. 修改数据目录和任何子目录和文件的属主,这样使得mysqladm用户拥有它们。例如,
如果数据目录是/usr/local/var,你可以如下设置mysqladm的属主(你需要以root
运行这些命令):
#cd /usr/local/var
#chown -R mysqladm.mysqlgrp

修改数据目录和任何子目录和文件的权限,使得它们只能由mysqladm用户访问。如果数
据目录是/usr/local/var,你可以设置由mysqladm拥有的任何东西:
# cd /usr/local/var
# chmod -R go-rwx
当你设置数据目录及其内容的属主和模式时,注意符号连接。你需要顺着它们并改变它
们指向的文件或目录的属主和模式。如果连接文件的目录位于不属于你的地方,会有些麻烦,
你可能需要root身份。
在你完成了上述过程后,你应该确保总是在以mysqladm或root登录时启动服务器,在后
者,确定指定--user=mysqladm选项, 使服务器能将其用户ID切换到mysqladm(同时也适用
于系统启动过程)。
--user选项在MySQL 3.22中引入,如果你有老版本,你可以使用su命令告诉系统在以
root运行时在特定的用户下运行服务器。

二、启动服务器的方法
在我们确定了用于运行服务器的账号后,你可以选择如何安排启动服务器。你可以从命
令行手动或在系统引导过程中自动地运行它。对于启动服务器由三种主要方法:
1. 直接调用mysqld。
这可能是最不常用的方法,建议不要多使用,因此本文不详细介绍。
2. 调用safe_mysqld脚本。
safe_mysqld试图确定服务器程序和数据目录的位置。 然后用反映这些值的选项调
用服务器。safe_mysqld将标准出错设备从服务器重定位到数据目录下的一个出错文件,
使得有它的一条记录。在启动服务器后, safe_mysqld也监视它并且如果它死掉则重启
它。safe_mysqld常用于BSD风格的Unix系统。
如果你以root或在系统引导期间启动sqfe_mysqld,出错日志由root拥有, 这可能
在你以后试图用一个非特权用户调用safe_mysqld时将导致"permission denied"(权限
拒绝)错误,删除出错日志再试一下。
3. 调用mysql.server脚本。
这个脚本通过有意用于System V的启动和停止系统上的safe_mysqld.mysql.server
来启动服务器,该系统包含几个包含在机器进入或退出一个给定运行级别时被点用的脚
本目录。它可以用一个start或stop参数点用以表明你是想启动还是想停止服务器。
safe_mysqld脚本安装在MySQL安装目录的bin目录下,或可在MySQL源代码分发的
scripts目录下找到。mysql.server脚本安装在MySQL安装目录下的share/mysqld目录下
或可以在MySQL源代码分发的support_files目录下找到。如果你想使用它们,你需要将
它们拷贝到适当的目录下。
对BSD风格的系统(FreeBSD,OpenBSD等), 通常在/etc目录下有几个文件在引导
时初始化服务,这些文件通常有以“rc”开头的名字,且它有可能由一个名为“rc.local”
的文件(或类似的东西),特意用于启动本地安装的服务。在这样的系统上,你可能将
类似于下列的行加入rc.local文件中以启动服务器 (如果safe_mysqld的目录在你的系
统上不同,修改它即可):
if [ -x /usr/local/bin/safe_mysqld ]; then
/usr/local/bin/safe_mysqld &
fi

对于对于System V风格的系统,你可以通过将mysql.server放在/etc下适当的启动
目录下来安装它。如果你运行Linux并从一个RPM文件安装MySQL,这些已经为你做好了,
否则将脚本安装在主启动目录下,并将指向它的连接放在适当的运行级别目录下。你也
可以使脚本只能由root启动。

启动文件的目录布局各系统不同,所以你需要检查一下看看你的系统如何组织它们。
例如在Linux PPC上,目录是/etc/rc.d和/etc/rc.d/rc3.d,这样你可以这样安装脚本:

#cp mysql.server /etc/rc.d/init.d
#cd /etc/init.d
#chmod 500 mysql.server
#cd /etc/rc.d/rc3.d
#ln -s ../init.d/mysql.server S99mysql
在solaris上,主脚本目录是/etc/init.d,并且运行级别目录是/etc/rd2.d,所以
命令看上去像这样:

#cp mysql.server /etc/rc.d/init.d
#cd /etc/init.d
#chmod 500 mysql.server
#cd /etc/rc2.d
#ln -s ../init.d/mysql.server S99mysql
在系统启动时,S99mysql脚本将自动用一个start参数调用。如果你有chkconfig命
令(Linux上有), 你可以由它帮助安装mysql.server脚本而不是象上面那样手工运行
上述命令。

2.1 指定启动选项
如果你想在服务器启动时指定额外的启动选项,你可有两种方法。你可以修改你使
用的启动脚本(safe_mysqld或mysql.server)并直接在调用服务器的行上指定选项,
或在一个选项文件中指定选项。建议你如果可能在一个全局选项文件中指定选项,它通
常位于/etc/my.cnf(Unix)或c:my.cnf(Windows)。

某些种类的信息无法以服务器选项指定。对于这些你可能需要修改safe_mysqld。
例如,如果你的服务器不能正确选择本地时区而以GMT返回时间值, 你可以设置TZ环境
变量给它一个指示。如果你用safe_mysqld或mysql.server启动服务器, 你可以将一个
时区设置加到safe_mysqld。找到启动服务器的行并在该行前加入下列命令:

TZ=US/Central
export TZ
上面命令的语法是Solaris的,对于其他系统语法可能不同,请查阅相关手册。 如
果你确实修改了你的启动脚本,要记住下次你安装MySQL时(如升级到新版本), 你的
修改将失去,除非你首先在别处复制了启动脚本。在安装了新版本后,比较新旧版本的
脚本,看看你需要重建什么改变。

2.2 在启动时检查你的表
除了安排你的服务器在系统引导时启动,你可能要安装myisamchk和isamchk脚本,
以在服务器启动前检查你的表。你可能在一个崩溃后重启,有可能表已经损害,在启动
前检查它是一个发现问题的好方法。

三、停止服务器
要手工停止服务器,使用mysqladmin:
mysqladmin shutdown
要自动停止服务器,你不需做特别的事情。 BSD系统一般通过向进程发一个TERM信号停
止服务,它们或者正确应答它或被粗鲁地杀死。mysqld在它收到这个信号时以终止作为应答。
对于用mysql.server启动服务器的System V风格的系统,停止进程将用一个stop参数调用该
脚本,告诉服务器终止,当然假定你已安装了mysql.server。

四、如果你不能连接服务器,如何重新获得对服务器的控制
在某些情况下,你可能由于不能连接它而手工重启服务器。当然,这有点矛盾。因为一
般你通过连接服务器而手工关掉它,那么这种情况如何会出现。
首先,MySQL root口令可以已经设置为你不知道的值,这可能发生在你修改口令时,例
如,如果你在输入新口令时偶然键入一个不可见的控制字符。你也可能忘记口令。
其次,连接localhost通常通过一个Unix域套接字文件进行,一般是/tmp/mysql.sock。
如果套接字文件被删除了,本地客户就不能连接。这可能发生在你的系统运行一个cron任务
删除了/tmp下的临时文件。
如果你因为丢失套接字文件而不能连接,你可以简单地通过重启服务器重新创建得到它。
因为服务器在启动时重新创建它。这里的骗局是你不能用套接字建立连接因为它不见了,你
必须建立一个TCP/IP连接,例如,如果服务器主机是pit.snake.net,你可以这样连接:
%mysqladmin -p -u root -h pit.snake.net shutdown
如果套接字文件被一个cron任务删除,问题将重复出现,除非你修改cron任务或使用一
个或使用一个不同的套接字文件,你可以使用全局选项文件指定一个不同的套接字,例如,
如果数据目录是/usr/local/var,你可以通过将下列行加入/etc/my.cnf中, 将套接字文件
移到那里:
[mysqld]
socket=/usr/local/var/mysql.sock
[client]
socket=/usr/local/var/mysql.sock

对服务器和客户均指定路径名,使得它们都使用同一个套接字文件。如果你只为服务器
设置路径,客户程序将仍然期望在原位置执行套接字,在修改后重启服务器,使它在新位置
创建套接字。
如果你由于忘记root口令或已经将它设置为不同于认为的值而不能连接,你需要重新获
得对服务器的控制,是你能再次设置口令:
中断服务器
如果你以root登录服务器主机,你可以用kill命令终止服务器。你可以使用ps命令或通
过寻找服务器的PID文件(通常在数据目录中)找出服务器进程的ID。
最好是首先尝试用一个向服务器发出一个TERM信号的正常kill看它是否将以正常终止应
答。这种方式下,表和日志将正确地被清空。如果服务器阻塞并且不应答一个正常终止信号,
你可以用kill -9强制终止它。这是最后的手段了,因为这可能有未清空的修改, 而且你冒
着让表处于一个不一致状态的风险。
如果你用kill -9终止服务器, 要确保在启动服务器前用myisamchk和isamchk检查你的
表。
用--skip-grant-table选项重启服务器。
这告诉服务器不使用授权表验证连接,这允许你以root连接而无须口令。在你已经连接
后,改变root口令。
用mysqladmin flush-privileges告诉服务器再次使用授权表启动
如果你的mysqladmin版本不认识flash-privileges,试一试reload。

五、运行多个服务器
大多数再一台给定的机器上运行单个MySQL服务器,但在很多情况下, 运行多个服务器
是很有用的:
你可能想测试一个服务器的新版本,而保留你正在运行的生产服务器。在这种情况下,
你会运行不同的服务器代码。
操作系统一般限制每个进程的打开文件句柄数量。如果你的系统很难提高这个限制,运
行多个服务器是解决限制的一种方法。在这种情况下,你可能运行统一服务器的多个实例。
ISP经常为其客户提供自己的MySQL安装,有必要涉及单独的服务器。在这种情况下,你
可能运行同一版本的多个实例或不同版本,如果不同的客户想要不同版本的MySQL。
很自然地,运行多个服务器比只运行一个服务器要复杂得多。如果你安装多个版本,你
不能在同一个地方安装所有东西。当服务器运行时,某些参数必须或很可能对每个服务器是
唯一的,它们包括服务器在哪安装、其数据目录的路径名、TCP/IP端口和UNIX域套接字路径
名以及用于运行服务器的UNIX账号(如果你不再同一账号下运行所有服务器)。如果你决定
运行多个服务器,一定要注意你使用的参数,是你不至于丢失对所发生的事情的踪迹。

5.1 配置和安装多个服务器
如果你要运行不同版本的服务器而不是同一版本的多个实例,你必须在不同地点安
装它们。如果你安装二进制分发(不用RPM), 它们将安装在包含不同版本号的目录名
下。如果你从源代码安装,最简单的方法是在每个版本运行configure配置MySQL安装过
程中使用--with-prefix选项使得不同分发分开, 这将使得所有东西安装在一个单独的
目录下,你可以将目录域分发版本号联系起来,如,你可以象这样配置一个MySQL分发,
其中version是MySQL版本号:
%.configure --with-prefix=/usr/local/mysql-version
--with-prefix选项也决定了服务器的一个唯一数据目录。 你可能想加上其它服务
器特定的选项,如TCP/IP端口号和套接字路径名(--with-tcp-port和--with-unix-socket)。
如果你想运行同一版本服务器的多个实例,任何必须基于一个服务器特定设置的选
项将需要在运行时指定。

5.2 多服务器的启动过程
启动多个服务器比使用一个服务器要复杂。 因为safe_mysqld和mysql.server均在
单个服务器设置上工作得最好。 建议你仔细研究一下safe_mysqld并用它作为你的启动
过程的基础,使用你修改的版本,你能针对你自己的需要更精确地裁剪它。
你必须处理的一个问题是如何在选项文件(my.cnf)中指定选项。对于多服务器,
你不能对于每个不同的服务器设置使用/etc/my.cnf, 你只能对所有服务器相同的设置
使用该文件。如果服务器有一个不同的编译进去的数据目录位置,你可以在每个服务器
数据目录中的my.cnf中指定所有服务器要使用的设置,而使用DATADIR/my.cnf指定服务
器特定的设置,这里DATADIR以服务器不同而不同。
另一种指定服务器选项的方法是用--default-file=path_name作为命令行的第一个
选项,告诉服务器从名为path_name中的文件中读取选项, 这样你可以把一个服务器选
项放在一个对该服务器唯一的文件中,然后告诉服务器在启动时读取该文件。注意,如
果你指定这个选项,将不使用通常的选项文件如/etc/my.cnf的任何一个。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
1天前
|
SQL 关系型数据库 MySQL
MySQL导入.sql文件后数据库乱码问题
本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。
|
21天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
23天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
36 4
|
29天前
|
PHP 数据库 数据安全/隐私保护
布谷直播源码部署服务器关于数据库配置的详细说明
布谷直播系统源码搭建部署时数据库配置明细!
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
171 1
|
1月前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
89 2
|
1月前
|
存储 关系型数据库 MySQL
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
查询服务器CPU、内存、磁盘、网络IO、队列、数据库占用空间等等信息
271 2
|
1月前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
126 4
|
18天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
128 0
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第26天】数据库作为现代应用系统的核心组件,其性能优化至关重要。本文主要探讨MySQL的索引策略与查询性能调优。通过合理创建索引(如B-Tree、复合索引)和优化查询语句(如使用EXPLAIN、优化分页查询),可以显著提升数据库的响应速度和稳定性。实践中还需定期审查慢查询日志,持续优化性能。
76 0