linux下MySQL多實例詳解

目錄

一、基本概念

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、爲mysqlroot用戶創建密碼

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章