Mysql集群搭建(多實例、主從)


1 MySQL多實例

一 、MySQL多實例介紹

1、什么是MySQL多實例

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

2、MySQL多實例的特點有以下幾點

  • 有效利用服務器資源,當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務。
  • 節約服務器資源
  • 資源互相搶占問題,當某個服務實例服務並發很高時或者開啟慢查詢時,會消耗更多的內存、CPU、磁盤IO資源,導致服務器上的其他實例提供服務的質量下降;

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

第一種是使用*多個配置文件啟動*不同的進程來實現多實例,這種方式的優勢邏輯簡單,配置簡單,缺點是管理起來不太方便;

第二種是通過官方自帶的*mysqld_multi*使用單獨的配置文件來實現多實例,這種方式定制每個實例的配置不太方面,優點是管理起來很方便,集中管理;

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

  • 配置文件安裝路徑不能相同
  • 數據庫目錄不能相同
  • 啟動腳本不能同名
  • 端口不能相同
  • socket文件的生成路徑不能相同

2 mysql多實例搭建

一、mysqld_multi搭建

1、下載免編譯二進制包

下載地址:http://mirrors.sohu.com/mysql/MySQL-5.7/

mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz

2、解壓和遷移

  • cd /usr/local

#將安裝包拖進local文件夾下並解壓

  • tar -zxvf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz
  • mv mysql-5.7.17-linux-glibc2.5-x86_64 mysql

3、關閉iptables

#臨時關閉

  • service iptables stop

#永久關閉

  • chkconfig iptables off

4、關閉selinux

  • vi /etc/sysconfig/selinux

#將SELINUX修改為DISABLED,即SELINUX=DISABLED

img

5、創建mysql系統用戶和組

  • groupadd -g 27 mysql
  • useradd -u 27 -g mysql mysql
  • id mysql

img

*6**、創建**mysql**目錄*

  • mkdir -p /data/mysql/mysql_3306/data
  • mkdir -p /data/mysql/mysql_3306/log
  • mkdir -p /data/mysql/mysql_3306/tmp
  • mkdir -p /data/mysql/mysql_3307/data
  • mkdir -p /data/mysql/mysql_3307/log
  • mkdir -p /data/mysql/mysql_3307/tmp
  • mkdir -p /data/mysql/mysql_3308/data
  • mkdir -p /data/mysql/mysql_3308/log
  • mkdir -p /data/mysql/mysql_3308/tmp

img

*7**、更改目錄權限*

*#**任意目錄下,輸入*

  • chown -R mysql:mysql /data/mysql/
  • chown -R mysql:mysql /usr/local/mysql/

*8**、添加環境變量*

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

img

*9**、復制**my.cnf**文件到**etc**目錄*

#將原來的my.cnf文件刪除了

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

*10**、修改**my.cnf**(在一個文件中修改即可)*

  • vi /etc/my.cnf
  • [client]port=3306socket=/tmp/mysql.sock[mysqld_multi]mysqld = /usr/local/mysql/bin/mysqld_safemysqladmin = /usr/local/mysql/bin/mysqladminlog = /data/mysql/mysqld_multi.log[mysqld]basedir = /usr/local/mysqlsql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES#3306數據庫[mysqld3306]mysqld=mysqldmysqladmin=mysqladmindatadir=/data/mysql/mysql_3306/dataport=3306server_id=3306socket=/tmp/mysql_3306.socklog-output=fileslow_query_log = 1long_query_time = 1slow_query_log_file = /data/mysql/mysql_3306/log/slow.loglog-error = /data/mysql/mysql_3306/log/error.logbinlog_format = mixedlog-bin = /data/mysql/mysql_3306/log/mysql3306_bin#3307數據庫[mysqld3307]mysqld=mysqldmysqladmin=mysqladmindatadir=/data/mysql/mysql_3307/dataport=3307server_id=3307socket=/tmp/mysql_3307.socklog-output=fileslow_query_log = 1long_query_time = 1slow_query_log_file = /data/mysql/mysql_3307/log/slow.loglog-error = /data/mysql/mysql_3307/log/error.logbinlog_format = mixedlog-bin = /data/mysql/mysql_3307/log/mysql3307_bin#3308數據庫[mysqld3308]mysqld=mysqldmysqladmin=mysqladmindatadir=/data/mysql/mysql_3308/dataport=3308server_id=3308socket=/tmp/mysql_3308.socklog-output=fileslow_query_log = 1long_query_time = 1slow_query_log_file = /data/mysql/mysql_3308/log/slow.loglog-error = /data/mysql/mysql_3308/log/error.logbinlog_format = mixedlog-bin = /data/mysql/mysql_3308/log/mysql3308_bin

*11**、* *初始化數據庫*

*#**初始化**3306**數據庫*

  • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf

img

img

*#**初始化**3307**數據庫*

  • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf

*#**初始化**3308**數據庫*

  • /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3308/data --defaults-file=/etc/my.cnf

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

查看3306、3307、3308數據庫

  • cd /data/mysql/mysql_3306/data/
  • cd /data/mysql/mysql_3307/data/
  • cd /data/mysql/mysql_3308/data/

img

13、*設置啟動文件*

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

14、*mysqld_multi**進行多實例管理*

啟動全部實例:/usr/local/mysql/bin/mysqld_multi start

查看全部實例狀態:/usr/local/mysql/bin/mysqld_multi report

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

停止單個實例:/usr/local/mysql/bin/mysqld_multi stop 3306

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

#*啟動全部實例*

  • /usr/local/mysql/bin/mysqld_multi start
  • /usr/local/mysql/bin/mysqld_multi report

img

# *查看啟動進程*

  • ps -aux | grep mysql

img

#進入tmp目錄,查看sock文件

  • cd /tmp

img

15、*修改密碼*

mysql的root用戶初始密碼是空,所以需要登錄mysql進行修改密碼,下面以3306為例:

    • mysql -S /tmp/mysql_3306.sock
    • set password for root@'localhost'=password('xxxxxx');
    • flush privileges;

img

#修改3307數據庫密碼

  • mysql -S /tmp/mysql_3307.sock
  • set password for root@'localhost'=password('xxxxxx');
  • flush privileges;

#修改3308數據庫密碼

  • mysql -S /tmp/mysql_3307.sock
  • set password for root@'localhost'=password('xxxxxx');
  • flush privileges;

16、*新建用戶及授權*

一般新建數據庫都需要新增一個用戶,用於程序連接,這類用戶只需要insert、update、delete、select權限。這里賦予所有權限,以3306為例,3307、3308相同。

#新增一個用戶,並授權如下:

  • grant ALL PRIVILEGES on . to admin@'%' identified by 'xxxxxx';
  • flush privileges

img

*17**、外部軟件登錄數據庫*

img

圖1

img

圖2

二、多配置文件搭建

1、安裝包分發

140搭建的有mysql數據庫

#將數據庫安裝包分發到其他兩台機器

  • scp -r mysql/ root@192.168.3.141:/usr/local/
  • scp -r mysql/ root@192.168.3.142:/usr/local/

2、卸載冗余數據庫服務

#查找之前安裝的數據庫服務,若有,怎卸載數據庫服務

  • rpm -qa|grep -i mysql
  • rpm -qa|grep -i MariaDB
  • rpm -ev mariadb-libs-5.5.56-2.el7.x86_64 --nodeps
  • img
  • rpm -ev mysql-community-test-5.7.19-1.el7.x86_64 mysql-community-devel-5.7.19-1.el7.x86_64 mysql-community-libs-5.7.19-1.el7.x86_64 mysql-community-embedded-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-devel-5.7.19-1.el7.x86_64 mysql-community-server-5.7.19-1.el7.x86_64 mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64 mysql-community-common-5.7.19-1.el7.x86_64 mysql-community-libs-compat-5.7.19-1.el7.x86_64 mysql-community-embedded-5.7.19-1.el7.x86_64 mysql-community-client-5.7.19-1.el7.x86_64 mysql-community-server-minimal-5.7.19-1.el7.x86_64 --nodeps

3、安裝數據庫

在141****上安裝數據庫

