一、背景介紹
10年積累的成都網(wǎng)站制作、成都做網(wǎng)站經(jīng)驗,可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計后付款的網(wǎng)站建設(shè)流程,更有白朗免費網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
MariaDB多實例就是在一臺機(jī)器上開啟多個不同的服務(wù)端口,運行多個MySQL服務(wù)進(jìn)程,通過不同的socket監(jiān)聽不同的服務(wù)端口來提供各自的、互不干涉的服務(wù),各個實例可以根據(jù)不同的配置文件設(shè)置相互隔離
二、操作步驟
1.安裝MariaDB(略)
2.初始化數(shù)據(jù)庫(以3306為例)
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/multidata/3306 --user=mysql
3.修改配置文件(以3306為例)
當(dāng)有多臺MariaDB服務(wù)器時server-id不能一樣
4.啟動服務(wù)(以3306為例)
/usr/local/mysql/bin/mysqld_safe --defaults-file=/multidata/3306/my.cnf 2>&1 > /dev/null &
如果忘記密碼,啟動方式為:
/usr/local/mysql/bin/mysqld_safe --defaults-file=/multidata/3307/my.cnf --skip-grant-tables 2>&1 > /dev/null &
此時要注意--defaults-file選項要放在--skip-grant-tables之前
5.登陸數(shù)據(jù)庫(以3306為例)
/usr/local/mysql/bin/mysql -S /multidata/3306/mysql.sock
如果忘記密碼,skip啟動后以空密碼登陸:
mysql -uroot -p -S /multidata/3307/mysql.sock
6.設(shè)置數(shù)據(jù)庫root賬戶密碼(以3306為例)
/usr/local/mysql/bin/mysqladmin -uroot password '123456' -S /multidata/3306/mysql.sock
如果是修改密碼,命令為:
/usr/local/mysql/bin/mysqladmin -uroot -p123456 password 'new' -S /multidata/3306/mysql.sock
7.關(guān)閉服務(wù)(以3306為例)
mysqladmin -uroot -p123456 -S /multidata/3306/mysql.sock shutdown
三、編寫啟動腳本
為方便使用時啟動和關(guān)閉,可以自己編寫一個腳本并給與執(zhí)行權(quán)限取代原有的mysqld執(zhí)行文件,腳本內(nèi)容如下:
#!/bin/bash
. /etc/init.d/functions
PORT=$2
USER=root
PASSWD=123456
MYSQLBIN='/usr/local/mysql/bin'
SOCKETFILE="/multidata/${PORT}/mysql.sock"
PIDFILE="/multidata/${PORT}/mysql.pid"
MYCNF="/multidata/${PORT}/my.cnf"
[[ $# -eq 2 ]] || {
echo "Usage: $0 {start|stop|restart|reload} {PORT}"
exit 1
}
mysql_start() {
[[ -e "$SOCKETFILE" ]] && {
action "MySQL port: $PORT IS already running" /bin/false
exit 0
} || {
action "Starting MySQL... please wait" /bin/true
$MYSQLBIN/mysqld_safe --defaults-file=$MYCNF &> /dev/null &
}
[[ "$?" == "0" ]] && {
action "MySQL has been Started" /bin/true
} || {
action "MySQL Started" /bin/false
}
}
mysql_stop() {
[[ ! -e "$SOCKETFILE" ]] && {
action "MySQL port:$PORT was already down" /bin/false
} || {
$MYSQLBIN/mysqladmin -u $USER -p$PASSWD -S $SOCKETFILE shutdown &>/dev/null
}
[[ "$?" == 0 ]] && {
action "MySQL port:$PORT has been Stopped" /bin/true
}
}
case "$1" in
'start')
mysql_start
;;
'stop')
mysql_stop
;;
'restart'|'reload')
mysql_stop
sleep 3
mysql_start
;;
*)
echo "Usage: $0 {start|stop|restart|reload} {PORT}"
esac
注意:該腳本中帶數(shù)據(jù)庫root賬戶的密碼(2臺服務(wù)器密碼一樣),所以在生產(chǎn)環(huán)境中建議將權(quán)限改為700以減小安全隱患
補(bǔ)充說明1:多個實例共用同一個my.cnf配置文件
在生產(chǎn)環(huán)境中建議將多個實例的配置文件分開,這樣忘記密碼時候便于指定配置文件通過skip-grant-tables選項找回。作為多實例的另一種方法,也可以使用同一個配置文件集中管理,以下在之前基礎(chǔ)上創(chuàng)建3308,3309實例進(jìn)行說明,步驟如下:
1.創(chuàng)建3308,3309的數(shù)據(jù)目錄
mkdir -pv /unidata/{3308,3309}
chown -R mysql.mysql /unidata
cp mysqld_multi.server /etc/init.d/mysqld
cp my-huge.cnf /etc/my.cnf
2.初始化數(shù)據(jù)(以3308為例)
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/unidata/3308 --user=mysql
3.修改/etc/my.cnf配置文件
[mysqld_multi]
mysqld=/usr/local/mysql/bin/mysqld_safe
mysqladmin=/usr/local/mysql/bin/mysqladmin
log = /unidata/mysql_multi.log
user = root
#password =
如果該地方不是root用戶,下面則需要在數(shù)據(jù)庫為該用戶添加shutdown權(quán)限,否則mysqld_multi將無法關(guān)閉實例
[mysqld3308]
socket=/unidata/3308/mysql.sock
port=3308
server-id=1
pid-file=/unidata/3308/mysql.pid
datadir=/unidata/3308
user=mysql #必須要指定1個用戶,否則實例無法啟動
[mysqld3309]
socket=/unidata/3309/mysql.sock
port=3309
server-id=2
pid-file=/unidata/3309/mysql.pid
datadir=/unidata/3309
user=mysql
注意:多個實例除了mysqld號不同外,每個實例內(nèi)的pid、port、socket和server-id也不能相同
4.檢測服務(wù)能否正常啟動和關(guān)閉
cp /usr/local/mysql/bin/mysqld_multi /etc/init.d/mysqld_multi
/etc/init.d/mysqld_multi start 3308,3309
/etc/init.d/mysqld_multi report
/etc/init.d/mysqld_multi stop 3308,3309
補(bǔ)充說明2:查看數(shù)據(jù)庫字符集
MariaDB在編譯安裝時可以指定默認(rèn)字符集,查看數(shù)據(jù)庫字符集命令:
show create database mysql \G