mysql 5.7 启动脚本_MySQL数据库 5.7 启动脚本
本文主要向大家介紹了MySQL數(shù)據(jù)庫 5.7 啟動腳本,通過具體的內(nèi)容向大家展現(xiàn),希望對大家學(xué)習(xí)MySQL數(shù)據(jù)庫有所幫助。
最近這段時間,在看mysql,安裝了,也應(yīng)用過,對于生產(chǎn)環(huán)境中,一般都選擇使用source?code安裝,在安裝的時候可以自定義相關(guān)路徑和內(nèi)容,對于生產(chǎn)環(huán)境來說更有效。相對于mysql?5.5的安裝,mysql?5.7的安裝大同小異,唯一的區(qū)別是5.7在安裝的時候,需要一個組件,boost,而且必須是1.59,版本高了也不行,所以下載的時候要注意。
在mysql官網(wǎng)下載的時候,提供兩種source?code,一種是帶boost的,直接編譯安裝即可,一種是不帶boost的,需要自己下載boost來安裝。我們選擇使用不帶boost的版本,下載boost之后,將boost拷貝到/usr/local/boost目錄下,然后對mysql源碼進(jìn)行解壓編譯。編譯的代碼為:
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
整個編譯的過程是很長的,默認(rèn)情況下,編譯的時候有指定basedir和datadir,這兩個路徑是默認(rèn)的,在后續(xù)數(shù)據(jù)庫初始化的過程中,可以對不同的情況再定義。編譯完成后,就可以make?&&?make?install了。
如果是帶boost的源碼,也要指定DWITH_BOOST=../boost,這個是相對路徑
安裝完成后,需要對數(shù)據(jù)庫進(jìn)行初始化,這個時候,可以設(shè)定初始化的datadir,后期的數(shù)據(jù)庫就應(yīng)用在這個目錄中。在初始化過程中,相比于5.5有點(diǎn)區(qū)別,5.5初始化完成后,默認(rèn)登錄數(shù)據(jù)庫是不需要密碼的。而在5.7,--initialize-insecure?和--initialize有兩個option,這兩個屬性有一個區(qū)別,就是在initialize時候,會為root@localhost生成一個隨機(jī)密碼,該密碼會寫到數(shù)據(jù)庫日志中,通過grep?log就可以得到該密碼,然后在登錄的時候使用該密碼,登錄進(jìn)去之后,通過update進(jìn)行修改,而--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等文件位置,默認(rèn)直接會在data目錄下,生成一個以主機(jī)名命名的log文件,在初始化的時候,直接在屏幕上輸出了一段話,表示沒有密碼。
2018-07-05T00:14:59.891294Z?1?[Warning]?root@localhost?is?created?with?an?empty?password?!?Please?consider?switching?off?the?--initialize-insecure?option.
還是要注意,在整個mysql的basedir和datadir下,文件的屬主和數(shù)組都要是mysql啟動用戶,也就是mysql.mysql。
由于是自定義源碼安裝,mysql的啟動腳本就沒法直接用了,想著自己寫一個腳本,來控制這個mysql5.7的啟動和停止。下面是代碼內(nèi)容。
BASEDIR=/app/mysql
BINDIR=$BASEDIR/bin
MYSQL_BIN=$BINDIR/mysqld_safe
MYSQLADMIN=/usr/local/mysql/bin/mysqladmin
DATADIR=/data/mysql57/3307/data
MYCNF=/data/mysql57/3307/my.cnf
PORT=3307
SOCKET=`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?$*
在這段代碼中,基本上都是很普通的啟動和停止功能,判斷是否啟動,是根據(jù)進(jìn)程來區(qū)分的,基于配置文件中的內(nèi)容進(jìn)行判斷,另外,由于mysql在啟動的時候有延時,不能啟動了立即判斷是否有進(jìn)程,所以需要在啟動腳本的時候進(jìn)行sleep,一般2秒就足夠。下面測試一下腳本的可用性。
[root@Server129?bin]#?sh?mysql_server.sh?stop
2018-07-09T01:33:11.096443Z?mysqld_safe?mysqld?from?pid?file?/data/mysql57/3307/tmp/3307_pid?ended
0
THE?MYSQL?SERVER?STOPPING??????????????????????????????????[??OK??]
[root@Server129?bin]#?sh?mysql_server.sh?stop
The?MYSQL?SERVER?is?not?running
[root@Server129?bin]#?sh?mysql_server.sh?reload
The?MYSQL?SERVER?is?not?running
2018-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/data
THE?MYSQL?SERVER?STARTING??????????????????????????????????[??OK??]
[root@Server129?bin]#?sh?mysql_server.sh?stop
2018-07-09T01:33:30.241711Z?mysqld_safe?mysqld?from?pid?file?/data/mysql57/3307/tmp/3307_pid?ended
0
THE?MYSQL?SERVER?STOPPING??????????????????????????????????[??OK??]
[root@Server129?bin]#?sh?mysql_server.sh?start
2018-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/data
THE?MYSQL?SERVER?STARTING??????????????????????????????????[??OK??]
[root@Server129?bin]#
基本功能貌似都很合理,但是有一些確定,比如在啟動的時候,這些腳本輸出,如何不讓顯示。
本文由職坐標(biāo)整理并發(fā)布,希望對同學(xué)們學(xué)習(xí)MySQL有所幫助,更多內(nèi)容請關(guān)注職坐標(biāo)數(shù)據(jù)庫MySQL數(shù)據(jù)庫頻道!
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的mysql 5.7 启动脚本_MySQL数据库 5.7 启动脚本的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gateway中的局部过滤器_Sprin
- 下一篇: mysql 保证事物完整性_数据库高并发