MySQL服务启动与关闭

1. 服务启动与关闭

在生产环境中,数据库服务的运行状态一般是不会进行随意调整的,在特殊场景下需要提前审批后,才能进行调整。在进行数据库服务关闭前,可以将业务先切换到备库(从库),再停止原有主库服务。

1.1 常规启动和关闭方式

MySQL数据库的常规启动和关闭方式有systemdsys-v两种方式。

  • 方法1:systemd 方式 —— Centos7及以后服务启动主流方式
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl stop mysqld
[root@localhost ~]# systemctl restart mysqld
  • 方法2:sys-v 方式 —— Centos7以前服务启动主流方式
[root@localhost ~]# service mysqld start
[root@localhost ~]# service mysqld stop
[root@localhost ~]# service mysqld restart
# 或者
[root@localhost ~]# /etc/init.d/mysqld start
[root@localhost ~]# /etc/init.d/mysqld stop
[root@localhost ~]# /etc/init.d/mysqld restart

注意:上述停止命令本质:kill mysql_pid;启动命令本质:mysqld_safe ....

  • 方法3:mysqld_safe启动方式
[root@localhost ~]# mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
  • 方法4:mysqld启动方式
[root@localhost ~]# mysqld --defaults-file=/etc/my.cnf --user=mysql &

mysqld_safemysqld

  • mysqld:是mysql核心程序,用于管理mysql数据库文件以及用户请求 操作。mysqld可以读取配置文件,启动MySQL实例。
  • mysqld_safe:是mysqld的守护进程,保护MySQL服务正常运行,当mysqld程序被关闭、异常退出等时再次启动程序,mysqld退出了,mysqld_safe会自动把mysqld进程拉起来,用来监视mysqld进程。

数据服务运行启动的进程信息查看:

[root@localhost ~]# ps -ef|grep mysqld
root      20315      1  0 07:55 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/3306/data --pid-file=/data/3306/data/db.pid
# 利用mysqld_safe脚本信息,可以满足定制修改的需求,设置一些灵活的变量信息,支持一些高级的启动功能mysql     20469  20315  1 07:55 ?        00:00:23 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=db.err --pid-file=/data/3306/data/db.pid --socket=/tmp/mysql.sock --port=3306
root      20580  20558  0 08:28 pts/1    00:00:00 grep --color=auto mysqld
# 利用mysqld命令可以启动数据库服务,并显示启动的命令进程信息,但不能负责完成数据库服务的停止和重启操作
# 利用mysqld命令可以启动数据库服务,有些服务功能是锁定死的,不能编辑改动(比如日志功能)
# 利用mysqld_safe命令启动数据库服务,可以进行特殊功能信息配置,并且可以实现数据库维护性操作,还可以设置启停重启; #/etc/init.d/mysqld是MySQL自带的使用Shell编写的启动脚本,执行脚本后最终会调用mysqld_safe命令脚本,mysqld_safe脚本执行后又会调用mysqld主程序启动MySQL服务。

说明:通过以上进程信息,可以看出数据库服务可以更灵活的启动,使用mysqldmysqld_safe命令来完成,主要用于维护操作。

数据库服务运行启动与关闭操作逻辑

在这里插入图片描述

1.2 维护启动和关闭方式

  • 维护性启动方式,往往需要额外加参数启动。
# 附带一般参数
mysqld --port=3306 --mysqlx=0 &        # 其中--mysqlx=0为关闭33060端口(MySQL X Protocol协议端口),这是8.0增加的功能。## 命令解读
mysqld:      MySQL服务器的守护进程(daemon)的名字。它负责运行MySQL数据库服务。
--port=3306: 指定MySQL服务监听的TCP/IP端口号。默认情况下,MySQL服务通常监听3306端口。这里明确指定了端口为3306。
--mysqlx=0:  控制MySQL X Protocol(支持JSON数据格式)协议启用。设置为0表示禁用该协议。通常是为了减少资源消耗或不必要的网络暴露。
&:           用于将命令放入后台运行。这意味着命令会被立即执行,同时shell不会等待命令完成就可以继续执行其他命令。# 附带忽略授权表和忽略网络参数启动,当root管理员密码丢失时,要使用这个命令启动。
mysqld_safe --skip-grant-tables --skip-networking &
--skip-grant-tables:  启动时不加载权限(grant)表。任何人都可以无需密码直接连接到数据库,并且拥有所有权限(包括管理员权限)。
--skip-networking:    禁止MySQL服务器监听任何网络端口,即阻止任何远程连接。# 使用mysqld和mysqld_safe启动优势:可以额外加参数启动,命令行参数优先级高于配置文件my.cnf里的参数。
  • 维护性关闭方式
