1. 程式人生 > >MySQL5.7-多例項部署

MySQL5.7-多例項部署

一、mysql多例項的原理

mysql多例項,簡單的說,就是在一臺伺服器上開啟多個不同的mysql服務埠(如3306,3307),執行多個mysql服務程序。這些服務程序通過不同的socket監聽不同的服務埠,來提供各自的服務。

這些mysql例項共用一套mysql安裝程式,使用不同的my.cnf配置檔案、啟動程式、資料檔案。在提供服務時,mysql多例項在邏輯上看來是各自獨立的,各個例項之間根據配置檔案的設定值,來取得伺服器的相關硬體資源。

二、mysql多例項的特點

2.1 有效的利用伺服器資源

當單個伺服器資源有剩餘時,可以充分利用剩餘的伺服器資源來提供更多的服務。

2.2 節約伺服器資源

當公司資金緊張,但是資料庫需要各自提供獨立服務,而且需要主從同步等技術時,使用多例項就最好了。

2.3 出現資源互相搶佔問題

當某個例項服務併發很高或者有慢查詢時,會消耗伺服器更多的記憶體、CPU、磁碟IO等資源,這時就會導致伺服器上的其它例項提供訪問的質量下降,出現伺服器資源互相搶佔的現象。

三、mysql多例項應用場景

3.1 資金緊張型公司的選擇

當公司業務訪問量不太大,又捨不得花錢,但同時又希望不同業務的資料庫服務各自獨立,而且需要主從同步進行等技術提供備份或讀寫分離服務時,使用多例項是最好不過的。

3.2 併發訪問不是特別大的業務

當公司業務訪問量不太大,伺服器資源基本閒置的比較多,這是就很適合多例項的應用。如果對SQL語句優化的好,多例項是一個很值得使用的技術。即使併發很大,只要合理分配好

系統資源,也不會有太大問題。

四MySQL5.7部署方法

第一種方法我們可以把各個例項的配置檔案分開,管理比較方便。

第二種方法就是把多個例項都放到一個配置檔案中,這個管理不是很方便。

注:在此我們選擇第一種方法,而且以下實驗我們全部是在此方法下進行的。

五MySQL5.7多例項部署

1、首先原始碼安裝

系統環境:centos7.2 x86_64

因為 centos7.2 預設安裝了 mariadb-libs,

所以先要解除安裝掉 檢視是否安裝 mariadb

rpm -qa | grep mariadb 解除安裝 mariadb rpm -e --nodeps mariadb-libsMySQL5.7

2、安裝依賴包 注: 相關依賴包的作用 cmake:由於從 MySQL5.5 版本開始棄用了常規的 configure 編譯方法,所以需要 CMake 編譯 器,用於設定 mysql 的編譯引數。如:安裝目錄、資料存放目錄、字元編碼、排序規則等。 Boost #從 MySQL 5.7.5 開始 Boost 庫是必需的,mysql 原始碼中用到了 C++的 Boost 庫,要求 必須安裝 boost1.59.0 或以上版本 GCC 是 Linux 下的 C 語言編譯工具,mysql 原始碼編譯完全由 C 和 C++編寫,要求必須安裝 GCC bison:Linux 下 C/C++語法分析器 ncurses:字元終端處理庫 1)安裝檔案準備 下載 cmake-3.5.tar.gz http://www.cmake.org/download/ 下載 ncurses-5.9.tar.gz ftp://ftp.gnu.org/gnu/ncurses/ 下載 bison-3.0.4.tar.gz http://ftp.gnu.org/gnu/bison/ 下載 mysql-5.7.13.tar.gz wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz 下載 Boost_1_59_0.tar.gz wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

2)安裝 CMAKE 及必要的軟體 安裝 cmake cmake –version ---檢視 cmake 版本 安裝 ncurses---------./bootstrap && gmake && gmake install 安裝 ncurses---------./configure && make && make install 安裝 bison-----------./configure && make && make install 安裝 bootst-----------mv boost_1_59_0 /usr/local/boost 3)建立 mysql 使用者和使用者組及目錄 # groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql ---新建 msyql 組和 msyql 用 戶禁止登入 shell #mkdir /usr/local/mysql ---建立目錄 #mkdir /usr/local/mysql/data ---資料庫目錄

