MySQL多執行個體應用配置部署指南
一,Mysql 多執行個體的作用的問題
1,有效利用伺服器的資源
當單個伺服器資源有剩餘的時候,可以充分利用剩餘的資源以提供更多的服務
2,節約伺服器的資源
當公司資源緊張,但是資料庫各自需要獨立提供服務,而且需要主從同步等技術時候,此時使用多執行個體是最好的。
3,資源互相搶佔的問題
當某個服務執行個體並發很高或者有慢查詢的時候,整個執行個體會消耗更多的CPU,記憶體,磁碟IO資源,導致伺服器上其他的執行個體提供的服務品質大大下降,相當於一個大房子,多個臥室,大家共用一個衛生間,早餐起床,一個人上廁所,長期佔用,其他人要等待一樣的道理。
二、Mysql 多執行個體的應用情境
1,資源緊張型的公司
業務量不大,不想花錢,又有多需求,所以特別適合多執行個體
2,並發訪問不是特別大的網站
當公司業務量不大的適合,伺服器資源沒有充分利用,有浪費的時候,就可以使用多執行個體
3,百度搜尋引擎就使用了多執行個體 ,sina 網也使用了多執行個體
目的,節約IDC空間,資源充分利用
sina的配置 SATA 15000轉 4塊做raid5 48G記憶體
三、MySQL多執行個體的配置方案
方案一:如 推薦使用此
這種方式的優勢邏輯簡單,配置簡單,耦合度低
缺點是管理起來不太方便。
方案二:單一的部署方案 不推薦,耦合性太高
[mysqld_muti]
即一個設定檔 啟動多個執行個體
四、開始配置MySQL多執行個體
環境介紹:
mysql 版本:5.6.27
作業系統:CentOS 6.5
mysql執行個體數:2個
執行個體佔用連接埠分別為:3306、3307
先配置方案一:
1.下載:在http://dev.mysql.com/downloads/mysql/官網上下載
2.解壓
tar xvf mysql-5.6.27-linux-glibc2.5-x86_64.tar.gz
3.移動到/usr/local/mysql
mv mysql-5.6.27-linux-glibc2.5-x86_64 mysql
4.安裝依賴的lib包:
centos:yum install libaio -y
5、配置使用者,目錄
shell> groupadd mysql
shell> useradd -r -g mysql mysql
shell> cd /usr/local/mysql
shell> chown -R mysql .
shell> chgrp -R mysql .
6、使用/data/目錄作為MySQL多執行個體的總目錄
mkdir -p /data/{3306,3307}/data
7、開始配置多執行個體的設定檔
vim /data/3306/my.cnf
[mysqld]
#general
basedir = /usr/local/mysql
datadir = /data/3306/data
socket = /data/3306/mysql.sock
user = mysql
port = 3306
server_id = 1
log-error = /data/3306/err.log
pid = /data/3306/mysql.pid
#binlog
log-bin = /data/3306/mysql-bin
sync-binlog = 1
#InnoDB
innodb_flush_log_at_trx_commit
innodb_support_xa = 1
#other
character_set_server = utf8
default_storage_engine =InnoDB
ft_min_word_len = 1
open_files_limit = 65535
auto-increment-increment = 10
auto-increment-offset = 1
log_slave_updates=1 允許備庫將其重放的事件也記錄到自身的二進位日誌中
read_only=0 阻止任何沒有特權許可權的線程修改資料
skip_slave_start
[client]
socket = /data/3306/mysql.sock
port = 3306
vim /data/3307/my.cnf
[mysqld]
#general
basedir = /usr/local/mysql
datadir = /data/3307/data
socket = /data/3307/mysql.sock
user = mysql
port = 3307
server_id = 1
log-error = /data/3307/err.log
pid = /data/3307/mysql.pid
#binlog
log-bin = /data/3307/mysql-bin
sync-binlog = 1
#InnoDB
innodb_flush_log_at_trx_commit
innodb_support_xa = 1
#other
character_set_server = utf8
default_storage_engine =InnoDB
ft_min_word_len = 1
open_files_limit = 65535
auto-increment-increment = 10
auto-increment-offset = 1
log_slave_updates=1 允許備庫將其重放的事件也記錄到自身的二進位日誌中
read_only=0 阻止任何沒有特權許可權的線程修改資料
skip_slave_start
[client]
socket = /data/3307/mysql.sock
port = 3307
8、建立多執行個體的開機檔案 。
放到/data/3306 | /data/3307 下
指令碼省略(mysqld)
多執行個體開機檔案的啟動MySQL服務實質:
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
多執行個體開機檔案的停止MySQL服務實質:
mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown
mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown 平滑停止
9,授權MySQL使用者,和組管理整個多執行個體目錄
chown -R mysql.mysql /data
10,配置MySQL全域環境變數
echo "export PATH=$PATH:/usr/local/mysql/bin/" >> /etc/profile
source /etc/profile
11,開始初始化資料庫
cd/usr/local/mysql/scripts/
./mysql_install_db --user=mysql --datadir=/data/3306/data/ --basedir=/usr/local/mysql/
./mysql_install_db --user=mysql --datadir=/data/3307/data/ --basedir=/usr/local/mysql/
什麼初始化資料庫?
a,初始化的主要目的就是建立基礎的資料庫檔案,例如產生MySQL的庫表
b,初始化後,產看目錄,可以看到一些表檔案
12,啟動| 停止 MySQL服務
如果有指令碼,則使用指令碼啟動
/data/3306/mysql start
/data/3307/mysql start
如果沒有指令碼,則使用一下啟動
mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 >/dev/null &
mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 >/dev/null &
如果沒有指令碼,則使用一下啟動停止
mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown
mysqladmin -u root -p passwd -S /data/3306/mysql.sock shutdown 平滑停止|
13,檢查
登陸:
mysql -S /data/3306/mysql.sock
管理的話,在本地都是採用 -S /data/3306/mysql.sock,如果在遠程可以通過不同的連接埠串連上去坐管理操作。其他的和單一實例的管理沒什麼區別!
##############################################
再來看第二種通過官方內建的mysqld_multi來實現多執行個體實戰:
這裡的mysql安裝以及資料庫的初始化和前面的步驟一樣,就不再贅述。
mysqld_multi的配置
vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = admin
password = password
[mysqld1]
#general
basedir = /usr/local/mysql/
datadir = /data/3306/data/
socket = /data/3306/mysql.sock
user = mysql
port = 3306
server_id = 1
log-error = /data/3306/
pid = /data/3306/
#binlog
log-bin = /data/3306/mysql-bin
sync-binlog = 1
#InnoDB
innodb_flush_log_at_trx_commit
innodb_support_xa = 1
#other
character_set_server = utf8
default_storage_engine =InnoDB
ft_min_word_len = 1
open_files_limit = 65535
auto-increment-increment = 10
auto-increment-offset = 1
log_slave_updates=1 允許備庫將其重放的事件也記錄到自身的二進位日誌中
read_only=0 阻止任何沒有特權許可權的線程修改資料
skip_slave_start
[client]
socket = /data/3306/mysql.sock
port = 3306
[mysqld2]
#general
basedir = /usr/local/mysql/
datadir = /data/3307/data/
socket = /data/3307/mysql.sock
user = mysql
port = 3307
server_id = 2
log-error = /data/3307/
pid = /data/3307/
#binlog
log-bin = /data/3307/mysql-bin
sync-binlog = 1
#InnoDB
innodb_flush_log_at_trx_commit
innodb_support_xa = 1
#other
character_set_server = utf8
default_storage_engine =InnoDB
ft_min_word_len = 1
open_files_limit = 65535
auto-increment-increment = 10
auto-increment-offset = 1
log_slave_updates=1 允許備庫將其重放的事件也記錄到自身的二進位日誌中
read_only=0 阻止任何沒有特權許可權的線程修改資料
skip_slave_start
[client]
socket = /data/3307/mysql.sock
port = 3307
[mysql]
no-auto-rehash
prompt=\\u@\\d \\R:\\m>
[mysqld_safe]
open-files-limit = 8192
mysqld_multi啟動
/usr/local/mysql/bin/mysqld_multi start 1
/usr/local/mysql/bin/mysqld_multi start 2
停止MySQL執行個體
mysqladmin -uroot -p -S /data/3306/mysql.sock shutdown
mysqladmin -uroot -p -S /data/3307/mysql.sock shutdown
更改原來密碼
mysqladmin -uroot password '123456' -S /data/3306/mysql.sock
mysqladmin -uroot password '123456' -S /data/3307/mysql.sock
測試登陸
mysql -uroot -p -S /data/3306/mysql.sock
mysql -uroot -p -S /data/3307/mysql.sock
本文永久更新連結地址: