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

5、创建mysql系统用户和组

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

*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

*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

*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

*#**初始化**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/

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

# *查看启动进程*

  • ps -aux | grep mysql

#进入tmp目录,查看sock文件

  • cd /tmp

15、*修改密码*

mysql的root用户初始密码是空,所以需要登录mysql进行修改密码,下面以3306为例:

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

#修改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

*17**、外部软件登录数据库*

图1

图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
  • 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

#安装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

#查看安装的mysql服务

  • rpm -qa|grep -i mysql

*在**142****上安装数据库:与上面同样的操作*

4、启动mysql并查看状态

#启动

  • service mysqld start

#查看数据库运行状态

  • service mysqld status

#查看MySQL的进程

  • ps -aux|grep mysql

5、设置开机自启

  • systemctl enable mysqld.service

6、设置初始密码

#查看随机生成的mysql密码

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

#登陆数据库客户端

  • 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;

*在**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;

2、修改配置文件

修改三台数据库的配置文件

#140数据库的配置文件

  • vi /etc/my.cnf

[mysqld]

log-bin=mysql-bin

server-id=140

#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;

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

5、启动从服务

#在141数据库上

  • start slave;

#在142数据库上

  • start slave;

6、查看slave状态

#在3307数据库上

  • show slave status\G

#在3308数据库上

  • show slave status\G

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;

#在141、142从节点上查看

Mysql集群搭建(多实例、主从)的更多相关文章

  1. MySQL集群搭建(2)-主主从模式

    1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...

  2. MySQL集群搭建(6)-双主+keepalived高可用

    双主 + keepalived 是一个比较简单的 MySQL 高可用架构,适用于中小 MySQL 集群,今天就说说怎么用 keepalived 做 MySQL 的高可用. 1 概述 1.1 keepa ...

  3. MySQL集群搭建(5)-MHA高可用架构

    1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...

  4. MySQL集群搭建方案(PXC)

    服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...

  5. windows+mysql集群搭建-三分钟搞定集群

    注:本文来源:  陈晓婵   <  windows+mysql集群搭建-三分钟搞定集群   > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...

  6. 2-20 MySQL集群搭建实现高可用

    MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster ...

  7. MySQL集群搭建详解

    概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达 ...

  8. MySQL集群搭建(1)-主备搭建

    数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...

  9. Linux MySQL集群搭建之主从复制

    前期准备 准备两台Linux,一主,一从,具体Linux安装MySQL操作步骤:点我直达 集群搭建 注意事项 一主可以多从 一从只能一主 关闭主从机器的防火墙策略 chkconfig iptables ...

随机推荐

  1. 面试题:hashcode相等两个类一定相等吗?equals呢?相反呢?

    首先如果hashcode相等的话,这两个类也是不一定相等的,如果是反过来的话(通常情况下,如果两个对象的内容相同,两个对象的hashcode也是相同的) hashcode()和equals()的关系: ...

  2. Struts中整合的强大Ognl学习(一)

    测试使用了一个JavaBean的User,User中的Address单独封装再形成了一个JavaBean: 为了测试静态方法和静态变量调用,写了一个Util方法: 因为测试Ognl功能过多所以直接使用 ...

  3. 刷题-力扣-168. Excel表列名称

    168. Excel表列名称 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/excel-sheet-column-title 著作权 ...

  4. redis内存回收

    1.定时过期expilre expire key TTL 10定时器 主动淘汰 2.惰性过期 被动淘汰 3getCommand expireIfNeed() 设置内存上线 set memory 上线 ...

  5. ES6中class的继承

    extends 子类的继承 super(); 调用父类的构造方法,只能在子类中执行 继承可以让子类获得父类的方法 属性,可以扩充 增加新的方法 属性等 父类(基类)--被继承的类 子类--继承后的类 ...

  6. Promise.resolve( data)与Promise.reject( data )

    Promise.resolve( data)与Promise.reject( data ) 常用来生成已经决议失败或成功的promise实例: 1.Promise.reject(data)不管传递的是 ...

  7. PyQt4制作GUI

    时间:2018-11-30 记录:byzqy 标题:PyQt4入门学习笔记(一) 地址:https://www.cnblogs.com/chuxiuhong/p/5865201.html 标题:PyQ ...

  8. IP掩码的作用

    IP地址&IP掩码==网段,即,与上掩码后相同的IP属于同一网段.

  9. VS Code闪现,巨头纷纷入局的Web IDE缘何崛起?

    我发了,我装的. 就在前几天,微软简短的发布了Visual Studio Code for the Web 的公告,而没过一阵,这则公告就被删除了,现在点经相关内容已经是404状态了.虽然公告的内容已 ...

  10. (4)ElasticSearch在linux环境中搭建集群

    1.概述 一个运行中的Elasticsearch实例称为一个节点(node),而集群是由一个或者多个拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力.当有节点加入集群中或者 ...