kill pid               #<==这里的pid为数据库服务对应的进程号。
killall mysqld         #<==这里的mysqld是数据库服务对应的进程名字。
pkill mysqld           #<==这里的mysqld是数据库服务对应的进程名字。# 注意:这里的关闭,千万不要加-9参数强制杀死,否则,可能导致数据库无法启动。

1.3 其它关闭方式

MySQL提供了一个mysqladmin管理命令,可以用来优雅的关闭数据库,命令如下:

[root@localhost ~]# mysqladmin shutdown     
#<==注意,如果有密码要指定密码。mysqladmin -uroot -p123456 shutdown

除了应用脚本文件或命令进行关闭数据库服务之外,还可以进入到数据库服务中进行关闭服务:

mysql> shutdown;     # 也可以mysql -e "shutdown;" 5.7开始增加.
mysql> restart;

1.4 启动与关闭原理

  • 关闭原理

采用systemctl或者service方式关闭数据库的本质都是 kill 进程号

# 查看停止脚本
[root@localhost tmp]#  sed -n '281,301p' /etc/init.d/mysqld'stop')# Stop daemon. We use a signal here to avoid having to know the# root password.if test -s "$mysqld_pid_file_path"then# signal mysqld_safe that it needs to stoptouch "$mysqld_pid_file_path.shutdown"mysqld_pid=`cat "$mysqld_pid_file_path"`###kill -0 $mysqld_pid 判断pid对应的进程是否运行.if (kill -0 $mysqld_pid 2>/dev/null)thenecho $echo_n "Shutting down MySQL"# 杀死进程kill $mysqld_pid# mysqld should remove the pid file when it exits, so wait for it.wait_for_pid removed "$mysqld_pid" "$mysqld_pid_file_path"; return_value=$?elselog_failure_msg "MySQL server process #$mysqld_pid is not running!"rm "$mysqld_pid_file_path"fi
  • 启动原理

采用systemctl或者service方式启动数据库的本质都是调用mysqld_safe命令启动。对应脚本如下:

[root@localhost tmp]# sed -n '255,279p' /etc/init.d/mysqld'start')     #<==启动命令的传参。# Start daemon# Safeguard (relative paths, core dumps..)cd $basedirecho $echo_n "Starting MySQL"if test -x $bindir/mysqld_safethen# Give extra arguments to mysqld with the my.cnf file. This script# may be overwritten at next upgrade.## 这正是在初始化数据库时系统给出的快速启动MySQL方式$bindir/mysqld_safe --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null &wait_for_pid created "$!" "$mysqld_pid_file_path"; return_value=$?# Make lock for RedHat / SuSEif test -w "$lockdir"thentouch "$lock_file_path"fiexit $return_valueelselog_failure_msg "Couldn't find MySQL server ($bindir/mysqld_safe)"fi;;

生产说明:一定不要随意重启数据库,会影响业务访问。导致20秒业务不可用。 业务访问可能变慢(缓存失效)。

1.5 配置systemd方式启动

借用/etc/init.d/mysqld启动脚本配置真正的systemd方式启动

  • 方法1:单独写SYSTEMD的file文件,可以借用centos6启动脚本(建议)
[root@localhost ~]# vim /usr/lib/systemd/system/mysqld_1.service
[Unit]
Description=mysqld service
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecReload=/etc/init.d/mysqld restart
ExecStop=/etc/init.d/mysqld stop
[Install]
WantedBy=multi-user.target[root@localhost ~]# chmod +x /usr/lib/systemd/system/mysqld_1.service
[root@localhost ~]# systemctl enable mysqld_1.service
[root@localhost ~]# systemctl start mysqld_1
  • 方法2:单独写SYSTEMD的file文件,借用mysqld命令启动
[root@localhost ~]# vim /usr/lib/systemd/system/mysqld_2.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaultsfile=/etc/my.cnf
LimitNOFILE=5000[root@localhost ~]# ls -l /usr/lib/systemd/system/mysqld_2.service
-rwxr-xr-x 1 root root 322 1116 15:25 /usr/lib/systemd/system/mysqld_2.service
[root@localhost ~]# systemctl enable mysqld_2.service
[root@localhost ~]# systemctl start mysqld_2.service

2. MySQL命令行帮助

MySQL命令行帮助命令有?help,类似Linux下的man和help。其中,核心命令是: help contents

  • 帮助方法1:命令行查帮助(创建数据库示例)
# 步骤1.help contents
mysql> help contents
You asked for help about help category: "Contents"
For more information, type 'help <item>', where
<item> is one of the following
categories:
......
Data Definition(数据定义)
......# 步骤2.? Data Definition
mysql> ? Data Definition
You asked for help about help category: "Data Definition"
For more information, type 'help <item>', where <item> is one of the following
topics:......CREATE DATABASE #这里......# 步骤3.mysql> ? CREATE DATABASE
# 这样创建数据库的语法就看到了
mysql> ? CREATE DATABASE
Name: 'CREATE DATABASE'
Description:
Syntax:
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name    
#说明: {DATABASE | SCHEMA} 大括号里的必须2选1;[IF NOT EXISTS]中括号里的可选。[create_option] ...create_option: [DEFAULT] {CHARACTER SET [=] charset_name| COLLATE [=] collation_name| ENCRYPTION [=] {'Y' | 'N'}
}CREATE DATABASE creates a database with the given name. To use this
statement, you need the CREATE privilege for the database. CREATE
SCHEMA is a synonym for CREATE DATABASE.URL: https://dev.mysql.com/doc/refman/8.0/en/create-database.html# 步骤4:创建数据库名字为db_name
CREATE DATABASE db_name
  • 帮助方法2:查看官方文档

https://dev.mysql.com/doc/refman/8.0/en/create-database.html
https://dev.mysql.com/doc/refman/8.0/en/drop-table.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1489100.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

自定义prometheus监控获取nginx_upstream指标

1、前言 上篇文章介绍了nginx通过nginx_upstream_check_module模块实现后端健康检查&#xff0c;这篇介绍一下如何自定义prometheus监控获取nginx的upstream指标来实时监控nginx。 2、nginx_upstream_status状态 支持以下三种方式查看nginx_upstream的状态 /status?formatht…

day05 Router、vuex、axios

配置 router和vuex需要在创建vue项目的时候&#xff0c;开始的时候选择Manually select features&#xff0c;于是就可以在下一个创建配置讯问中选择router和vuex。 axios则需要执行命令行&#xff1a; npm install axios -S 之后再在需要发送请求的view导入即可。 router…

【H.264】H.264详解(二)—— H264视频码流解析示例源码

文章目录 一、前言二、示例源码【1】目录结构【2】Makefile源码【3】h264parser.c源码【4】编译运行【5】源码下载地址 声明&#xff1a;此篇示例源码非原创&#xff0c;原作者雷霄骅。雷霄骅&#xff0c;中国传媒大学通信与信息系统专业博士生&#xff0c;在此向雷霄骅雷神致敬…

放大电路总结

补充: 只有直流移动时才有Rbe动态等效电阻 从RsUs看进去,实际上不管接了什么东西都能够看成是一个Ri(输入电阻) Ri Ui/Ii Rb//Rbe Ui/Us Ri/(RiRs) Aus (Uo/Ui)*(Ui/Us) Au *Ri/(RiRs) 当前面是一个电压源的信号 我们就需要输入电阻更大 Ro--->输出电阻--->将…

RustDesk远程控屏软件使用教学

RustDesk自建服务器使用教学RustDesk远程控屏软件使用教学 下载软件后 右键管理员运行 点击右上角设置按钮 管理员运行 保证启动服务 点击左侧导航栏网络按钮 复制域名或者ip地址到 ID服务器 输入框 然后点击应用即可

C语言第三天笔记

变量 概念 表面&#xff1a;程序运行过程中取值可以改变的数据 实质&#xff1a;变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。 整个变量分为三部分&#xff1a; 变量名&#xff1a;这个只是变量的一个标识&#xff0c;我们借助变量名来存取数据。 变…

数据库实例迁移实践

背景 随着业务发展&#xff0c;数据库实例磁盘逐渐升高&#xff0c;告警频繁&#xff0c;且后续可能会对DDL产生影响&#xff08;尤其是借助ghost等工具执行的DDL&#xff09;。 该实例有多个库&#xff0c;则需要迁移其中的一个或几个单库到其他实例&#xff0c;为什么不做分…

第G4周:CGAN|生成手势图像 | 可控制生成

本文为&#x1f517;365天深度学习训练营 中的学习记录博客 原作者&#xff1a;K同学啊 理论知识&#xff1a; 条件生成对抗网络&#xff08;CGAN&#xff09;是在生成对抗网络&#xff08;GAN&#xff09;的基础上进行了一些改进。对于原始GAN的生成器而言&#xff0c;其生成的…

探索 SPL-404 协议标准:NFT 与 DeFi 的融合

在快速发展的数字资产领域中&#xff0c;NFT 协议标准持续演变&#xff0c;改变了我们对数字所有权和互动方式的理解。从 Art 到 Gamefi 等等&#xff0c;NFT 已经演变成数字经济的重要组成部分&#xff0c;吸引了广泛关注。遵循 ERC404 协议&#xff0c;SPL404 概念在 Solana …

昇思25天学习打卡营第22天|CV-Vision Transformer图像分类

打卡 目录 打卡 ViT简介 模型结构 基于ViT实现ImageNet分类任务 环境准备与数据读取 模型解析 Transformer基本原理 Self-Attention模块 代码实现 Transformer Encoder 代码实现 ViT模型的输入 Patch Embedding代码处理输入 整体构建ViT 模型训练与推理 模型训…

金字塔监督在人脸反欺骗中的应用

介绍 论文地址&#xff1a;https://arxiv.org/pdf/2011.12032.pdf 近年来&#xff0c;人脸识别技术越来越普及。在智能手机解锁和进出机场时&#xff0c;理所当然地会用到它。人脸识别也有望被用于管理今年奥运会的相关人员。但与此同时&#xff0c;人们对人脸欺骗的关注度也…

【无标题】Git(仓库,分支,分支冲突)

Git 一种分布式版本控制系统&#xff0c;用于跟踪和管理代码的变更 一&#xff0e;Git的主要功能&#xff1a; 二&#xff0e;准备git机器 修改静态ip&#xff0c;主机名 三&#xff0e;git仓库的建立&#xff1a; 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

【Linux】syscall sys_write流程摸索

这是通过tty进行摸索sys_write的流程。 在前面的博客里&#xff0c;我们可以看到基于内核C语言源代码日志打印&#xff0c;在打印的日志里边包含&#xff1a;日期&#xff0c;时间&#xff0c;当前文件所在代码目录&#xff0c;当前执行函数名&#xff0c;当前文件执行行号&am…

苦学Opencv的第十一天:图像的形态学操作

Python OpenCV从入门到精通学习日记&#xff1a;图像的形态学操作 前言 图像形态学是图像处理中的一个重要分支&#xff0c;主要关注图像中物体的形状和结构。通过形态学操作&#xff0c;我们可以对图像进行有效的分析和处理&#xff0c;例如图像的腐蚀与膨胀、开运算与闭运算…

nginx的学习(一):nginx的基本概念和反向代理

简介 nginx的基本概念&#xff0c;以及反向代理的配置 nginx 是一个高性能的http和反向代理web服务器及电子邮件&#xff08;IMAP/POP3/SMTP&#xff09;代理服务器。 相关的基本概念 正向代理 客户端配置代理服务器&#xff0c;通过代理服务器访问互联网。 反向代理 客…

【8月EI会议推荐】第四届区块链技术与信息安全国际会议

一、会议信息 大会官网&#xff1a;http://www.bctis.nhttp://www.icbdsme.org/ 官方邮箱&#xff1a;icbctis126.com 组委会联系人&#xff1a;杨老师 19911536763 支持单位&#xff1a;中原工学院、西安工程大学、齐鲁工业大学&#xff08;山东省科学院&#xff09;、澳门…

Xinstall揭秘:一键拉起服务如何助力App提升用户体验和下载转化率

在移动互联网时代&#xff0c;App的运营和推广显得尤为重要。而在这个过程中&#xff0c;如何提升用户体验和下载转化率成为了每个App运营者关注的焦点。今天&#xff0c;我们就来揭秘一下Xinstall的一键拉起服务&#xff0c;看看它是如何助力App提升用户体验和下载转化率的。 …

Java之多线程-同步代码块

线程同步 Java中提供了线程同步的机制&#xff0c;来解决上述的线程安全问题。 Java中实现线程同步&#xff0c;主要借助synchronized关键字实现。 线程同步方式&#xff1a; 同步代码块 同步方法 锁机制 1&#xff09;同步代码块 格式&#xff1a; //Object类及其子类…

Flink笔记整理(五)

Flink笔记整理&#xff08;五&#xff09; 文章目录 Flink笔记整理&#xff08;五&#xff09;七、处理函数&#xff08;最底层最常用最灵活&#xff09;7.1基本处理函数&#xff08;ProcessFunction&#xff09;处理函数的功能和使用ProcessFunction解析 7.2按键分区处理函数&…