MySQL啟動和關閉命令總結

lhrbest發表於2019-08-28

MySQL啟動和關閉命令總結

----啟動MySQL
mysqld --defaults-file=/etc/my.cnf --user=mysql &
mysqld_safe --defaults-file=/etc/my.cnf --user=mysql &
service mysql start # systemctl start mysqld
/etc/init.d/mysql start
mysqld_multi start #多例項
net start mysql #Windows
----關閉MySQL
mysqladmin -uroot -plhr -S/tmp/mysql3306.sock shutdown #版本對應
service mysql stop # systemctl stop mysqld
/etc/init.d/mysql stop
mysqld_multi stop #多例項
net stop mysql #Windows
mysql> shutdown; # above MySQL 5.7.9
--殺死MySQL
killall mysqld
killall -9 mysqld
pkill -9 mysqld


    MySQL多例項管理(mysqld_multi): http://blog.itpub.net/26736162/viewspace-2144199/


 MySQL資料庫伺服器通常指的的是mysqld,而命令列mysql則是mysql客戶端程式,這兩個概念通常容易混淆。通常啟動mysql伺服器即是啟動mysqld程式,mysqld啟動後,可以透過mysql連線到mysql伺服器。本文主要描述了mysql伺服器的幾種啟動方式以及如何關閉mysql伺服器。


1、直接使用mysqld啟動 

  mysqld 即是mysql伺服器,可以呼叫該命令直接啟動mysql伺服器

  mysqld 從配置檔案中讀取[mysqld]以及[server]選項組的內容,也可以透過直接在命令列跟隨引數。

  mysqld伺服器讀取配置檔案的順序,對於有多個配置檔案存在,且同一引數有多個值的情形,以最後一次讀取為準。

  命令列跟隨引數具有最高優先順序


  #當前mysql伺服器執行環境

  [root@rhel64a ~]# cat /etc/issue

  Red Hat Enterprise Linux Server release 6.4 (Santiago)

  

  #檢視mysqld啟動時的預設選項

  [root@rhel64a ~]# mysqld --print-defaults

  mysqld would have been started with the following arguments:

  --socket=/tmp/mysql3306.sock --port=3306 --pid-file=/var/lib/mysql/my3306.pid --user=mysql --server-id=3306 --federated 

  [root@rhel64a ~]# ps -ef|grep mysql

  root      2963  2840  0 14:10 pts/0    00:00:00 grep mysql

  

  # Author : Leshami

  # Blog   : http://blog.csdn.net/leshami

  

  #檢視mysqld啟動配置檔案的優先順序

  [root@rhel64a ~]# mysqld --verbose --help |grep -A 1 "Default options"

  Default options are read from the following files in the given order:

  /etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf 

  

  #檢視當前的my.cnf配置檔案

  [root@rhel64a ~]# grep -v ^# /etc/my.cnf|head -n 7

  [mysqld]

  socket = /tmp/mysql3306.sock

  port = 3306

  pid-file = /var/lib/mysql/my3306.pid

  user = mysql

  server-id=3306

  federated

  

  #清空當前mysql伺服器的錯誤日誌檔案

  [root@rhel64a ~]# cat /dev/null>/var/lib/mysql/rhel64a.ycdata.net.err 

  [root@rhel64a ~]# mysqld &           #啟動mysqld伺服器

  [1] 3480

  [root@rhel64a ~]# 2014-10-25 14:20:42 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. 

  Please use --explicit_defaults_for_timestamp server option (see documentation for more details).

  2014-10-25 14:20:42 3480 [Note] InnoDB: Using atomics to ref count buffer pool pages

  2014-10-25 14:20:42 3480 [Note] InnoDB: The InnoDB memory heap is disabled

  2014-10-25 14:20:42 3480 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins

  2014-10-25 14:20:42 3480 [Note] InnoDB: Memory barrier is not used

  2014-10-25 14:20:42 3480 [Note] InnoDB: Compressed tables use zlib 1.2.3

  2014-10-25 14:20:42 3480 [Note] InnoDB: Using Linux native AIO

  2014-10-25 14:20:42 3480 [Note] InnoDB: Using CPU crc32 instructions

  2014-10-25 14:20:42 3480 [Note] InnoDB: Initializing buffer pool, size = 128.0M

  2014-10-25 14:20:42 3480 [Note] InnoDB: Completed initialization of buffer pool

  2014-10-25 14:20:42 3480 [Note] InnoDB: Highest supported file format is Barracuda.

  2014-10-25 14:20:42 3480 [Note] InnoDB: 128 rollback segment(s) are active.

  2014-10-25 14:20:42 3480 [Note] InnoDB: Waiting for purge to start

  2014-10-25 14:20:42 3480 [Note] InnoDB: 5.6.21 started; log sequence number 1626087

  2014-10-25 14:20:42 3480 [Note] Server hostname (bind-address): '*'; port: 3306

  2014-10-25 14:20:42 3480 [Note] IPv6 is available.

  2014-10-25 14:20:42 3480 [Note]   - '::' resolves to '::';

  2014-10-25 14:20:42 3480 [Note] Server socket created on IP: '::'.

  2014-10-25 14:20:42 3480 [Note] Event Scheduler: Loaded 0 events

  2014-10-25 14:20:42 3480 [Note] mysqld: ready for connections.

  Version: '5.6.21'  socket: '/tmp/mysql3306.sock'  port: 3306  MySQL Community Server (GPL)l

  

  #下面可以查詢到mysqld程式

  [root@rhel64a ~]# ps -ef|grep mysql|grep -v grep

  mysql    18240  2641  1 20:25 pts/2    00:00:00 mysqld

  [root@rhel64a ~]# mysql -uroot -pxxx -P3306 --protocol=tcp

  root@localhost[(none)]> show variables like 'version';

  +---------------+--------+

  | Variable_name | Value  |

  +---------------+--------+

  | version       | 5.6.21 |

  +---------------+--------+


 


