MySQL 資料庫的啟動與關閉

來源:互聯網
上載者:User

標籤:database   dba   sql   mysql   資料庫   

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

 

1、直接使用mysqld啟動
  mysqld 即是mysql伺服器,可以調用該命令直接啟動mysql伺服器
  mysqld 從設定檔中讀取[mysqld]以及[server]選項組的內容,也可以通過直接在命令列跟隨參數。
  mysqld伺服器讀取設定檔的順序,對於有多個設定檔存在,且同一參數有多個值的情形,以最後一次讀取為準。
  命令列跟隨參數具有最高優先順序

  #當前mysql伺服器運行環境
  [[email protected] ~]# cat /etc/issue
  Red Hat Enterprise Linux Server release 6.4 (Santiago)
  
  #查看mysqld啟動時的預設選項
  [[email protected] ~]# 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
  [[email protected] ~]# 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啟動設定檔的優先順序
  [[email protected] ~]# 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設定檔
  [[email protected] ~]# 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伺服器的錯誤記錄檔檔案
  [[email protected] ~]# cat /dev/null>/var/lib/mysql/rhel64a.ycdata.net.err
  [[email protected] ~]# mysqld &           #啟動mysqld伺服器
  [1] 3480
  [[email protected] ~]# 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進程
  [[email protected] ~]# ps -ef|grep mysql|grep -v grep
  mysql    18240  2641  1 20:25 pts/2    00:00:00 mysqld
  [[email protected] ~]# mysql -uroot -pxxx -P3306 --protocol=tcp
  [email protected][(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伺服器
  [[email protected] ~]# mysqladmin -uroot -pxxx shutdown -S /tmp/mysql3306.sock
  [[email protected] ~]# ps -ef|grep mysql
  root      4262  3418  0 14:40 pts/4    00:00:00 grep mysql

  #下面使用mysqld_safe來啟動執行個體
  [[email protected] ~]# mysqld_safe --user=mysql &
  [1] 4273
  [[email protected] ~]# 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

  #查看啟動後的後台進程
  [[email protected] ~]# 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

  [[email protected] ~]# mysql -uroot -pxxx -P3306 --protocol=tcp
  [email protected][(none)]> system kill -9 4438  #強制kill mysqld進程
  [email protected][(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是否已經成功重啟
  [email protected][(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

  [email protected][(none)]> select databases();
  ERROR 2013 (HY000): Lost connection to MySQL server during query #由於mysqld進程被殺掉,所以串連已經被斷開
  [email protected][(none)]> connect  #重新串連
  Connection id:    1
  Current database: *** NONE ***
  
  [email protected][(none)]> select database();
  +------------+
  | database() |
  +------------+
  | NULL       |
  +------------+

 

3、mysql(mysql.server)服務方式啟動
  mysql.server為一個shell指令碼,他會調用mysqld_safe,該指令碼會讀取設定檔的[mysql.server]以及[mysqld]選項。
  為向後相容,也會讀取[mysql_server]選項

  #首先使用mysqladmin關閉已存在的mysqld
  [email protected][(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
  [email protected][(none)]> exit
  Bye
  [1]+  Done                    mysqld_safe --user=mysql

  [[email protected] ~]# 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方式安裝會自動添加該啟動指令碼

  [[email protected] ~]# /etc/init.d/mysql --help               #擷取mysql啟動指令碼的使用協助
  Usage: mysql  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]
  [[email protected] ~]# /etc/init.d/mysql start                #啟動mysqld
  Starting MySQL.[  OK  ]
  [[email protected] ~]# /etc/init.d/mysql stop                 #停止mysqld
  Shutting down MySQL..[  OK  ]

  #預設情況下mysql已經作為一個服務添加到系統目錄已經配置了自啟動,如下
  [[email protected] ~]# chkconfig --list |grep mysql
  mysql           0:off   1:off   2:on    3:on    4:on    5:on    6:off
  
  [email protected][(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
  [[email protected] ~]# 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伺服器
  e、對於多執行個體的啟動與關閉請參考:Linux 下MySQL源碼安裝完整版 Linux 5 下安裝MySQL 5.6(RPM方式)
  f、對於mysql的安裝請參考:MySQL多執行個體配置(一)  MySQL多執行個體配置(二)

MySQL 資料庫的啟動與關閉

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.