熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> MySQL >> 正文

MySQL服務器的啟動與停止

2022-06-13   來源: MySQL 

  以非特權用戶運行MySQL服務器
  在討論如何啟動MySQL服務器之前讓我們考慮一下應該以什麼用戶身份運行MySQL服務器服務器可以手動或自動啟動如果你手動啟動它服務器以你登錄Unix(Linux)的用戶身份啟動即如果你用paul登錄Unix並啟動服務器它用paul運行如果你用su命令切換到root然後運啟動服務器則它以root運行然而大多數情況下你可能不想手動啟動服務器最有可能是你安排MySQL服務器在系統引導時自動啟動作為標准引導過程的一部分在Unix下該引導過程由系統的Unix用戶root執行並且任何在該過程中運行的進程均以root權限運行
  
  你應該牢記MySQL服務器啟動過程的兩個目標
  
  你想讓服務器以某個非root用戶運行一般地你想限制任何運行進程的能力除非確實需要root權限而MySQL不需要
  你想讓服務器始終以同一個用戶運行此時用一個用戶而其他時候以另一個不同的用戶運行服務器是很不方便的這造成了為文件和目錄以具有不同屬主的數據目錄下被創建並可能導致服務器不能訪問數據庫或表這看你以哪個用戶運行統一用同一個用戶運行服務器是你避免這個問題
  
  要一個普通的非特權用戶運行服務器按照下列步驟
  選擇一個用於運行服務器的用戶mysqld可以用任何用戶運行但在概念上較清晰的是為MySQL操作創建一個單獨的用戶你也可以特別為MySQL選擇一個用戶組本文使用mysqladm和mysqlgrp分別作為用戶名和用戶組名
  如果你已在自己的賬號下安裝好了MySQL且沒有系統上的特殊管理權限你將可能在你自己的用戶ID下運行服務器在這種情況下用你自己的登錄名和用戶組代替mysqladm和mysqlgrp
  如果你在RedHat Linux上用rpm文件安裝MySQL該安裝將自動創建一個名為mysql的賬號用該賬號代替mysqladm
  如果必要用系統通常的創建用戶的過程創建服務器賬號你需要用root做它
  如果服務器在運行停止它
  修改數據目錄和任何子目錄和文件的屬主這樣使得mysqladm用戶擁有它們例如如果數據目錄是/usr/local/var你可以如下設置mysqladm的屬主(你需要以root運行這些命令)
  
  #cd /usr/local/var
  #chown R mysqladmmysqlgrp
  
  修改數據目錄和任何子目錄和文件的權限使得它們只能由mysqladm用戶訪問如果數據目錄是/usr/local/var你可以設置由mysqladm擁有的任何東西
  
  # cd /usr/local/var
  # chmod R gorwx
  當你設置數據目錄及其內容的屬主和模式時注意符號連接你需要順著它們並改變它們指向的文件或目錄的屬主和模式如果連接文件的目錄位於不屬於你的地方會有些麻煩你可能需要root身份
  
  在你完成了上述過程後你應該確保總是在以mysqladm或root登錄時啟動服務器在後者確定指定user=mysqladm選項使服務器能將其用戶ID切換到mysqladm(同時也適用於系統啟動過程)
  
  user選項在MySQL 中引入如果你有老版本你可以使用su命令告訴系統在以root運行時在特定的用戶下運行服務器
  
  啟動服務器的方法
  在我們確定了用於運行服務器的賬號後你可以選擇如何安排啟動服務器你可以從命令行手動或在系統引導過程中自動地運行它對於啟動服務器由三種主要方法
  
  直接調用mysqld
  這可能是最不常用的方法建議不要多使用因此本文不詳細介紹
  調用safe_mysqld腳本
  safe_mysqld試圖確定服務器程序和數據目錄的位置然後用反映這些值的選項調用服務器safe_mysqld將標准出錯設備從服務器重定位到數據目錄下的一個出錯文件使得有它的一條記錄在啟動服務器後safe_mysqld也監視它並且如果它死掉則重啟它safe_mysqld常用於BSD風格的Unix系統
  如果你以root或在系統引導期間啟動sqfe_mysqld出錯日志由root擁有這可能在你以後試圖用一個非特權用戶調用safe_mysqld時將導致permission denied(權限拒絕)錯誤刪除出錯日志再試一下
  調用mysqlserver腳本
  這個腳本通過有意用於System V的啟動和停止系統上的safe_mysqldmysqlserver來啟動服務器該系統包含幾個包含在機器進入或退出一個給定運行級別時被點用的腳本目錄它可以用一個start或stop參數點用以表明你是想啟動還是想停止服務器
  safe_mysqld腳本安裝在MySQL安裝目錄的bin目錄下或可在MySQL源代碼分發的scripts目錄下找到mysqlserver腳本安裝在MySQL安裝目錄下的share/mysqld目錄下或可以在MySQL源代碼分發的support_files目錄下找到如果你想使用它們你需要將它們拷貝到適當的目錄下
  
  對BSD風格的系統(FreeBSDOpenBSD等)通常在/etc目錄下有幾個文件在引導時初始化服務這些文件通常有以rc開頭的名字且它有可能由一個名為rclocal的文件(或類似的東西)特意用於啟動本地安裝的服務在這樣的系統上你可能將類似於下列的行加入rclocal文件中以啟動服務器(如果safe_mysqld的目錄在你的系統上不同修改它即可)
  
  if [ x /usr/local/bin/safe_mysqld ]; then
  /usr/local/bin/safe_mysqld &
  fi
  對於對於System V風格的系統你可以通過將mysqlserver放在/etc下適當的啟動目錄下來安裝它如果你運行Linux並從一個RPM文件安裝MySQL這些已經為你做好了否則將腳本安裝在主啟動目錄下並將指向它的連接放在適當的運行級別目錄下你也可以使腳本只能由root啟動
  
  啟動文件的目錄布局各系統不同所以你需要檢查一下看看你的系統如何組織它們例如在Linux PPC上目錄是/etc/rcd和/etc/rcd/rcd這樣你可以這樣安裝腳本
  
  #cp mysqlserver /etc/rcd/initd
  #cd /etc/initd
  #chmod mysqlserver
  #cd /etc/rcd/rcd
  #ln s /initd/mysqlserver Smysql
  在solaris上主腳本目錄是/etc/initd並且運行級別目錄是/etc/rdd所以命令看上去像這樣
  
  #cp mysqlserver /etc/rcd/initd
  #cd /etc/initd
  #chmod mysqlserver
  #cd /etc/rcd
  #ln s /initd/mysqlserver Smysql
  在系統啟動時Smysql腳本將自動用一個start參數調用如果你有chkconfig命令(Linux上有)你可以由它幫助安裝mysqlserver腳本而不是象上面那樣手工運行上述命令
  
   指定啟動選項
  如果你想在服務器啟動時指定額外的啟動選項你可有兩種方法你可以修改你使用的啟動腳本(safe_mysqld或mysqlserver)並直接在調用服務器的行上指定選項或在一個選項文件中指定選項建議你如果可能在一個全局選項文件中指定選項它通常位於/etc/f(Unix)或c:\f(Windows)
  
  某些種類的信息無法以服務器選項指定對於這些你可能需要修改safe_mysqld例如如果你的服務器不能正確選擇本地時區而以GMT返回時間值你可以設置TZ環境變量給它一個指示如果你用safe_mysqld或mysqlserver啟動服務器你可以將一個時區設置加到safe_mysqld找到啟動服務器的行並在該行前加入下列命令
  
  TZ=US/Central
  export TZ
  上面命令的語法是Solaris的對於其他系統語法可能不同請查閱相關手冊如果你確實修改了你的啟動腳本要記住下次你安裝MySQL時(如升級到新版本)你的修改將失去除非你首先在別處復制了啟動腳本在安裝了新版本後比較新舊版本的腳本看看你需要重建什麼改變
  
   在啟動時檢查你的表
  除了安排你的服務器在系統引導時啟動你可能要安裝myisamchk和isamchk腳本以在服務器啟動前檢查你的表你可能在一個崩潰後重啟有可能表已經損害在啟動前檢查它是一個發現問題的好方法
  
  停止服務器
  要手工啟動服務器使用mysqladmin
  
  %mysqladmin shutdown
  
  要自動停止服務器你不需做特別的事情BSD系統一般通過向進程發一個TERM信號停止服務它們或者正確應答它或被粗魯地殺死mysqld在它收到這個信號時以終止作為應答對於用mysqlserver啟動服務器的System V風格的系統停止進程將用一個stop參數調用該腳本告訴服務器終止當然假定你已安裝了mysqlserver
  
  如果你不能連接服務器如何重新獲得對服務器的控制
  在某些情況下你可能由於不能連接它而手工重啟服務器當然這有點矛盾因為一般你通過連接服務器而手工關掉它那麼這種情況如何會出現
  
  首先MySQL root口令可以已經設置為你不知道的值這可能發生在你修改口令時例如如果你在輸入新口令時偶然鍵入一個不可見的控制字符你也可能忘記口令
  
  其次連接localhost通常通過一個Unix域套接字文件進行一般是/tmp/mysqlsock如果套接字文件被刪除了本地客戶就不能連接這可能發生在你的系統運行一個cron任務刪除了/tmp下的臨時文件
  
  如果你因為丟失套接字文件而不能連接你可以簡單地通過重啟服務器重新創建得到它因為服務器在啟動時重新創建它這裡的騙局是你不能用套接字建立連接因為它不見了你必須建立一個TCP/IP連接例如如果服務器主機是你可以這樣連接
  
  %mysqladmin p u root h shutdown
  
  如果套接字文件被一個cron任務刪除問題將重復出現除非你修改cron任務或使用一個或使用一個不同的套接字文件你可以使用全局選項文件
From:http://tw.wingwit.com/Article/program/MySQL/201311/29507.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.