目錄
一、基本概念
1、MySQL多實例
就是在一臺機器上面開啓多個不同的端口,運行多個MySQL服務進程。這些MySQL多實例公用一套安裝程序,使用不同的(也可以是相同的)配置文件,啓動程序,數據文件。在提供服務時候,多實例MySQL在邏輯上看來是各自獨立的,多個實例的自身是根據配置文件對應的設定值,來取得相關硬件資源的多少。
2、應用場景
1).採用了數據僞分佈式架構的原因,而項目啓動初期又不一定有那多的用戶量,爲此先一組物理數據庫服務器,但部署多個實例,方便後續遷移
2).爲規避mysql對SMP架構不支持的缺陷,使用多實例綁定處理器的辦法,把不同的數據庫分配到不同的實例上提供數據服務
3).一臺物理數據庫服務器支撐多個數據庫的數據服務,爲提高mysql複製的從機的恢復效率,採用多實例部署
4).已經爲雙主複製的mysql數據庫服務器架構,想部分重要業務的數據多一份異地機房的熱備份,而mysql複製暫不支持多主的複製模式,且不給用戶提供服務,爲有效控制成本,會考慮異地機房部署一臺性能超好的物理服務器,甚至外加磁盤櫃的方式,爲此也會部署多實例;
5).傳統遊戲行業的MMO/MMORPG,以及Web Game,每一個服都對應一個數據庫,而可能要做很多數據查詢和數據訂正的工作,爲減少維護而出錯的概率,也可能採用多實例部署的方式,按區的概念分配數據庫;
3、作用與問題
1).有效利用服務器的資源,單個服務器資源有剩餘時,可以充分利用剩餘的資源提供更多的服務。
2).資源互相爭搶問題,比如 內存 ,cpu 需要開啓 numa,並把 mysql 綁定到固定的核心上,網卡的中斷請求,資源爭用,最重要的是磁盤 IO
MySQL多實例配置方法
1.單一配置文件
2.多配置文件。
二、實戰步驟:
1、同步時間
2、準備mysql依賴包
3、環境準備
3.1添加mysql用戶
3.2編譯安裝mysql
4、安裝MySQL多實例
5、準備配置文件
6、啓動MySQL
7、登錄mysql與一些安全措施
8、關閉MySQL
9,、提供簡易管理腳本
10、爲mysql的root用戶創建密碼
11、附,多配置文件安裝mysql多實例,這裏增加mysql 的3309端口
12、總結
1、同步時間
1 2 3 4 5 | yum install epel* ntp 202.120.2.101 yum install -y ntp ntpdate 202.120.2.101 hwclock -w |
2、準備mysql依賴包
1 2 | yum install -y autoconf* automake* zlib* libxml* ncurses-devel* libgcrypt* libtool* openssl* yum install cmake -y |
3、環境準備
3.1添加mysql用戶
1 2 3 4 5 | groupadd mysql useradd -g mysql mysql mkdir -pv /data/ {3306,3307,3308} /data chown -R mysql.mysql /data/ cd /usr/local/src/ |
3.2編譯安裝mysql
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | tar -xf mysql-5.5.45. tar .gz cd mysql-5.5.45 chown mysql.mysql -R . cmake . -DCMAKE_INSTALL_PREFIX= /usr/local/mysql \ -DMYSQL_DATADIR= /data \ -DSYSCONFDIR= /etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMYSQL_UNIX_ADDR= /tmp/mysql .sock \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci gmake make install |
4、安裝MySQL多實例
cd
/usr/local/mysql/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3306/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3307/
scripts
/mysql_install_db
--user=mysql --basedir=
/usr/local/mysql
--datadir=
/data/3308/
5、準備配置文件
1 | mysqld_multi --example > /data/multi .cnf #提供多配置文件模板 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | vim /data/multi .cnf #修改模板,這裏比較簡易 [mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin user = root
#這個用戶應該有關機權限,然後沒有其他的權限。建議創建一個通用的,multi_admin用戶控制其它的MySQL用戶,這裏有個例子 #GRANT SHUTDOWN ON *.* TO multi_admin@localhost IDENTIFIED BY 'password'
[mysqld1] socket = /tmp/mysql .sock1 port = 3306 pid- file = /data/3306/mysql .pid datadir = /data/3306/data
[mysqld2] socket = /tmp/mysql .sock2 port = 3307 pid- file = /data/3307/mysql .pid datadir = /data/3307/data #language = /usr/local/mysql/share/mysql/english #user = unix_user1
[mysqld3] #mysqld = /path/to/mysqld_safe #ledir = /path/to/mysqld-binary/ #mysqladmin = /path/to/mysqladmin socket = /tmp/mysql .sock3 port = 3308 pid- file = /data/3308/mysql .pid datadir = /data/3308/data #language = /usr/local/mysql/share/mysql/swedish #user = unix_user2 |
以上是簡易的配置文件。這個配置文件只能讓MySQL啓動起來。
6、啓動MySQL
1 2 3 4 5 | mysqld_multi --defaults- file = /data/multi .cnf start 1,2,3 ss -tnl #查看監聽端口 LISTEN 0 50 *:3306 *:* LISTEN 0 50 *:3307 *:* LISTEN 0 50 *:3308 *:* |
7、登錄mysql與一些安全措施
1 | mysql -S /tmp/mysql .sock1 #指定socket登錄 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | test | +--------------------+ 4 rows in set (0.01 sec)
mysql> drop database test ; Query OK, 0 rows affected (0.04 sec)
mysql> select User,Host from mysql.user; +------+-----------+ | User | Host | +------+-----------+ | root | 127.0.0.1 | | root | ::1 | | | localhost | | root | localhost | | | node1 | | root | node1 | +------+-----------+ 6 rows in set (0.01 sec)
mysql> delete from mysql.user where User= '' ; Query OK, 2 rows affected (0.00 sec)
mysql> delete from mysql.user where Host= '::1' ; Query OK, 1 row affected (0.00 sec)
mysql> delete from mysql.user where Host= 'node1' ; Query OK, 1 row affected (0.00 sec) |
其餘的操作類似,就不在演示
8、關閉MySQL
1 2 3 | mysqladmin -S /tmp/mysql .sock1 shutdown 建議使用 musqld_multi --defaults- file stop [ #,#] killall mysqld 不建議使用 |
9,、提供簡易管理腳本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | #!/bin/bash # basedir= /usr/local/mysql bindir= /usr/local/mysql/bin conf= /data/multi .cnf export PATH=$bindir:/$PATH if test -x $bindir /mysqld_multi then
mysqld_multi= "$bindir/mysqld_multi" ; else
echo "Can't execute $bindir/mysqld_multi from dir $basedir" ;
exit ; fi case "$1" in
'start' )
"$mysqld_multi" --defaults-extra- file =$conf start $2
;;
'stop' )
"$mysqld_multi" --defaults-extra- file =$conf stop $2
;;
'report' )
"$mysqld_multi" --defaults-extra- file =$conf report $2
;;
'restart' )
"$mysqld_multi" --defaults-extra- file =$conf stop $2
"$mysqld_multi" --defaults-extra- file =$conf start $2
;;
*)
echo "Usage: $0 {start|stop|report|restart}" >&2
;; esac |
10、爲mysql的root用戶創建密碼
1 | mysqladmin -uroot -S /tmp/mysql .sock2 password "123456" #指定socket文件位置即可 |
其餘的操作一樣
11、附,多配置文件安裝mysql多實例,這裏增加mysql 的3309端口
1 2 3 4 5 | mkdir -pv /data/3309/data chown mysql.mysql -R 3309/ cd /usr/local/mysql scripts /mysql_install_db --datadir= /data/3309/data/ --user=mysql --basedir= /usr/local/mysql/ cp support-files /my-small .cnf /data/3309/my .cnf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | vim /data/3309/my .cnf [client] port = 3309 #這裏也需要注意下吧 socket = /tmp/mysql .sock4
[mysqld] port = 3309 #注意端口 socket = /tmp/mysql .sock4 #注意socket skip-external-locking key_buffer_size = 16K max_allowed_packet = 1M table_open_cache = 4 sort_buffer_size = 64K read_buffer_size = 256K read_rnd_buffer_size = 256K net_buffer_length = 2K thread_stack = 128K datadir= /data/3309/data #注意datadir server- id = 1
[mysqldump] quick max_allowed_packet = 16M |
1 | mysqld_safe --defaults- file = /data/3309/my .cnf 2&1> > /dev/null #啓動mysqld |
1 2 3 4 5 | ss -tnl | grep 330 #查看端口 LISTEN 0 50 *:3306 *:* LISTEN 0 50 *:3307 *:* LISTEN 0 50 *:3308 *:* LISTEN 0 50 *:3309 *:* |
其餘啓動方法與關閉方法類似
12、總結:
1).通過這次mysql多實例安裝,我們已經可以根據自己的喜好決定是通過多配置文件安裝mysql多實例,還是但配置單文件安裝。
2).過程比較簡單,也沒有什麼特別高明的技巧,但是由小見大,以後配置文件可以在完善完善。
3).就是下面還會用心的寫一系列的mysql博客,希望高手指點,不勝感激
參考鏈接:http://freeloda.blog.51cto.com/2033581/1349312
本文出自 “馬哥教育Linux運維培訓” 博客,請務必保留此出處mageedu.blog.51cto.com/4265610/1699066