您好,登錄后才能下訂單哦!
本文主要給大家簡(jiǎn)單講講使用MySQL5.7 實(shí)現(xiàn)多實(shí)例講解,相關(guān)專業(yè)術(shù)語(yǔ)大家可以上網(wǎng)查查或者找一些相關(guān)書籍補(bǔ)充一下,這里就不涉獵了,直奔主題,希望可以給大家?guī)硪恍?shí)際幫助。
前言
文中使用mysql5.7 版本實(shí)現(xiàn)多實(shí)例,端口為3306和3307。
1、多實(shí)例本質(zhì)
在一臺(tái)機(jī)器上開啟多個(gè)不同的mysql服務(wù)端口(3306,3307),運(yùn)行多個(gè)mysql服務(wù)進(jìn)程,這些服務(wù)進(jìn)程通過不同的socket監(jiān)聽不同的服務(wù)端口來提供各自的服務(wù);
多個(gè)實(shí)例共用一套mysql安裝程序,配置文件可以用同一個(gè)(但是最好不同,文中用不同配置文件),啟動(dòng)程序可以用同一個(gè)(最好不同,文本用不同啟動(dòng)腳本),數(shù)據(jù)文件是不同的(必須不同);
云服務(wù)器的硬件資源是公用的,邏輯上多實(shí)例是各自獨(dú)立的;
2、多實(shí)例作用
有效利用云服務(wù)器資源;節(jié)約云服務(wù)器資源;
但是多實(shí)例肯定會(huì)存在資源互相搶占問題,當(dāng)某個(gè)服務(wù)實(shí)例并發(fā)很高或者有慢查詢時(shí),會(huì)消耗整臺(tái)服務(wù)器更多的內(nèi)存、CPU等,勢(shì)必導(dǎo)致其他實(shí)例運(yùn)行也很慢。
3、多實(shí)例應(yīng)用場(chǎng)景
資金比較緊張的公司;
并發(fā)訪問不是特別大的業(yè)務(wù);
4、安裝多實(shí)例數(shù)據(jù)庫(kù)
1.創(chuàng)建相應(yīng)的目錄
mkdir /mysql/{3306,3307}/{data,logs,conf,tmp} -p
// 目錄解釋
data # 存放數(shù)據(jù)
logs # 存放mysql日志以及binlog日志
conf # 存放mysql配置文件
tmp # 存放mysql socket文件
2.創(chuàng)建mysql用戶,登錄方式nologin,不創(chuàng)建家目錄
groupadd mysql -g 1002
useradd mysql -u 1002 -g 1002 -s /sbin/nologin -M
3.安裝一些依賴包
yum install ncurses-devel libaio-devel -y
4.上傳mysql 5.7
至本機(jī)/application
目錄
// 將mysql5.7 解壓并移動(dòng)到/application/mysql-5.7.20 目錄下
mkdir -p /application/mysql-5.7.20
tar xf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz ./mysql-5.7.20
mv mysql-5.7.20-linux-glibc2.12-x86_64/* mysql-5.7.20/
rm -rf mysql-5.7.20-linux-glibc2.12-x86_64
// 軟連接
ln -s /application/mysql-5.7.20/ /application/mysql
// 將 /application/mysql/bin 目錄加入PATH環(huán)境變量
vim /etc/profile
export MYSQL_HOME=/application/mysql/bin
export PATH=$PATH:$MYSQL_HOME
5.每個(gè)實(shí)例配置my.cnf文件
3306實(shí)例
# vim /mysql/3306/conf/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/mysql/3306/data
tmpdir = /mysql/3306/tmp
socket=/mysql/3306/tmp/mysql.sock
log-error=/mysql/3306/logs/mysql.log
port=3306
server_id=3306
max_connections = 1000
innodb_buffer_pool_size = 260M
skip_name_resolve
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
nit_connect='SET NAMES utf8mb4'
# bin-log日志
log-bin=/mysql/3306/data/mysql-bin
binlog_format=row
# 慢日志
slow_query_log = 1
slow_query_log_file = /mysql/3306/logs/slow.log
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 5
long_query_time = 1
[mysql]
socket=/mysql/3306/tmp/mysql.sock
[mysqladmin]
socket=/mysql/3306/tmp/mysql.sock
3307實(shí)例
# vim /mysql/3307/conf/my.cnf
[mysqld]
basedir=/application/mysql
datadir=/mysql/3307/data
tmpdir = /mysql/3307/tmp
socket=/mysql/3307/tmp/mysql.sock
log-error=/mysql/3307/logs/mysql.log
port=3307
server_id=3307
max_connections = 1000
innodb_buffer_pool_size = 260M
skip_name_resolve
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
# bin-log日志
log-bin=/mysql/3307/data/mysql-bin
binlog_format=row
# 慢日志
slow_query_log = 1
slow_query_log_file = /mysql/3307/logs/slow.log
log_queries_not_using_indexes = 1
log_throttle_queries_not_using_indexes = 5
long_query_time = 1
[mysql]
socket=/mysql/3307/tmp/mysql.sock
[mysqladmin]
socket=/mysql/3307/tmp/mysql.sock
6.使用mysqld
命令初始化mysql數(shù)據(jù)庫(kù)文件
// 授權(quán)mysql用戶管理相應(yīng)的mysql目錄
chown -R mysql:mysql /mysql/
// 初始化多實(shí)例
mysqld --defaults-file=/mysql/3306/conf/my.cnf --basedir=/application/mysql --initialize-insecure --user=mysql
mysqld --defaults-file=/mysql/3307/conf/my.cnf --basedir=/application/mysql --initialize-insecure --user=mysql
7.通過mysqld_safe
命令啟動(dòng)多實(shí)例mysql
mysqld_safe --defaults-file=/mysql/3306/conf/my.cnf &
mysqld_safe --defaults-file=/mysql/3307/conf/my.cnf &
8.檢查操作
// 查看進(jìn)程是否存在
ps -ef | grep mysql | grep -v "grep"
// 查看端口是否存在
ss -lntup | grep -E "3306|3307"
// 本地登錄(-S 指定不同實(shí)例的socket)
mysql -uroot -p -S /mysql/3306/tmp/mysql.sock
9.多實(shí)例啟動(dòng)腳本
#!/bin/bash
PORT=3306
SOCK_FILE_LOCK=/mysql/${PORT}/tmp/mysql.sock.lock
# start
function func_start(){
if [ -f ${SOCK_FILE_LOCK} ];then
echo "MySQL ${PORT} has started..."
exit 1
else
echo "MySQL ${PORT} is start..."
mysqld_safe --defaults-file=/mysql/3306/conf/my.cnf >/dev/null &
result=$?
[ ${result} -ne 0 ] && echo "MySQL ${PORT} start failed..." || echo "MySQL ${PORT} start success.."
fi
}
# stop
function func_stop(){
if [ -f ${SOCK_FILE_LOCK} ];then
echo "MySQL ${PORT} is stop..."
kill $(cat /mysql/${PORT}/tmp/mysql.sock.lock)
count=0
while [ $count -ne 60 ]
do
((count++))
# echo $count
sleep 1
if [ ! -f ${SOCK_FILE_LOCK} ];then
echo "MySQL ${PORT} stop success..."
break
else
echo "MySQL ${PORT} is stop..."
fi
done
else
echo "MySQL ${PORT} don't start..."
exit 1
fi
}
case $1 in
start)
func_start;;
stop)
func_stop;;
restart)
func_stop
sleep 3
func_start
echo "MySQL ${PORT} restart success...";;
esac
只需要將PORT變量進(jìn)行替換即可
使用MySQL5.7 實(shí)現(xiàn)多實(shí)例講解就先給大家講到這里,對(duì)于其它相關(guān)問題大家想要了解的可以持續(xù)關(guān)注我們的行業(yè)資訊。我們的板塊內(nèi)容每天都會(huì)捕捉一些行業(yè)新聞及專業(yè)知識(shí)分享給大家的。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。