目录

MySQL 主从同步模式

主从同步结构

结构类型

配置一主多从结构

拓扑结构

配置从服务器

测试一主多从的配置

配置主从从结构

拓扑结构

配置主服务器

配置从服务器

测试配置

配置主主结构

拓扑机构

配置主服务器

配置从服务器

验证配置

主从同步复制模式

主从同步复制模式介绍

半同步模式配置

示例配置半同步模式


MySQL 主从同步模式

主从同步结构

结构类型

  • 基本应用

—— 单向复制:一主 <-- 一从

  • 扩展应用

—— 一主多从:从 <-- 主 --> 从

—— 链式复制:主 <-- 从 <-- 从

—— 互为主从:主 <--> 主

配置一主多从结构

拓扑结构

  • 一主多从

配置从服务器

  • 具体要求如下

—— 数据库服务器192.168.233.51配置为主数据库服务器

—— 数据库服务器192.168.233.52配置为从数据库服务器

—— 数据库服务器192.168.233.53配置为从数据库服务器

—— 客户端192.168.233.50测试配置

主机192.168.233.51和主机192.168.233.52的配置见MySQL 主从同步 —— 一主一从_N_jw107的博客-CSDN博客

  • 配置从服务器53

—— 修改配置文件

—— 确保与主服务器数据一致

—— 指定主库信息

—— 启动slave进程

1、启动数据库服务

[root@mysql53 ~]# systemctl start mysqld

[root@mysql53 ~]# netstat -lntup | grep 3306

tcp6       0      0 :::3306                 :::*                    LISTEN      2893/mysqld

[root@mysql53 ~]# systemctl status mysqld

mysql> show databases;

2、配置主配置文件

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

[mysqld]

server_id=53

[root@mysql53 ~]# systemctl restart mysqld

3、确保与主服务器数据一致

①主服务器192.168.233.51做完全备份,并将备份文件拷贝给从服务器192.168.233.53

[root@mysql51 ~]# mysqldump -uroot -p123456 --master-data -B db1 db5 > /root/twodb.sql       //--master-data记录当前备份数据对应的日志信息。

[root@mysql51 ~]# scp /root/twodb.sql root@192.168.233.53:/root/

②从服务器192.168.233.53做完全恢复

[root@mysql53 ~]# mysql -uroot -p123456 < /root/twodb.sql

[root@mysql53 ~]# mysql -uroot -p123456 -e "show databases"       //查看数据库,恢复成功

4、在从服务器192.168.223.53中查看备份文件中的binlog日志信息

[root@mysql51 ~]# grep master51 /root/twodb.sql

CHANGE MASTER TO MASTER_LOG_FILE='master51.000001', MASTER_LOG_POS=3234;

5、在从服务器192.168.233.53上指定主服务器信息

[root@mysql53 ~]# mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.233.51",                  //主库ip地址

-> master_user="repluser",                             //主库授权用户

-> master_password="123456",                     //授权用户密码

-> master_log_file="master51.000001",         //主库日志文件

-> master_log_pos=3234;                               //日志偏移量

mysql> start slave;                   //启动slave进程

mysql> show slave status\G;       //主服务器为192.168.233.51,且Slave_IO_Running和Slave_SQL_Running的状态为Yes,说明主从同步构建成功。

测试一主多从的配置

1、客户端50连接主服务器51访问数据

[root@mysql50 ~]# mysql -h192.168.233.51 -uadmin -p123456

mysql> insert into db1.a values(888);

mysql> insert into db5.a values("alice");

2、在从服务器52、53本机可以查看到相同的数据

主机192.168.233.52:

mysql> select * from db1.a;

mysql> select * from db5.a;

主机192.168.233.53:

mysql> select * from db1.a;

mysql> select * from db5.a;

配置主从从结构

拓扑结构

  • 主从从

将从服务器53还原

[root@mysql53 ~]# cd /var/lib/mysql

