溫馨提示×

您好,登錄后才能下訂單哦!

登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

使用MySQL5.7 實(shí)現(xiàn)多實(shí)例講解

發(fā)布時(shí)間:2020-04-30 09:41:52 來源:億速云 閱讀:616 作者:三月 欄目:系統(tǒng)運(yùn)維

本文主要給大家簡(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ú)立的;

使用MySQL5.7 實(shí)現(xiàn)多實(shí)例講解

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í)分享給大家的。


向AI問一下細(xì)節(jié)

免責(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)容。

AI