MySQL 多實例安裝

一、簡介

1、概述

MySQL多實例就是在一臺機器上開啓多個不同的服務端口(如:3306,3307),運行多個MySQL服務進程,通過不同的socket監聽不同的服務端口來提供各自的服務

2.1、優點

1)有效利用服務器資源

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

2)節約服務器資源

當公司資金緊張,但數據庫又需要數據庫之間各自提供服務時,並且還想使用主從同步等技術,此時多實例就再好不過了;

3)方便後期架構擴展

當公司的某個項目才啓動時,啓動初期並不一定有很大的用戶量,因此可以先用一組物理數據庫服務器,在上面部署多個實例,方便後續架構擴展、遷移;

2.2、缺點

資源互相搶佔問題

當某個服務實例併發很高或者有慢查詢時,整個實例會消耗更多的內存、CPU和IO資源,這將導致服務器上的其它實例提供服務的質量下降。這就比如說合租房的各個租客,每當早晨上班時,都會洗漱,此時衛生間的佔用率就大,各個租客總會發生等待。

3、部署mysql多實例的兩種方式

1、基於多配置文件

通過使用多個配置文件來啓動不同的進程,以此來實現多實例。

優點:邏輯簡單,配置簡單

缺點:管理起來不方便

2、基於mysqld_multi

通過官方自帶的 mysqld_multi 工具,使用單獨配置文件來實現多實例

優點: 便於集中管理管理

缺點: 不方便針對每個實例配置進行定製

4、同一開發環境下安裝兩個數據庫,必須處理以下問題

(1) 配置文件安裝路徑不能相同

(2)數據庫目錄不能相同

(3)啓動腳本不能同名

(4)端口不能相同

(5)socket文件的生成路徑不能相同

二、服務搭建

1、部署環境    

CentOS Linux release 7.5.1804 (Core)

2、下載免編譯的二進制包

mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