[root@mysql53 mysql]# ls

[root@mysql53 mysql]# rm -rf master.info      //删除主库信息

[root@mysql53 mysql]# rm -rf relay-log.info         //删除中继日志信息

[root@mysql53 mysql]# rm -rf mysql53-relay-bin.*       //删除中继日志和索引文件

[root@mysql53 mysql]# systemctl restart mysqld

[root@mysql53 mysql]# mysql -uroot -p123456

mysql> show slave status;         //没有输出从服务器信息,说明配置成功

Empty set (0.00 sec)

mysql> drop database db1;

mysql> drop database db5;

mysql> show databases;         //还原成数据库初始的4个库

配置主服务器

  • 配置主服务器

—— 启用binlog日志

—— 重启数据库服务

—— 用户授权

1、修改配置文件,启动binlog日志

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

[mysqld]

server_id=53

log-bin=master53

2、重启数据库服务

[root@mysql53 ~]# systemctl restart mysqld

3、用户授权

mysql> grant replication slave on *.* to repluser@"%" identified by "123456";

mysql> show master status;        //显示当前的日志名称和偏移量

4、关闭防火墙和SELinux

[root@mysql53 ~]# systemctl stop firewalld

[root@mysql53 ~]# setenforce 0

配置从服务器

  • 配置从服务器54

—— 修改配置文件

—— 用户授权

—— 指定主库信息

—— 启动slave进程

—— ]# vim /etc/my.cnf

[mysqld]

server_id=id号

log-bin=日志名

log_slave_updates        //允许级联复制

]# systemctl restart mysqld

//注:主机192.168.233.54既是从服务器也是主服务器,所以在修改主配置文件的时候也需要启用binlog日志,且必须配置log_slave_updates允许级联复制,否则无法实现主从从结构。

1、修改配置文件

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

[mysqld]

server_id=54

log-bin=master54

log_slave_updates

[root@mysql54 ~]# systemctl restart mysqld

2、用户授权

mysql> grant replication slave on *.* to repluser@"%" identified by "123456";

mysql> show master status;

3、关闭防火墙和SELinux

[root@mysql54 ~]# systemctl stop firewalld

[root@mysql54 ~]# setenforce 0

4、做主机192.168.233.53的从服务器,指定主库信息

[root@mysql54 ~]# mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.233.53",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master53.000001",

-> master_log_pos=441;

mysql> start slave;

mysql> show slave status\G;

//如图所示,确认主服务器IP为192.168.233.53,且Slave_IO_Running和Slave_SQL_Running的状态为Yes,说明主从同步构建成功。

  • 配置从服务器55

—— 修改配置文件

—— 指定主库信息

—— 启动slave进程

1、修改配置文件

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

[mysqld]

server_id=55

[root@mysql55 ~]# systemctl restart mysqld

2、关闭防火墙和SELinux

[root@mysql55 ~]# systemctl stop firewalld

[root@mysql55 ~]# setenforce 0

3、做主机192.168.233.54的从服务器,指定主库信息

[root@mysql55 ~]# mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.233.54",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master54.000001",

-> master_log_pos=441;

mysql> start slave;

mysql> show slave status\G;

//如图所示,确认主服务器IP为192.168.233.54,且Slave_IO_Running和Slave_SQL_Running的状态为Yes,说明主从同步构建成功。

至此主从从模式就配置完毕了,主机53是主服务器,主机54是主机53的从服务器,且是主机55的主服务器,主机55是主机54的从服务器。

测试配置

  • 测试步骤

—— 在主库授权访问数据的连接用户

—— 客户端连接主库,执行与权限匹配的sql操作

—— 授权用户连接第1台从库,可以看到主库的数据

—— 授权用户连接第2台从库,可以看到主库的数据

1、在主库授权访问数据的连接用户

主机192.168.233.53:

[root@mysql53 ~]# mysql -uroot -p123456