2、mysql安全啟動(mysqld_safe) 

  mysqld_safe是一個shell 指令碼,會呼叫mysqld啟動mysql伺服器,並監聽伺服器。

  如果mysqld程式異常終止,mysqld_safe將自動重啟mysqld

  mysql_safe 從配置檔案中讀取[mysqld],[server],[mysqld_safe]等選項,為保證向後相容,mysql_safe還讀取[safe_mysql]選項。


  #下面使用mysqladmin來關閉之前啟動的mysql伺服器

  [root@rhel64a ~]# mysqladmin -uroot -pxxx shutdown -S /tmp/mysql3306.sock 

  [root@rhel64a ~]# ps -ef|grep mysql

  root      4262  3418  0 14:40 pts/4    00:00:00 grep mysql


  #下面使用mysqld_safe來啟動例項

  [root@rhel64a ~]# mysqld_safe --user=mysql &

  [1] 4273

  [root@rhel64a ~]# 141025 14:40:34 mysqld_safe Logging to '/var/lib/mysql/rhel64a.ycdata.net.err'.

  141025 14:40:34 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql


  #檢視啟動後的後臺程式

  [root@rhel64a ~]# ps -ef|grep mysql|grep -v grep #mysqld的程式為4438,其父程式為4273,即mysqld_safe

  root      4273  3418  0 14:40 pts/4    00:00:00 /bin/sh /usr/bin/mysqld_safe --user=mysql

  mysql     4438  4273  0 14:40 pts/4    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql 

    --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/rhel64a.ycdata.net.err

    --pid-file=/var/lib/mysql/my3306.pid --socket=/tmp/mysql3306.sock --port=3306


  [root@rhel64a ~]# mysql -uroot -pxxx -P3306 --protocol=tcp

  root@localhost[(none)]> system kill -9 4438  #強制kill mysqld程式

  root@localhost[(none)]> /usr/bin/mysqld_safe: line 166:  4438 Killed    #下面的nohup為mysql啟動程式   

    nohup /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin 

    --user=mysql --log-error=/var/lib/mysql/rhel64a.ycdata.net.err --pid-file=/var/lib/mysql/my3306.pid 

    --socket=/tmp/mysql3306.sock --port=3306 < /dev/null >> /var/lib/mysql/rhel64a.ycdata.net.err 2>&1

  141025 14:42:29 mysqld_safe Number of processes running now: 0

  141025 14:42:29 mysqld_safe mysqld restarted  #提示該程式已經自動重新啟動

  

  #校驗mysqld是否已經成功重啟

  root@localhost[(none)]> system ps -ef|grep mysql|grep -v grep

  root      4273  3418  0 14:40 pts/4    00:00:00 /bin/sh /usr/bin/mysqld_safe --user=mysql

  root      4517  3418  0 14:41 pts/4    00:00:00 mysql -uroot -px x -P3306 --protocol=tcp

  mysql     4553  4273  0 14:42 pts/4    00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql 

  --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/rhel64a.ycdata.net.err

   --pid-file=/var/lib/mysql/my3306.pid --socket=/tmp/mysql3306.sock --port=3306


  root@localhost[(none)]> select databases();

  ERROR 2013 (HY000): Lost connection to MySQL server during query #由於mysqld程式被殺掉,所以連線已經被斷開

  root@localhost[(none)]> connect  #重新連線

  Connection id:    1

  Current database: *** NONE ***

  

  root@localhost[(none)]> select database();

  +------------+

  | database() |

  +------------+

  | NULL       |

  +------------+


 