#安裝mysql的環境

  • yum -y install gcc gcc-c++ gdb cmake ncurses-devel bison bison-devel

#解壓mysql安裝包

  • tar -zxvf MySQL-5.7.19-1.el7.x86_64_64.rpm-bundle.tar

img

#安裝mysql服務

  • sudo rpm -ivh --force mysql-community-client-5.7.19-1.el7.x86_64.rpm mysql-community-common-5.7.19-1.el7.x86_64.rpm mysql-community-devel-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-compat-5.7.19-1.el7.x86_64.rpm mysql-community-embedded-devel-5.7.19-1.el7.x86_64.rpm mysql-community-libs-5.7.19-1.el7.x86_64.rpm mysql-community-libs-compat-5.7.19-1.el7.x86_64.rpm mysql-community-minimal-debuginfo-5.7.19-1.el7.x86_64.rpm mysql-community-server-5.7.19-1.el7.x86_64.rpm mysql-community-server-minimal-5.7.19-1.el7.x86_64.rpm mysql-community-test-5.7.19-1.el7.x86_64.rpm --nodeps

img

#查看安裝的mysql服務

  • rpm -qa|grep -i mysql

img

*在**142****上安裝數據庫:與上面同樣的操作*

4、啟動mysql並查看狀態

#啟動

  • service mysqld start

#查看數據庫運行狀態

  • service mysqld status

img

#查看MySQL的進程

  • ps -aux|grep mysql

img

5、設置開機自啟

  • systemctl enable mysqld.service

6、設置初始密碼

#查看隨機生成的mysql密碼

  • grep "password" /var/log/mysqld.log

img

#登陸數據庫客戶端

  • mysql -u root -p

注意:用隨機生成的密碼

#設置新密碼

  • set password = password('xxxxxx');

7、新建用戶和修改權限

#修改root用戶的權限

  • grant ALL PRIVILEGES on . to root@'%' identified by 'xxxxxx';

#創建amdin用戶,並賦予限

  • CREATE USER 'admin'@'%' IDENTIFIED BY 'xxxxxx';
  • grant ALL PRIVILEGES on . to admin@'localhost' identified by 'xxxxxx';
  • FLUSH PRIVILEGES;

#查看用戶的權限

  • select host,user from mysql.user;

img

*在**142****上設置數據庫:與上面同樣的操作*

2 mysql集群搭建

一、mysql主從集群

1、建立siger用戶並設置權限

登陸140的mysql數據庫

  • mysql -u root -p
  • CREATE USER 'siger'@'%'IDENTIFIED BY 'xxxxxx';
  • GRANT ALL PRIVILEGES ON . TO 'siger'@'%';
  • grant ALL PRIVILEGES on . to siger@'localhost' identified by 'xxxxxx';
  • FLUSH PRIVILEGES;
  • select host,user from mysql.user;

img

2、修改配置文件

修改三台數據庫的配置文件

#140數據庫的配置文件

  • vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id=140

img

#141數據庫的配置文件

  • vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id=141

#142數據庫的配置文件

  • vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id=142

3、查看master狀態

  • SHOW MASTER STATUS;

img

4、配置slave

#登陸在140,141據庫,在slave上鏈接master

  • change master to master_host='172.8.10.140',master_user='siger',master_password='xxxxxx',master_log_file='mysql-bin.000004',master_log_pos=77461339;

#參數配置

master_host:主節點mysql的IP地址

master_user:主節點mysql登陸用戶的用戶名

master_password:主節點mysql登陸用戶的密碼

master_log_file:主節點mysql的日志文件指定

master_log_pos:主節點mysql的Ppsition的ID

img

5、啟動從服務

#在141數據庫上

  • start slave;

#在142數據庫上

  • start slave;

6、查看slave狀態

#在3307數據庫上

  • show slave status\G

img

#在3308數據庫上

  • show slave status\G

img

7、主從測試

#在master建立數據庫siger

  • create database siger;
  • use siger;
  • create table slave_test(id int(6),name varchar(10))
  • insert into slave_test values(000001,'weiyang');
  • FLUSH PRIVILEGES;
  • show tables;

img

#在141、142從節點上查看

img


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM