首页 > 数据库 >MySQL服务启动与关闭

MySQL服务启动与关闭

时间:2024-07-23 14:29:47浏览次数:16  
标签:启动 -- MySQL pid mysqld 关闭 mysql root localhost

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 stop
      touch "$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)
      then
        echo $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=$?
      else
        log_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 $basedir

    echo $echo_n "Starting MySQL"
    if test -x $bindir/mysqld_safe
    then
      # 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 / SuSE
      if test -w "$lockdir"
      then
        touch "$lock_file_path"
      fi

      exit $return_value
    else
      log_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 11月 16 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

标签:启动,--,MySQL,pid,mysqld,关闭,mysql,root,localhost
From: https://blog.csdn.net/weixin_44415987/article/details/140619852

相关文章

  • 简单讲解一下STM32的启动过程
    启动模式首先我们先看一下启动模式第一个为内部FLASH启动方式   当芯片上电后采样到BOOT0引脚为低电平时,0x00000000和0x00000004地址被映射到内部FLASH的首地址0x08000000和0x08000004。因此,内核离开复位状态后,读取内部FLASH117的......
  • VS2022无法启动程序
    win11专业版23h2在安装VS2022时会遇到以下问题以下就是正确的操作方法1.首先打开VS022的install 2.点击修改 3.选择单个组件 4.找到Windows11SDK(10.0.26100.0)安装好之后就可以正常的编写c/c++代码了 ......
  • 智能停车场系统--前后端分离(可直接落地)使用数据:vue,springBoot,redis,mybatis,mysql等
    系统首页-统计停车车收费收费数据展示实现代码:对菜单控制代码@AutowiredprivateMenuServicemenuService;@AutowiredprivateRoleMenuServiceroleMenuService;@GetMapping("/list")publicResultlist(){List<MenuRoleVO>menuRoleList=this.menuServi......
  • MySQL server has gone away
    环境:Os:Centos7DB:mysql5.7.39 导入大量数据的时候报错误:[root@localhost~]#mysql-hlocalhost-uroot-pmysql--default-character-set=utf8-Ddev_test</tmp/db_test_20240723mysql:[Warning]Usingapasswordonthecommandlineinterfacecanbeinsecure.......
  • 在MySQL中 Truncate Delect Drop 的区别
    在MySQL中TruncateDelectDrop的区别 面试问题:----请详细描述MySQL中TRUNCATETABLE、DELETEFROM和DROPTABLE三个命令的区别,包括它们的作用、性能影响、事务日志的生成以及对表结构和触发器的影响。----回答:----在MySQL中,TRUNCATETABLE、DELETEFROM和DRO......
  • Java 支持的数据类型与 MySQL 支持的数据类型对比
    Java支持的数据类型与MySQL支持的数据类型对比整数类型:Java:byte,short,int,longMySQL:TINYINT,SMALLINT,INT,BIGINT对应关系:byte对应MySQL的TINYINTshort对应MySQL的SMALLINTint对应MySQL的INTlong对应MySQL的BIGINT浮点数类型:Java......
  • 源神,启动!马斯克开源史上最大模型Grok,参数高达3140亿,可商用!
    马斯克真不愧是源神,自开源X的推荐算法以及特斯拉智能驾驶算法后,又说到做到,开源旗下大模型Grok!代码和模型权重已上线GitHub。官方信息显示,此次开源的Grok-1是一个3140亿参数的混合专家模型,远超OpenAIGPT-3.5的1750亿。,就是说,这是当前开源模型中参数量最大的一个,遵照Apache......
  • spring使用mysql数据库实现关键字别字、拼音、拼音首字母、拼音所有首字母组合搜索
    1、实现思路前端传入的文字、拼音、别字、拼音首字母、拼音所有首字母组合传入到后台,通过后台接口转成拼音,然后通过转换后的拼音结合sql语句查询匹配。2、后台实现pom配置:<!--中文转拼音--><dependency><groupId>com.belerweb</groupId><artifactId>pinyin4......
  • 如何在启动时设置 Raspberry Pi 上的显示环境变量?
    我有一个RaspberryPi4,显示屏为1280x800,没有键盘或鼠标。我通过WiFi远程ssh进入它,并对它进行编码以显示图像,最终无需我ssh进入它。我安装了feh并在python脚本中使用它来显示图像:importsubprocessimage=subprocess.Popen(["feh","--hide-pointer","-x","-q"......
  • MySQL 索引的存储结构
    Author:ACatSmilingSince:2024-07-22索引的存储结构为什么使用索引索引是存储引擎用于快速找到数据记录的一种数据结构。常将索引比作教科书的目录部分(实际上不是完全一样),通过目录找到对应文章的页码,便可快速定位到需要的文章。MySQL中也是一样的道理,进行数据查找时,首先查......