3、mysql(mysql.server)服務方式啟動

  mysql.server為一個shell指令碼,他會呼叫mysqld_safe,該指令碼會讀取配置檔案的[mysql.server]以及[mysqld]選項。

  為向後相容,也會讀取[mysql_server]選項


  #首先使用mysqladmin關閉已存在的mysqld

  root@localhost[(none)]> system mysqladmin -uroot -pxxx shutdown -S /tmp/mysql3306.sock 

  Warning: Using a password on the command line interface can be insecure.

  141025 14:47:18 mysqld_safe mysqld from pid file /var/lib/mysql/my3306.pid ended

  root@localhost[(none)]> exit

  Bye

  [1]+  Done                    mysqld_safe --user=mysql


  [root@rhel64a ~]# ls -hltr /etc/init.d/mysql             #/etc/init.d目錄下已經配置了mysql啟動指令碼,在安裝時新增

  -rwxr-xr-x 1 root root 11K Sep 11 22:18 /etc/init.d/mysql       #如果為rpm方式安裝會自動新增該啟動指令碼


  [root@rhel64a ~]# /etc/init.d/mysql --help               #獲取mysql啟動指令碼的使用幫助

  Usage: mysql  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]

  [root@rhel64a ~]# /etc/init.d/mysql start                #啟動mysqld

  Starting MySQL.[  OK  ]

  [root@rhel64a ~]# /etc/init.d/mysql stop                 #停止mysqld 

  Shutting down MySQL..[  OK  ]


  #預設情況下mysql已經作為一個服務新增到系統目錄已經配置了自啟動,如下

  [root@rhel64a ~]# chkconfig --list |grep mysql

  mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off

  

  root@localhost[(none)]> system ps -ef|grep mysql |grep -v grep

  root      5127     1  0 14:49 pts/4    00:00:00 /bin/sh /usr/bin/mysqld_safe 

    --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/my3306.pid

  mysql     5306  5127  0 14:49 pts/4    00:00:07 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql

   --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/rhel64a.ycdata.net.err

   --pid-file=/var/lib/mysql/my3306.pid --socket=/tmp/mysql3306.sock --port=3306

  root      5340  3418  0 14:49 pts/4    00:00:00 mysql -uroot -px x -P3306 --protocol=tcp

  

  #透過服務的方式啟動mysql伺服器,mysql.server呼叫mysqld_safe,然後mysql_safe呼叫了mysqld

  #從上面的方式可知,無論何種啟動方式,mysqld最終都會被呼叫。因為mysqld就是mysql伺服器。


 


4、關閉mysql伺服器

  在前面的演示中,我們已經使用了mysqladmin以及service方式來關閉例項。即可以透過這2種方式來關閉資料庫。不再演示。

  #獲取mysqladmin命令列的幫助資訊,如下包含shutdown

  [root@rhel64a ~]# mysqladmin --help|grep shutdown |grep server

   shutdown              Take server down


 


5、 小結

  a、注意理解mysqld與mysql。mysqld為mysql伺服器或者稱之為伺服器上的例項,用於提供客戶端訪問。mysql為客戶端訪問管理工具。

  b、可以透過三種方式啟動mysql伺服器(mysqld,mysqld_safe,service mysql start)

  c、對於mysqld_safe,service mysql start方式,總是透過呼叫mysqld_safe來啟動mysqld程式,以防止mysqld意外宕掉而提供重啟服務。

  d、可以透過mysqladmin shutdown以及service mysql stop來終止mysql伺服器





About Me

........................................................................................................................

● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除

● 本文在itpub、部落格園、CSDN和個人微 信公眾號( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文部落格園地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、個人簡介及小麥苗雲盤地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 資料庫筆試面試題庫及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA寶典今日頭條號地址:

........................................................................................................................

● QQ群號: 230161599 、618766405

● 微 信群:可加我微 信,我拉大家進群,非誠勿擾

● 聯絡我請加QQ好友 646634621 ,註明新增緣由

● 於 2019-08-01 06:00 ~ 2019-08-31 24:00 在西安完成

● 最新修改時間:2019-08-01 06:00 ~ 2019-08-31 24:00

● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解

● 版權所有,歡迎分享本文,轉載請保留出處

........................................................................................................................

小麥苗的微店

小麥苗出版的資料庫類叢書http://blog.itpub.net/26736162/viewspace-2142121/

小麥苗OCP、OCM、高可用網路班http://blog.itpub.net/26736162/viewspace-2148098/

小麥苗騰訊課堂主頁https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客戶端掃描下面的二維碼來關注小麥苗的微 信公眾號( xiaomaimiaolhr)及QQ群(DBA寶典)、新增小麥苗微 信, 學習最實用的資料庫技術。

........................................................................................................................

歡迎與我聯絡

 

 



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2655265/,如需轉載,請註明出處,否則將追究法律責任。

相關文章