MySQL集群

  • MySQL复制技术
    • 使用集群的目的是?
    • 什么是MySQL集群?
  • 集群案例
    • 一、集群环境准备
    • 二、一主一从(M-S)手动
      • 2.1 主服务器配置
      • 2.2 从服务器配置
    • 三、一主一从(M-S)自动
      • 3.1 解决实验1的环境
      • 3.2 主服务器配置
      • 3.3 从服务器配置
    • 四、双主双从(MM-SS)
      • 4.1 双主服务器配置
      • 4.2 双从服务器配置

MySQL复制技术

使用集群的目的是?

  • 负载均衡:解决高并发
  • 高可用HA:服务可用性
  • 远程灾备:数据有效性

什么是MySQL集群?

  • MySQL集群是一个无共享的(shared-nothing)、分布式节点架构的存储方案,其目的是提供容错性和高性能。
  • 数据更新使用读已提交隔离级别(read-committedisolation)来保证所有节点数据的一致性,使用两阶段提交机制(two-phasedcommit)保证所有节点都有相同的数据(如果任何一个写操作失败,则更新失败)
  • 无共享的对等节点使得某台服务器上的更新操作在其他服务器上立即可见。传播更新使用一种复杂的通信机制,这一机制专用来提供跨网络的高吞吐量。
  • 通过多个MySQL服务器分配负载,从而最大程序地达到高性能,通过在不同位置存储数据保证高可用性和冗余。


概念

  • 在主库上把数据更改(DDL DML DCL)记录到二进制日志(Binary Log)中
  • 备库I/O线程将主库上的日志复制到自己的中继日志(Relay Log)中
  • 备库SQL线程读取中继日志中的事件,将其重放到备库数据库之上

集群案例

一、集群环境准备

  • 五台全新服务器-互相通信
  • 全新安装MySQL57-分别安装 每一台数据库都有自己独立的编号独一无二
  • 配置域名解析

其中Mycat 为下一个实验的域名解析与本次实验无关

五台服务器分别为:

  • mysql0.sixeleven.com 192.168.100.254
  • mysql1.sixeleven.com 192.168.100.253
  • mysql2.sixeleven.com 192.168.100.252
  • mysql3.sixeleven.com 192.168.100.251
  • mycat 192.168.100.250
  • 域名解析可以使用hosts文件形式,也可以使用DNS解析

mysql0和mysql1 为master

mysql2和mysql3 为slave

#使用Xshell的发送键到所有会话功能
[root@mysql0 ~]# vim /etc/hosts
192.168.100.254 mysql0.sixeleven.com
192.168.100.253 mysql1.sixeleven.com
192.168.100.252 mysql2.sixeleven.com
192.168.100.251 mysql3.sixeleven.com
192.168.100.250 mycat

二、一主一从(M-S)手动

2.1 主服务器配置

master1 192.168.100.254

一、准备数据1(验证主从同步使用)

二、主服务器开启二进制日志

[root@mysql0 ~]# vim /etc/my.cnf
[mysqld]
log_bin
server-id=1                                 #开启二进制文件并标识为 1 号服务器
[root@mysql0 ~]# systemctl restart mysqld   #配置完成后重启服务器并检查是否开启成功

三、创建复制用户

[root@mysql0 ~]# mysql -uroot -p'Pakho@611'
mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Pakho@0403';
#该动作并不是集群中必要的动作,是一次授权行为,该账户仅用于集群同步时使用
#replication:复制
mysql> \q
Bye

四、备份数据库中的数据

[root@mysql0 ~]# mysqldump -p'Pakho@611' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F`-mysql-all.sql

详解参考 MySQL备份

五、将备份文件拷贝至从主服务器

master2 192.168.100.253

[root@mysql0 ~]# scp -r 2021-06-05-mysql-all.sql mysql1.sixeleven.com:/tmp

六、观察二进制日志分割点

[root@mysql1 ~]# vim /tmp/2021-06-05-mysql-all.sql
...22 -- CHANGE MASTER TO MASTER_LOG_FILE='mysql0-bin.000002', MASTER_LOG_POS=154;
...

七、更新主服务器数据(验证主从同步使用)

[root@mysql0 ~]# mysql -uroot -p'Pakho@611'
mysql> insert into master1db.master1tab values (33333);
mysql> insert into master1db.master1tab values (44444);

2.2 从服务器配置

一、测试rep账户是否可用

[root@mysql1 ~]# mysql -urep -p'Pakho@0403' -h mysql0.sixeleven.com  #-h指登陆点

二、启动服务器序号

[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
server-id=2                                 #服务器ID为2号
[root@mysql1 ~]# systemctl restart mysqld
[root@mysql1 ~]# mysql -uroot -p'Pakho@611' #测试服务器是否修改正确,能否正常登陆

三、手动同步数据

mysql> set sql_log_bin=1;                    #暂停日志二进制
mysql> source /tmp/2021-06-05-mysql-all.sql; #读取数据至服务器

四、设置对应主服务器

mysql> change master to master_host='mysql0.sixeleven.com'#改变主服务器-> master_user='rep',                                 #拷贝时所使用的用户-> master_password='Pakho@0403',                      #rep账号的密码-> master_log_file='mysql0-bin.000002',               #从哪儿拷贝,参考备份文件22行-> master_log_pos=154;                                #从第154条记录开始拷贝

五、启动从设备

mysql> start slave;                                       #启动从服务器

六、测试

在主服务器上更新数据,在从服务器上查看,发现数据已同步更新

七、查看启动状态(IO-YES/SQL-YES)

master2 192.168.100.253

mysql> show slave status\G

三、一主一从(M-S)自动

前面步骤与手动基本相同

3.1 解决实验1的环境

192.168.100.253

[root@mysql1 ~]# systemctl stop mysqld
[root@mysql1 ~]# rm -rf /var/lib/mysql/*
[root@mysql1 ~]# systemctl start mysqld
[root@mysql1 ~]# grep password /var/log/mysqld.log
[root@mysql1 ~]# mysqladmin -uroot -p'dyHZF4qllf-H' password 'Pakho@611'

3.2 主服务器配置

192.168.100.254

一、启动二进制日志,服务器ID,GTID

[root@mysql0 ~]# vim /etc/my.cnf
[mysqld]
log_bin
server-id=1                                #基于刚才的两行添加如下配置
gtid_mode=ON                               #GTID开启
enforce_gtid_consistency=1                 #开启自动协商ID
[root@mysql0 ~]# systemctl restart mysqld  #重启以使配置生效

二、授权复制用户rep(同上)

三、备份数据

环境清理 192.168.100.254

[root@mysql0 ~]# rm -rf 2021-06-05-mysql-all.sql  #清除上一实验备份的数据

环境清理 192.168.100.253

[root@mysql1 ~]# rm -rf /tmp/2021-06-05-mysql-all.sql
[root@mysql0 ~]# mysqldump -p'Pakho@611' --all-databases --single-transaction --master-data=2 --flush-logs > `date +%F-%H`-mysql-all.sql
[root@mysql0 ~]# scp -r 2021-06-05-10-mysql-all.sql  mysql1.sixeleven.com:/tmp

四、模拟数据变化

[root@mysql0 ~]# mysql -uroot -p'Pakho@611' -e 'insert into master1db.master1tab values(6666666666666666)'

3.3 从服务器配置

192.168.100.253

一、测试rep用户是否可用

[root@mysql1 ~]# mysql -urep -p'Pakho@0403' -h mysql0.sixeleven.com

二、启动二进制日志,服务器ID,GTID

[root@mysql1 ~]# vim /etc/my.cnf
[mysqld]
log_bin
server-id=2
gtid_mode=ON
enforce_gtid_consistency=1
[root@mysql1 ~]# systemctl restart mysqld

三、手动恢复数据

[root@mysql1 ~]# mysql -uroot -p'Pakho@611'
mysql> set sql_log_bin=0;
mysql> source /tmp/2021-06-05-10-mysql-all.sql

四、设置对应主服务器

mysql> change master to-> master_host='mysql0.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1;                  #自动进行位置记录

五、启动从设备

mysql> start slave;                             #启动从服务器

六、查看启动状态

mysql> show slave status\G

四、双主双从(MM-SS)

4.1 双主服务器配置

前言

  • 前面的实验,主服务器单节点设置,假如主服务器故障会影响全局的写入事件,故设置双主
  • 目前已经设置 mysql0 为 mysql1 的主服务器
  • 只需要设置 mysql1 为 mysql0 的主服务器

设置mysql1 为mysql0的主服务器

一、在 mysql1 上进行授权

192.168.100.253

mysql> grant replication slave,replication client on *.* to 'rep'@'192.168.100.%' identified by 'Pakho@0403';
mysql> flush privileges;
#基于刚才实验的二进制日志以及GTID

二、设置 mysql0 的主服务器

192.168.100.254

[root@mysql0 ~]# mysql -uroot -p'Pakho@611'
mysql> change master to-> master_host='mysql1.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1;               #master和slave自动对应二进制日志的位置
mysql> start slave;                          #启动从服务器
mysql> show slave status\G;


三、测试

测试一:mysql0插入数据,在mysql1上查看

#mysql0
mysql> insert into master1db.master1tab values (7777);

测试二:mysql1上插入数据,在mysql0上查看

#mysql1
mysql> insert into master1db.master1tab values (8888);


双方同步成功,双主设置完成!

4.2 双从服务器配置

一、同步现有数据库

mysql2.sixeleven.com 192.168.100.252
mysql3.sixeleven.com 192.168.100.251

[root@mysql0 ~]# mysqldump -p'Pakho@611' --all-databases --single-transaction --master-data=2 --flush-logs > mmss-mysql-all.sql
[root@mysql0 ~]# scp -r mmss-mysql-all.sql mysql2.sixeleven.com:/tmp
[root@mysql0 ~]# scp -r mmss-mysql-all.sql mysql3.sixeleven.com:/tmp

二、从服务器数据还原

slave

# mysql2
[root@mysql2 ~]# mysql -uroot -p'Pakho@611' </tmp/mmss-mysql-all.sql
# mysql3
[root@mysql3 ~]# mysql -uroot -p'Pakho@611' </tmp/mmss-mysql-all.sql

三、启动从服务器ID,GTID

从服务器没必要开启二进制日志

slave
mysql2 :192.168.100.252

[root@mysql2 ~]# vim /etc/my.cnf
[mysqld]
server-id=3
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE      #将主服务器的信息存在表 更安全
relay-log-info-repository=TABLE   #把中继日志也存在表里 更安全
[root@mysql2 ~]# systemctl restart mysqld

mysql3 :192.168.100.251

[root@mysql3 ~]# vim /etc/my.cnf
[mysqld]
server-id=4
gtid_mode=ON
enforce_gtid_consistency=1
master-info-repository=TABLE
relay-log-info-repository=TABLE
[root@mysql3 ~]# systemctl restart mysqld

四、为从服务器设置主服务器

mysql2 :192.168.100.252

[root@mysql2 ~]# mysql -uroot -p'Pakho@611'
mysql> change master to-> master_host='mysql0.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel 'mysql0.sixeleven.com';  #第一通道
mysql> change master to-> master_host='mysql1.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel 'mysql1.sixeleven.com';  #第二通道
mysql> start slave;
mysql> show slave status\G

mysql3 :192.168.100.251

[root@mysql3 ~]# mysql -uroot -p'Pakho@611'
mysql> change master to-> master_host='mysql0.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel 'mysql0.sixeleven.com';
mysql> change master to-> master_host='mysql1.sixeleven.com',-> master_user='rep',-> master_password='Pakho@0403',-> master_auto_position=1-> for channel 'mysql1.sixeleven.com';
mysql> start slave;
mysql> show slave status\G

五、测试

mysql0 插入数据

[root@mysql0 ~]# mysql -uroot -p'Pakho@611' -e 'insert into master1db.master1tab values (20)';

mysql1 插入数据

[root@mysql1 ~]# mysql -uroot -p'Pakho@611' -e 'insert into master1db.master1tab values (21)';

插入数据后分别进入从服务器查看数据,实验完成!

数据库应用——MySQL集群相关推荐

  1. 热烈庆祝“mysql 集群数据库架构成功”

    坚持了两周,终于在linux下把mysql集群数据库给架起来了!下面简单说明下集群数据库原理 第一:集群数据库分MGM,NDBD,SQL 其中MGM是相当于"中央政府",维持NDB ...

  2. MySQL集群节点宕机,数据库脑裂!如何排障?

    作者介绍 王晶,中国移动DBA,负责"移动云"业务系统的数据库集成架构设计.运维.优化等工作:擅长技术领域MySQL,获Oracle颁发的"MySQL DBA" ...

  3. ABP 框架 数据库底层迁移 Mysql 集群

    技术交流,请加QQ群:538327407 我的各种github 开源项目和代码:https://github.com/linbin524 背景 笔者 目前架构的IOT 项目是使用abp 框架作为后台, ...

  4. php中mysql数据库集群,MySQL集群

    1,将6.0版本的mysql集群软件上传到Linux或是Solaris上,解压 1>,为了方便调用将其改名为mysql,并且放于/usr/local/下 2>,创建连接文件,进入/usr/ ...

  5. 数据库应用——Atlas代理MySQL集群实现读写分离

    Atlas代理MySQL集群实现读写分离 一.Atlas简介和架构 1.1 环境准备 1.2 配置时间服务器 二.主服务器配置 2.1 master节点1的配置 2.2 master节点2的配置 2. ...

  6. 数据库应用——MyCat代理MySQL集群

    MyCat代理MySQL集群 一.MyCat代理MySQL集群 1.1 MyCat概述 1.2 MyCat功能 1.3 MyCat图示 二.Mycat实战详解 2.1 MyCat实战案例 2.1.1 ...

  7. 搭建pxc集群时需要先安装mysql么_完美起航-高可用MySQL数据库之PXC集群

    高可用MySQL数据库之PXC集群 前言 在上一篇文章介绍了时下流行的几种数据库产品后(公众号发送"NewSQL"查看),有不少小伙伴表示对自动集群的数据库感兴趣,特别是Cockr ...

  8. mysql中的gcache.page文件_高可用MySQL数据库之PXC集群

    前言 在上一篇文章介绍了时下流行的几种数据库产品后(公众号发送"NewSQL"查看),有不少小伙伴表示对自动集群的数据库感兴趣,特别是CockroachDB数据库,但是现有的业务使 ...

  9. mysql集群与分布式数据库_Mysql集群与分布式数据库区别

    mysql集群与分布式数据库的区别 简单说,分布式是以缩短单个任务的执行时间来提升效率的,而集群则是通过提高单位时间内执行的任务数来提升效率. 例如: 如果一个任务由10个子任务组成,每个子任务单独执 ...

最新文章

  1. 基于云的CRM系统到底好在哪里?
  2. 7-Zip将一个大文件压缩成多个小的压缩包
  3. 深度学习及AR在移动端打车场景下的应用
  4. (92)如何解决信号高扇出问题,例如复位信号
  5. mac php 停用,Mac_MAC系统 Apple ID 停用的解决办法,  一些MAC用户发现自己的Appl - phpStudy...
  6. 特斯拉车祸最新调查结果公布,“自动驾驶”Autopilot又双叒成主角
  7. 运维监控利器Nagios之:Nagios的日常维护和管理
  8. 电脑集显linux版本,Intel即将推出新的Linux驱动 核显性能最高可提升20%
  9. spark入门_[大数据之Spark]——快速入门
  10. ACM 学习笔记(三) 数学入门
  11. Oracle ~ 索引种类、创建及管理
  12. 【数据压缩】压缩率-图像熵-保真度
  13. python自动登录qq邮箱_python实现自动登录qq邮箱,写邮件并发送
  14. 文章阅读统计php,WordPress博客统计文章阅读次数及访客数并刷访问数
  15. [bzoj4372]烁烁的游戏
  16. php 发送邮箱验证怎么做,PHP 实现 注册等的邮箱验证 (二)—— 使用 PHPMailer 发送邮件...
  17. 四、nginx访问控制
  18. 钱多多软件制作第一天
  19. 快递100快递java_使用快递100 查询链接实现快速查询的示例
  20. Python学习之处理excel一:读取excel以及基本操作

热门文章

  1. App渗透中常见的加密与解密。
  2. Kruskal(克鲁斯卡尔)
  3. ubuntu12.04 快捷键
  4. Python 可视化如何配色?这个工具你值得拥有
  5. Waiting alone
  6. 华为1288v2服务器做系统6,鱼和熊掌可兼得—华为RH1288 V2服务器
  7. 【整理收集】使用当中IE浏览器遇到的兼容性问题
  8. 换个角度看前几天的女孩父亲杀男孩事件 另附一些对当前教育的感想
  9. PDF改背景和字体颜色
  10. uniapp对接腾讯即时通讯TIM 发图片消息问题