mysql 5.7 啟動指令碼

來源:互聯網
上載者:User

標籤:pass   switch   my.cnf   自己   啟動   lease   warning   dir   har   

  最近這段時間,在看mysql,安裝了,也應用過,對於生產環境中,一般都選擇使用source code安裝,在安裝的時候可以自訂相關路徑和內容,對於生產環境來說更有效。相對於mysql 5.5的安裝,mysql 5.7的安裝大同小異,唯一的區別是5.7在安裝的時候,需要一個組件,boost,而且必須是1.59,版本高了也不行,所以下載的時候要注意。

  在mysql官網下載的時候,提供兩種source code,一種是帶boost的,直接編譯安裝即可,一種是不帶boost的,需要自己下載boost來安裝。我們選擇使用不帶boost的版本,下載boost之後,將boost拷貝到/usr/local/boost目錄下,然後對mysql源碼進行解壓編譯。編譯的代碼為:

cmake .. -DCMAKE_INSTALL_PREFIX=/app/mysql_5.7.22 -DMYSQL_DATADIR=/app/mysql_5.7.22/data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost

  整個編譯的過程是很長的,預設情況下,編譯的時候有指定basedir和datadir,這兩個路徑是預設的,在後續資料庫初始化的過程中,可以對不同的情況再定義。編譯完成後,就可以make && make install了。

  如果是帶boost的源碼,也要指定DWITH_BOOST=../boost,這個是相對路徑

  安裝完成後,需要對資料庫進行初始化,這個時候,可以設定初始化的datadir,後期的資料庫就應用在這個目錄中。在初始化過程中,相比於5.5有點區別,5.5初始化完成後,預設登入資料庫是不要求輸入密碼的。而在5.7,--initialize-insecure 和--initialize有兩個option,這兩個屬性有一個區別,就是在initialize時候,會為[email protected]產生一個隨機密碼,該密碼會寫到資料庫日誌中,通過grep log就可以得到該密碼,然後在登入的時候使用該密碼,登入進去之後,通過update進行修改,而--initialize-insecure在初始化的時候,跟5.5一樣,不會用root使用者產生密碼,直接空密碼就可以登入。

./mysqld --initialize-insecure --user=mysql --basedir=/app/mysql --datadir=/data/mysql57/3307/data/ --pid-file=/data/mysql57/3307/tmp/3307_pid --socket=/data/mysql57/3307/tmp/3307_socket

  初始化的時候,指定了pid、socket等檔案位置,預設直接會在data目錄下,產生一個以主機名稱命名的log檔案,在初始化的時候,直接在螢幕上輸出了一段話,表示沒有密碼。

2018-07-05T00:14:59.891294Z 1 [Warning] [email protected] is created with an empty password ! Please consider switching off the --initialize-insecure option.

  還是要注意,在整個mysql的basedir和datadir下,檔案的屬主和數組都要是mysql啟動使用者,也就是mysql.mysql。

  由於是自訂來源碼安裝,mysql的啟動指令碼就沒法直接用了,想著自己寫一個指令碼,來控制這個mysql5.7的啟動和停止。下面是代碼內容。

BASEDIR=/app/mysqlBINDIR=$BASEDIR/binMYSQL_BIN=$BINDIR/mysqld_safeMYSQLADMIN=/usr/local/mysql/bin/mysqladminDATADIR=/data/mysql57/3307/dataMYCNF=/data/mysql57/3307/my.cnfPORT=3307SOCKET=`grep socket $MYCNF|grep $PORT|awk ‘{print $3}‘`usage(){        echo "$0 usage: {start|stop|reload}"}mysqld_start(){        if [ `ps -ef|grep "port=$PORT"|grep -v grep|wc -l` -ge 1 ]                then                        echo "The MYSQL SERVER is running"        else                if [ -x $MYSQL_BIN ] && [ -f $MYCNF ]                        then                        $MYSQL_BIN --defaults-file=$MYCNF & 1>>/tmp/mysql.log 2>&1                        echo $? >> /tmp/mysql.log                        sleep 2                [ `ps -ef|grep "port=$PORT"|grep -v grep|wc -l` -ge 1 ] && action  "THE MYSQL SERVER STARTING" /bin/true || action  "THE MYSQL SERVER STARTING" /bin/false                else                        echo " MISSING STARTUP_CONFIG,PLEASE CHECK THE CONFIG IN $MYCNF"                fi        fi}mysqld_stop(){        if [ `ps -ef|grep "port=$PORT"|grep -v grep|wc -l` -lt 1 ]                then                        echo "The MYSQL SERVER is not running"        else        $MYSQLADMIN -S $SOCKET shutdown        ps -ef|grep "port=$PORT"|grep -v grep|wc -l        [ $? -eq 0 ] && action "THE MYSQL SERVER STOPPING" /bin/true || action  "THE MYSQL SERVER STOPPING" /bin/false        fi}main(){        if [ $# -ne 1 ]                then                        usage        else                case "$1" in                        ‘start‘)                                mysqld_start                                ;;                        ‘stop‘)                                mysqld_stop                                ;;                        ‘reload‘)                                mysqld_stop                                mysqld_start                                ;;                        *)                                usage                        esac                fi}main $*

  在這段代碼中,基本上都是很普通的啟動和停止功能,判斷是否啟動,是根據進程來區分的,基於設定檔中的內容進行判斷,另外,由於mysql在啟動的時候有延時,不能啟動了立即判斷是否有進程,所以需要在啟動指令碼的時候進行sleep,一般2秒就足夠。下面測試一下指令碼的可用性。

[[email protected] bin]# sh mysql_server.sh stop2018-07-09T01:33:11.096443Z mysqld_safe mysqld from pid file /data/mysql57/3307/tmp/3307_pid ended0THE MYSQL SERVER STOPPING                                  [  OK  ][[email protected] bin]# sh mysql_server.sh stopThe MYSQL SERVER is not running[[email protected] bin]# sh mysql_server.sh reloadThe MYSQL SERVER is not running2018-07-09T01:33:22.379632Z mysqld_safe Logging to ‘/data/mysql57/3307/data/Server129.err‘.2018-07-09T01:33:22.411184Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57/3307/dataTHE MYSQL SERVER STARTING                                  [  OK  ][[email protected] bin]# sh mysql_server.sh stop2018-07-09T01:33:30.241711Z mysqld_safe mysqld from pid file /data/mysql57/3307/tmp/3307_pid ended0THE MYSQL SERVER STOPPING                                  [  OK  ][[email protected] bin]# sh mysql_server.sh start2018-07-09T01:33:33.846842Z mysqld_safe Logging to ‘/data/mysql57/3307/data/Server129.err‘.2018-07-09T01:33:33.878461Z mysqld_safe Starting mysqld daemon with databases from /data/mysql57/3307/dataTHE MYSQL SERVER STARTING                                  [  OK  ][[email protected] bin]# 

  準系統貌似都很合理,但是有一些確定,比如在啟動的時候,這些指令碼輸出,如何不讓顯示。

 

mysql 5.7 啟動指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.