3、編譯安裝 mysql 解壓 mysql 原始碼包

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIBE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_SYSTEMD=1 -DWITH_BOOST=/usr/local/boost && make && make install

注 1:配置解釋: -DCMAKE_INSTALL_PREFIX=/usr/local/mysql [MySQL 安裝的根目錄]  -DMYSQL_DATADIR=/usr/local/mysql /data [MySQL 資料庫檔案存放目錄] -DSYSCONFDIR=/etc [MySQL 配置檔案所在目錄] -DWITH_MYISAM_STORAGE_ENGINE=1 [新增 MYISAM 引擎支援 ] -DWITH_INNOBASE_STORAGE_ENGINE=1 [新增 InnoDB 引擎支援 ]

-DWITH_ARCHIVE_STORAGE_ENGINE=1 [新增 ARCHIVE 引擎支援 ] -DMYSQL_UNIX_ADDR=/usr/local/mysql /mysql.sock [指定 mysql.sock 位置 ] -DWITH_PARTITION_STORAGE_ENGINE=1 [安裝支援資料庫分割槽 ] -DEXTRA_CHARSETS=all [使 MySQL 支援所有的擴充套件字元] -DDEFAULT_CHARSET=utf8 [設定 MySQL 的預設字符集為utf8]  -DDEFAULT_COLLATION=utf8_general_ci [設定預設字符集校對規則 ] -DWITH-SYSTEMD=1 [可以使用 systemd 控制 mysql 服務] -DWITH_BOOST=/usr/local/boost [指向 boost 庫所在目錄] 更多引數執行 cmake . –LH

4、設定許可權並初始化 MySQL 系統授權表 # cd /usr/local/mysql # chown -R mysql:mysql . ---更改所有者,屬組,注意是 mysql . # bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 注 1:以 root 初始化操作時要加--user=mysql 引數,生成一個隨機密碼(注意儲存登入時用) 注 2:MySQL 5.7.6 之前的版本執行這個指令碼初始化系統資料庫 /usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data # 5.7.6 之後版本初始系統資料庫指令碼(本文使用此方式初始化) #/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 注意:如果使用–initialize 引數初始化系統 資料庫 之後,會生成 root 使用者的一個臨時密碼, 5、建立配置檔案 # cd /usr/local/mysql/support-files ---進入 MySQL 安裝目錄支援檔案目錄 # cp my-default.cnf /etc/my.cnf ---複製模板為新的配置檔案, #vim /etc/my.cnf [mysqld] user = mysql basedir = /usr/local/mysql port = 3306 server-id = 3306 datadir = /usr/local/mysql/data socket = /usr/local/mysql/mysql.sock log-error = /usr/local/mysql/data/mysql.err pid-file = /usr/local/mysql/data/mysqld.pid [mysql] auto-rehash [client] socket = /usr/local/mysql/mysql.sock #cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system #systemctl enable mysqld(自動啟動) #systemctl start mysqld(啟動成功) #ss -anput |grep mysqld #mysql -u 使用者 -p 密碼 登入即可

到這安裝完成

6、部署多例項

# mkdir -pv /usr/local/mysql3307/data #chown mysql:mysql /usr/local/mysql3307/data/ #vim /etc/my3307.cnf [mysqld] user = mysql server-id = 3307 port = 3307 basedir = /usr/local/mysql datadir = /usr/local/mysql3307/data socket = /usr/local/mysql3307/mysql3307.sock log-error = /usr/local/mysql3307/data/mysql3307.err pid-file = /usr/local/mysql3307/data/mysqld3307.pid [mysql] auto-rehash [client] port = 3307 socket = /usr/local/mysql3307/mysql3307.sock #mysqld --defaults-file=/etc/my3307.cnf --initialize --user=mysql --basedir=/usr/local/mysql #mysqld --defaults-file=/etc/my3307.cnf #ss -anput |grep mysqld     tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=5355,fd=31))     tcp    LISTEN     0      80       :::3307                 :::*                   users:(("mysqld",pid=5528,fd=20)) #mysql -h 127.0.0.1 -u root -P3307 -p

到這就大功告成

驗證一下吧:1:登入3307建立個庫,表。2:登入3306檢視如果沒有你在3307所建立的表說明成功。