mysql> grant all on db1.* to njw@"%" identified by "123456";

2、客户端连接主库,执行与权限匹配的sql操作

主机192.168.233.50:

[root@mysql50 ~]# mysql -h192.168.233.53 -unjw -p123456

mysql> show grants;       //查看当前登录用户的权限

mysql> show databases;         //发现没有db1库

mysql> create database db1;       //我们有db1库的所有权限,所以创建db1库

mysql> create table db1.a(id int);

mysql> insert into db1.a values(100);

3、授权用户连接第1台从库,可以看到主库的数据

[root@mysql54 ~]# mysql -uroot -p123456

mysql> select * from db1.a;        //可以看到和主服务器一样的数据

4、授权用户连接第2台从库,可以看到主库的数据

[root@mysql55 ~]# mysql -uroot -p123456       //可以看到和主服务器一样的数据

mysql> select * from db1.a;

配置主主结构

拓扑机构

  • 把数据库服务器56和57配置为mysql主主结构

—— 数据库服务器56是数据库服务器57的主服务器,也是数据库服务器57的从服务器。

—— 数据库服务器57是数据库服务器56的主服务器,也是数据库服务器56的从服务器。

配置主服务器

  • 配置主服务器

—— 启用binlog日志

—— 重启数据库服务

—— 用户授权

1、配置数据库服务器56(主服务器配置)

1)修改配置文件,启动binlog日志

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

[mysqld]

server_id=56

log-bin=mysql56

2)重启数据库服务

[root@mysql56 ~]# systemctl restart mysqld

3)用户授权

[root@mysql56 ~]# mysql -uroot -p123456

mysql> grant replication slave on *.* to repluser@"%" identified by "123456";

mysql> show master status;

4)关闭防火墙和SELinux

[root@mysql56 ~]# systemctl stop firewalld

[root@mysql56 ~]# setenforce 0

2、配置数据库服务器57(主服务器配置)

1)修改配置文件,启动binlog日志

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

[mysqld]

server_id=57

log-bin=master57

2)重启数据库服务

[root@mysql57 ~]# systemctl restart mysqld

3)用户授权

[root@mysql57 ~]# mysql -uroot -p123456

mysql> grant replication slave on *.* to repluser@"%" identified by "123456";

mysql> show master status;

4)关闭防火墙和SELinux

[root@mysql57 ~]# systemctl stop firewalld

[root@mysql57 ~]# setenforce 0

配置从服务器

  • 配置从服务器

—— 修改配置文件

—— 用户授权

—— 指定主库信息

—— 启动slave进程

1、把服务器57配置成56的从服务器

主机192.168.233.57

1)做主机192.168.233.56的从服务器,指定主库信息

[root@mysql57 ~]# mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.233.56",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master56.000001",

-> master_log_pos=441;

2)启动slave进程,并查看从服务器信息

mysql> start slave;

mysql> show slave status\G;

//如图所示,确认主服务器IP为192.168.233.56,且Slave_IO_Running和Slave_SQL_Running的状态为Yes,说明主从同步构建成功。

2、把服务器56配置成57的从服务器

主机192.168.233.56

1)做主机192.168.233.57的从服务器,指定主库信息

[root@mysql56 ~]# mysql -uroot -p123456

mysql> change master to

-> master_host="192.168.233.57",

-> master_user="repluser",

-> master_password="123456",

-> master_log_file="master57.000001",

-> master_log_pos=441;

2)启动slave进程,并查看从服务器信息

mysql> start slave;

mysql> show slave status\G;

//如图所示,确认主服务器IP为192.168.233.57,且Slave_IO_Running和Slave_SQL_Running的状态为Yes,说明主从同步构建成功。

验证配置

  • 测试步骤

—— 分别在数据库服务器56和57上授权不同的连接访问用户

—— 客户端使用不同的授权用户登陆数据库服务器56和57,执行不同的SQL命令

—— 分别在数据库服务器56和57上查看数据是否同步

1、分别在数据库服务器56和57上授权不同的连接访问用户

1)在数据库服务器56上授权连接用户njwa

mysql> grant all on *.* to njwa@"%" identified by "123456";

2)在数据库服务器57上授权连接用户njwb

mysql> grant all on *.* to njwb@"%" identified by "123456";

2、客户端使用不同的授权用户登陆数据库服务器56和57,执行不同的SQL命令

1)客户端登陆数据库服务器56上,执行SQL命令

[root@mysql50 ~]# mysql -h192.168.233.56 -unjwa -p123456

mysql> create database db56;

mysql> create table db56.mysql56(id int);

mysql> insert into db56.mysql56 values(56);

2)客户端登陆数据库服务器57上,执行SQL命令

[root@mysql50 ~]# mysql -h192.168.233.57 -unjwb -p123456

mysql> create database db57;

mysql> create table db57.mysql57(id int);

mysql> insert into db57.mysql57 values(57);

3、分别在数据库服务器56和57上查看数据是否同步

1)在数据库服务器56上查看数据是否同步

[root@mysql56 ~]# mysql -uroot -p123456

mysql> show databases;

mysql> select * from db56.mysql56;

mysql> select * from db57.mysql57;

2)在数据库服务器57上查看数据是否同步

[root@mysql57 ~]# mysql -uroot -p123456

mysql> show databases;

mysql> select * from db56.mysql56;

mysql> select * from db57.mysql57;

主从同步复制模式

主从同步复制模式介绍

  • 异步复制模式(默认)(Asynchronous replication)

—— 主库执行完一次事务后,立即将结果返给客户端,并不关心从库是否已经接收并处理。

  • 全同步复制模式(Full synchronous replication)

—— 当主库执行完一次事务,且所有从库都执行了该事务后才将结果返回给客户端。

  • 半同步复制模式(Semisynchronous replication)

—— 介于异步复制和全同步复制之间。

—— 主库在执行完一次事务之后,等待至少一个从库接收到,并写到relay log中才将结果返回给客户端。

注:

当我们没有配置主从之间实现数据同步的时候,主服务器和从服务器之间就是异步复制模式。

执行一次事务就是执行一次SQL命令。

异步复制的优点是客户端接收数据的效率会变高;缺点是当主服务器宕机之后,客户端去连接从服务器,从服务器上

可能没有主服务器上的数据。

全同步复制的优点是当主服务器宕机之后,客户端去连接任何一个从服务器,从服务器上的数据和主服务器都是一样的。确保每一个从服务器都有主服务器上的数据。缺点就是如果主服务器和从服务器之间的网络不好,或者从服务器的硬件配置比较低,就会导致从服务器同步数据的时间变长,客户端得到返回结果的时间变长。

半同步模式配置

  • 查看是否允许动态加载模块

—— 默认允许

mysql> show variables like 'have_dynamic_loading';

//注:半同步复制模式是由模块来实现的,想要使用半同步复制模式就必须要加载模块

  • 命令行加载插件

—— 使用数据库管理员root用户访问服务

mysql> install plugin rpl_semi_sync_master

-> SONAME "semisync_master.so";         //主服务器上执行

mysql> install plugin rpl_semi_sync_slave

-> SONAME "semisync_slave.so";           //从服务器上执行

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';     //查看

//注:install plugin是加载插件的命令;rpl_semi_sync_master指定模块类型,主服务器是master,从服务器就是slave;SONAME定义的是模块名;双引号里面放的就是模块。

如果服务器既做主服务器又做从服务器,那么两个模块类型都要加载,即两条命令都要执行。

  • 启用半同步复制

—— 半同步复制默认是关闭的

mysql> set global rpl_semi_sync_master_enabled=1;        //主服务器执行

mysql> set global rpl_semi_sync_slave_enabled=1;           //从服务器执行

mysql> show variables like "rpl_semi_sync_%_enabled";   //查看

//set global就是设置全局

注:加载启用完成后配置就生效了,但是一旦重启服务以上配置就会失效

  • 永久启用半同步复制

—— 修改主配置文件 /etc/my.cnf

—— 在[mysqld]下方添加

//主服务器

plugin-load=rpl_semi_sync_master=semisync_master.so

rpl_semi_sync_master_enabled=1

//从服务器

plugin-load=rpl_semi_sync_slave=semisync_slave.so

rpl_semi_sync_slave_enabled=1

//注:plugin-load是在配置文件中加载模块的选项,plugin-load=后面第一个值指定的是模块类型,第二个值后面是模块名;rpl_semi_sync_slave_enabled=1是启用模块。

  • 是master和slave两种角色时

—— 当服务器既是主服务器又是从服务器时,需同时启用

—— 格式如下:

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl_semi_sync_master_enabled=1

rpl_semi_sync_slave_enabled=1

示例配置半同步模式

—— 服务器192.168.233.56和服务器192.168.233.57是主主结构,所以两种模块都要加载启用

  • 服务器192.168.233.56:

1、命令行加载插件

mysql> install plugin rpl_semi_sync_master

-> SONAME "semisync_master.so";

mysql> install plugin rpl_semi_sync_slave

-> SONAME "semisync_slave.so";

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';

//注:plugin_status的值为ACTIVE时,说明加载成功

2、启用半同步复制

mysql> set global rpl_semi_sync_master_enabled=1;

mysql> set global rpl_semi_sync_slave_enabled=1;

mysql> show variables like "rpl_semi_sync_%_enabled";

//注:Values的值为ON时,说明启用成功

3、永久启用半同步复制

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

[mysqld]

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl_semi_sync_master_enabled=1

rpl_semi_sync_slave_enabled=1

4、重启数据库服务

[root@mysql56 ~]# systemctl restart mysqld

[root@mysql56 ~]# mysql -uroot -p123456 -e 'show variables like "rpl_semi_sync_%_enabled"';

//如图所示,重启服务之后,如果查询Values的值还是ON,说明永久设置成功。

  • 服务器192.168.233.57:

1、命令行加载插件

mysql> install plugin rpl_semi_sync_master

-> SONAME "semisync_master.so";

mysql> install plugin rpl_semi_sync_slave

-> SONAME "semisync_slave.so";

mysql> select plugin_name,plugin_status from information_schema.plugins where plugin_name like '%semi%';

//注:plugin_status的值为ACTIVE时,说明加载成功

2、启用半同步复制

mysql> set global rpl_semi_sync_master_enabled=1;

mysql> set global rpl_semi_sync_slave_enabled=1;

mysql> show variables like "rpl_semi_sync_%_enabled";

//注:Values的值为ON时,说明启用成功

3、永久启用半同步复制

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

[mysqld]

plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

rpl_semi_sync_master_enabled=1

rpl_semi_sync_slave_enabled=1

4、重启数据库服务

[root@mysql57 ~]# systemctl restart mysqld

[root@mysql57 ~]# mysql -uroot -p123456 -e 'show variables like "rpl_semi_sync_%_enabled"';

//如图所示,重启服务之后,如果查询Values的值还是ON,说明永久设置成功。

MySQL 主从同步模式相关推荐

  1. DBA(三):MySQL主从同步、复制模式

    MySQL主从同步 主从同步概述 MySQL主从同步 主从同步介绍 实现数据自动同步的服务结构 主服务器:接受客户端访问连接 从服务器:自动同步主服务器的数据 主从同步的工作原理 主库有1个线程叫du ...

  2. mysql主从同步的三种模式

    mysql 主从同步三种模式:异步复制.半同步复制.全同步复制 今天我们就来看下这三种同步模式的优势和劣势 异步复制 异步复制是mysql 默认的同步方式 在master为slave开通账号密码.ip ...

  3. MySQL主从同步问题集

    http://blog.chinaunix.net/uid-8786588-id-3771613.html 在InnoDB引擎下发现,Mysql的主从热备存在数据不一致的问题,一些数据没有成功同步到备 ...

  4. 基于mysql主从同步的proxy读写分离

    mysql-proxy 简介 MySQL Proxy是一个处于你的client端和MySQL server端之间的简单程序,它可以监测.分析或改变它们的通信.它使用灵活,没有限制,常见的用途包括:负载 ...

  5. mysql 主从同步-读写分离

    主从同步与读写分离测试 一.  实验环境(主从同步) Master                   centos 7.3              192.168.138.13 Slave     ...

  6. mysql主从同步搭建和故障排除

    主从同步的定义:  是存储数据的一种结构模式. 主:被客户端访问的数据库服务器就是主库服务器master 从:连接主库服务器,自动同步主库的所有数据到本机slave 1.什么是mysql主从同步? 当 ...

  7. mysql读写分离6_6\MySQL 主从同步 、 MySQL 读写分离 、 MySQL 性能调优

    day06 一.mysql主从同步 二.数据读写分离 三.MySQL优化 ++++++++++++++++++++++++++++++++ 一.mysql主从同步 1.1 主从同步介绍?从库服务器自动 ...

  8. 部署mysql主从同步

    部署mysql主从同步 一.什么是mysql主从同步 主:正在被客户端访问的数据库服务器,被称作主库服务器. 从:自动同步主库上的数据的数据库服务器,被称作从库服务器. 二.配置mysql主从同步 2 ...

  9. MySQL 主从同步延迟的原因及解决办法

    首页 博客 专栏·视频 下载 论坛 问答 代码 直播 能力认证 高校 会员中心 收藏 动态 消息 创作中心 MySQL 主从同步延迟的原因及解决办法 hao_yunfeng 2018-09-04 23 ...

最新文章

  1. 深入理解 Cache 工作原理
  2. sql join on 多表连接_SQL 多表查询-交叉连接(笛卡尔积)
  3. android ndk 多线程mk,NDK开发之Android.mk文件编写
  4. nginx会话保持值sticky模块
  5. Android中shape的解析
  6. jzoj2941-贿赂【数学期望,dfs】
  7. 字符数组和字符串的小细节
  8. 计组之概述:计算机系统
  9. 【知识图谱系列】基于Random Propagation的深度图神经网络
  10. 实现一个定时任务管理器
  11. 电脑版idm下载器好不好用?
  12. Buckhorn跳羚声卡驱动安装设置方法
  13. 外汇交易:哪个货币对比较好做?
  14. 微信公众号赞赏账户头像在哪里修改?附详细图文教程
  15. 熵(entropy)的定义
  16. 架构师之数字判断-----------------怎么判断一个字符串是个数字
  17. 利用注册表处理计算机故障骤,第七章WINDOWS注册表及其维护-江苏大学.ppt
  18. Translatium for Mac(Google在线翻译工具)
  19. 10万ip网站 服务器,我做电影站如何在半年内实现日IP10万(转载)
  20. ( 题解 )第六届蓝桥杯决赛试题 -- 完美正方形 (线段树 + 深搜)

热门文章

  1. 001----手把手教你制作TouchGFX的工程模板
  2. 微信php第三方登录接口,ThinkPHP实现微信三方登录
  3. 翻译-linux-5.1.2\Documentation\virtual\kvm\api.txt
  4. HDU-1284:钱币兑换问题 推理+动态规划(dp)
  5. hdu 3003-Pupu-快速幂取模
  6. c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)
  7. 软件工程与实践(第3版)课后习题(二)
  8. Scrapy爬虫,养眼图片实战
  9. XSS Game通关教程
  10. 视觉人工智能初识 OpenMMLab