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
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集群搭建(多实例、主从)的更多相关文章
- MySQL集群搭建(2)-主主从模式
		
1 环境准备 上次我们搭建了主备架构,如下所示 这次我们的搭建目标是 具体配置信息 IP 系统 端口 MySQL版本 节点 读写 说明 192.168.41.83 Centos6.8 3306 5.7 ...
 - MySQL集群搭建(6)-双主+keepalived高可用
		
双主 + keepalived 是一个比较简单的 MySQL 高可用架构,适用于中小 MySQL 集群,今天就说说怎么用 keepalived 做 MySQL 的高可用. 1 概述 1.1 keepa ...
 - MySQL集群搭建(5)-MHA高可用架构
		
1 概述 1.1 MHA 简介 MHA - Master High Availability 是由 Perl 实现的一款高可用程序,出现故障时,MHA 以最小的停机时间(通常10-30秒)执行 mas ...
 - MySQL集群搭建方案(PXC)
		
服务器快过期了,清一点库存,把运维这块的知识复习下 为什么要搭MySQL集群 技术层面上,传统的单节点数据库,万一宕机了,就凉凉了.容灾性能差.抗并发能力有限,数据量大的时候查询有瓶颈.学习层面上,作 ...
 - windows+mysql集群搭建-三分钟搞定集群
		
注:本文来源: 陈晓婵 < windows+mysql集群搭建-三分钟搞定集群 > 一:mysql集群搭建教程-基础篇 计算机一级考试系统要用集群,目标是把集群搭建起来,保证一 ...
 - 2-20 MySQL集群搭建实现高可用
		
MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster ...
 - MySQL集群搭建详解
		
概述 MySQL Cluster 是MySQL 适合于分布式计算环境的高实用.可拓展.高性能.高冗余版本,其研发设计的初衷就是要满足许多行业里的最严酷应用要求,这些应用中经常要求数据库运行的可靠性要达 ...
 - MySQL集群搭建(1)-主备搭建
		
数据库在任何业务中都是最重要的环节之一,这就对数据库架构提出的较高的要求.单点数据库永远不应该出现在生产环境,我们已经目睹过太多由于单点.备份缺失造成的损失,所以,搭建高可用 MySQL 集群是非常有 ...
 - Linux MySQL集群搭建之主从复制
		
前期准备 准备两台Linux,一主,一从,具体Linux安装MySQL操作步骤:点我直达 集群搭建 注意事项 一主可以多从 一从只能一主 关闭主从机器的防火墙策略 chkconfig iptables ...
 
随机推荐
- C# 查询所有设备的插拔事件
			
private void test() { //Win32_DeviceChangeEvent Win32_VolumeChangeEvent ManagementEventWatcher watc ...
 - prism 中的 自定义region
			
参考网址: https://blog.csdn.net/weixin_30872499/article/details/98673059 并不是所有控件都可以被用作Region了吗?我们将Gird块的 ...
 - Java常用类之时间类
			
JDK8之前日期时间API 1. java.lang.System类 2. java.util.Date类 3. java.text.SimpleDateFormat类 4. java.util.Ca ...
 - linux备份恢复命令
			
dump 发行版不自带,需要 yum 或 apt 安装.安装时 restore 也会自动安装. 支持分区和增量备份(仅支持分区增量,目录备份不支持增量).(第一次完全备份,第二次及以后只备份增加和修改 ...
 - Go依赖包管理--间接依赖
			
目录 1.indirect含义 1.2 直接依赖未启用 Go module 1.2 直接依赖 go.mod 文件不完整 2.总结 1.indirect含义 在使用 Go module 过程中,随着引入 ...
 - Oracle存储过程锁表
			
存储过程: 解决方法如下: 1:查V$DB_OBJECT_CACHE SELECT * FROM V$DB_OBJECT_CACHE WHERE name='CRM_LASTCHGINFO_DAY' ...
 - golang web源码解析
			
Go的web工作原理 在Go中使用及其简单的代码即可开启一个web服务.如下: //开启web服务 func test(){ http.HandleFunc("/", sayHel ...
 - [考试总结]noip模拟39
			
不写那么多没用的了 开题就发现 \(T4\) 原题, \(T1\) 大水题. 然后发现 \(T4\) 忘了.... 不扯了 打地鼠 大水题,我代码都不想放... 算了,还是放一下吧.. #includ ...
 - Asp.Net 5上传文件 (Core API方式)
			
参考文档 首先在控制器中注入IWebHostEnvironment IWebHostEnvironment提供有关正在运行应用程序的Web托管环境的信息. 属于命名空间Microsoft.AspNet ...
 - 《微服务架构设计模式》读书笔记 | 第8章 外部API模式
			
目录 前言 1. 外部API的设计难题 1.1 FTGO应用程序的服务及客户端 1.2 FTGO移动客户端API的设计难题 1.3 其他类型客户端API的设计难题与特点 2. API Gateway模 ...