3、解壓和遷移(/usr/local

[root@SQL local]# tar -zxvf mysql-5.6.41-linux-glibc2.12-x86_64.tar.gz

[root@SQL local]# mv mysql-5.6.41-linux-glibc2.12-x86_64 mysql

 4、暫時關閉iptables和seLinux

5、創建mysql用戶

# groupadd mysql

# useradd -r -g mysql -s /bin/false mysql

6、創建相關目錄

[root@SQL ~]# mkdir -p /data/mysql/{mysql3307,mysql3308,mysql3309}

[root@SQL ~]# mkdir -p /data/mysql/mysql3307/{data,log,tmp}

[root@SQL ~]# mkdir -p /data/mysql/mysql3308/{data,log,tmp}

[root@SQL ~]# mkdir -p /data/mysql/mysql3309/{data,log,tmp}

7、更改目錄權限

[root@SQL ~]# chown -R mysql:mysql /data/mysql/

[root@SQL ~]# chown -R mysql:mysql /usr/local/mysql/

8、添加環境變量

# echo 'export PATH=$PATH:/usr/local/mysql/bin' >>  /etc/profile

# source /etc/profile

9、修改my.cnf

# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

[root@SQL ~]# vim /etc/my.cnf

  [client]

port = 3307

socket = /tmp/mysql.sock

[mysqld_multi]

mysqld = /usr/local/mysql/bin/mysqld_safe

mysqladmin= /usr/local/mysql/bin/mysqladmin

log = /data/mysql/mysqld_multi.log

[mysqld]

user = mysql

basedir = /usr/local/mysql

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

[mysqld3307]

port = 3307

mysqld = mysqld

mysqladmin = mysqladmin

datadir = /data/mysql/mysql3307/data

language = /usr/local/mysql/share/english/

server-id = 3307

socket = /tmp/mysql3307.sock

pid-file = /data/mysql/mysql3307/mysql3307.pid

log-output = file

slow_query_log = 1

long_query_time = 1

slow_query_log_file = /data/mysql/mysql3307/log/slow.log

log-bin = /data/mysql/mysql3307/log/mysql-bin

binlog_format = row

binlog_rows-query-log_events = 1

expire_logs_days = 30

log-error = /data/mysql/mysql3307/log/error.log

explicit_defaults_for_timestamp=true

character_set_server = utf8

[mysqld3308]

port = 3308

mysqld = mysqld

mysqladmin = mysqladmin

datadir = /data/mysql/mysql3308/data

language = /usr/local/mysql/share/english/

server-id = 3308

socket = /tmp/mysql3308.sock

pid-file = /data/mysql/mysql3308/mysql3308.pid

log-output = file

slow_query_log = 1

long_query_time = 1

slow_query_log_file = /data/mysql/mysql3308/log/slow.log

log-bin = /data/mysql/mysql3308/log/mysql-bin

binlog_format = row

binlog_rows-query-log_events = 1

expire_logs_days = 30

log-error = /data/mysql/mysql3308/log/error.log

explicit_defaults_for_timestamp=true

character_set_server = utf8

[mysqld3309]

port = 3309

mysqld = mysqld

mysqladmin = mysqladmin

datadir = /data/mysql/mysql3309/data

language = /usr/local/mysql/share/english/

server-id = 3309

socket = /tmp/mysql3309.sock

pid-file = /data/mysql/mysql3309/mysql3309.pid

log-output = file

slow_query_log = 1

long_query_time = 1

slow_query_log_file = /data/mysql/mysql3309/log/slow.log

log-bin = /data/mysql/mysql3309/log/mysql-bin

binlog_format = row

binlog_rows-query-log_events = 1

expire_logs_days = 30

log-error = /data/mysql/mysql3309/log/error.log

explicit_defaults_for_timestamp=true

character_set_server = utf8

10、初始化數據庫(5.6)

[root@SQL ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql3307/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3307.sock

[root@SQL ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql3308/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3308.sock

[root@SQL ~]# /usr/local/mysql/scripts/mysql_install_db --user=mysql --datadir=/data/mysql/mysql3309/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3309.sock

備註:(5.7)

# cd /usr/local/mysql/

[root@SQL mysql]# ./bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/mysql3307/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3307.sock

[root@SQL mysql]# ./bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/mysql3308/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3308.sock

[root@SQL mysql]# ./bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql/mysql3309/data --basedir=/usr/local/mysql/ --socket=/tmp/mysql3309.sock

檢查數據庫是否初始化成功狀態

出現兩個”OK”

1.png

2.png

11、查看數據庫是否初始化成功

查看3307數據庫

[root@SQL ~]# ll /data/mysql/mysql3307/data/

3.png

12、設置啓動文件

# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

13、mysqld_multi進行多實例管理

啓動全部實例

# /usr/local/mysql/bin/mysqld_multi report

查看全部實例狀態

[root@SQL ~]# /usr/local/mysql/bin/mysqld_multi report

1、運行失敗,如下圖:

4.png

#數據庫日誌報如下錯誤

11.png

#mysqld_multi錯誤日誌如下

12.png

解決方式:

# vim /etc/my.cnf

[mysql330*]

language = /usr/local/mysql/share/english/

5.png

啓動單個實例:/usr/local/mysql/bin/mysqld_multi start 3306

停止單個實例:

/usr/local/mysql/bin/mysqladmin -S /mysql/mysql3306/mysql3306.sock -u root -p shutdown

或者

/usr/local/mysql/bin/mysqld_multi stop 3306

查看單個實例狀態:/usr/local/mysql/bin/mysqld_multi report 3306        

14、查看啓動進程   

6.png

15、修改密碼

# mysql -S /tmp/mysql3307.sock

mysql> set password for root@'localhost'=password('123456');

mysql> flush privileges;

7.png

其他實例同理

16、新建用戶並授權

# mysql -S /tmp/mysql3307.sock  -p

mysql> use mysql

mysql> grant select,delete,update,insert on *.* to jiangjj@'%' identified by '123456';

mysql> flush privileges;

8.png

注意:

mysqld_multi關閉不了MySQL處理Tips

vim /usr/local/mysql/bin/mysqld_multi

    修改mysqld_mutli 把

    my $com= join ' ', 'my_print_defaults ', @defaults_options, $group;

    替換爲:

    my $com= join ' ', 'my_print_defaults -s', @defaults_options, $group;

9.png

補充:mysql5.7配置類似,只是在配置數據庫賬號密碼用法不同


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