返回顶部
首页 > 资讯 > 数据库 >mysql中复制原理与实践应用的示例分析
  • 401
分享到

mysql中复制原理与实践应用的示例分析

2024-04-02 19:04:59 401人浏览 八月长安
摘要

这篇文章主要介绍了Mysql中复制原理与实践应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。复制功能是将一个mysql数据库上的

这篇文章主要介绍了Mysql中复制原理与实践应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

复制功能是将一个mysql数据库上的数据复到一个或多个mysql数据库上。

复制的原理:在主服务器上执行的所有DDL和DML语句都会被记录到二进制日志中,这些日志由连接到它的从服务器获取,并复制到从库,并保存为中继日志,

这个过程由一个称为 io线程 的线程负责,还有一个称为 SQL线程 的则按顺序执行中继日志中的语句。

复制有多种拓扑形式:

1、传统复制,一主多从,一个主服务器多个从服务器。

2、链式复制,一台服务器从主库复制,而另一台服务器又从这台复制,中间服务器又叫中继主库。

3、主主复制,两个主库互相接受写入和复制。

4、多源复制,一个从库,从多个主库复制。

一、复制如何操作

1、在主库上启用二进制日志记录。

2、在主库上创建一个复制用户。

3、在从训上设置唯一的 server_id。

4、从主库中备份数据。

5、在从库上恢复主库备份的数据。

6、执行CHANGE MASTER TO命令。

7、开始复制。

二、具体的操作步骤如下:

1、在 主库 上,启用二进制日志并设置server_id。

#设置server_id
server_id = 1
#开启binlog日志
log-bin = mysql-bin

2、在主库上创建复制用户

create user '用户名'@'%' identified by '密码';
grant replication slave on *.* to '用户名'@'%';

3、在从库上设置server_id

#设置server_id
server_id = 10

4、备份主库上的数据

mysqldump -u root -p --all-databases --routines --events --triggers --single-transaction --master-data > 导出路径

5、在从库上恢复主库导出的数据

mysql -u root -p -f < 主库备份文件.sql

6、在从库上执行 CHANGE MASTER TO 命令

CHANGE MASTER TO 
MASTER_HOST='主库IP',
MASTER_USER='主库复制用户',
MASTER_PASSWord='密码',
MASTER_LOG_FILE='二进制日志名称',
MASTER_LOG_POS=二进制日志位置;

二进制日志名称和二进制日志位置,已经在备份主库文件中包含了,类似如下所示:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=47845;

7、从库上运行 start slave,然后 show slave status\G; 查看复制状态;

三、设置主主复制

假设主库分别是master1和master2。

1、设置master2为只读

set @@global.read_only = on;

2、在master2上创建复制用户,如果存在,则不用创建了

create user '用户名'@'%' identified by '密码';
grant replication slave on *.* to '用户名'@'%';

3、确保master2已开启二进制日志,检查master2上的二进制日志的坐标

show master status;

4、根据第2步的信息,在master1上执行 CHANGE MASTER TO 命令

CHANGE MASTER TO 
MASTER_HOST='MASTER2主机IP',
MASTER_USER='MASTER2复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='二进制日志名称',
MASTER_LOG_POS=二进制日志位置;

5、在master1上开启 slave 模式

start slave;

6、设置master2为可读写

set @@global.read_only = off;

四、设置多源复制

设置 server3 为 server1 和 server2 的从库。

1、设置 server1 和 server2 的二进制日志和server_id,具体操作可参考上面。

2、在 server1 和 server2 上创建复制用户,具体操作可参考上面。

3、在 server3 上设置 server_id。

4、备份 server1 和 server2 的数据。

5、在 server3 上恢复 server1 和 server2 上备份的数据。

6、在 server3 上,将复制存储库从 FILE 改为 TABLE,

stop slave;
set global master_info_repository = 'TABLE';
set global relay_log_info_repository = 'TABLE';

 还需要在配置文件中修改:

[mysqld]
master-info-repository = TABLE
relay-log-info-repository = TABLE

7、在 server3 上,执行 CHANGE MASTER TO 命令,并命名通道名

CHANGE MASTER TO 
MASTER_HOST='server1主机IP',
MASTER_USER='server1复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='server1二进制日志名称',
MASTER_LOG_POS=server1二进制日志位置 FOR CHANNEL 'server1';

CHANGE MASTER TO 
MASTER_HOST='server2主机IP',
MASTER_USER='server2复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='server2二进制日志名称',
MASTER_LOG_POS=server2二进制日志位置 FOR CHANNEL 'server2';

8 、在 server3 上,为每个通道执行 START SLAVE FOR CHANNEL 语句

start slave for channel 'server1';
start slave for channel 'server2';

9、查看同步状态,show slave status\G;

要获取指定通道的从库状态,show slave status for channel '通道名称'\G;

五、设置复制筛选器

可以选择要复制哪些表或数据库,在主库上,可以使用--binlog-do-db 和 --binlog-ignore-db 选项来选择要记录变更的数据库,以控制二进制日志。更好的方法是控制从库。

1、复制指定数据库

CHANGE REPLICATION FILTER REPLICATE_DO_DB = (db1, db2);

2、复制指定表

CHANGE REPLICATION FILTER REPLICATE_DO_TABLE = ('db1.table1');

3、如果想使用通配符来选择表

CHANGE REPLICATION FILTER REPLICATE_WILD_DO_TABLE = ('db1.tb_%');

4、忽略数据库

CHANGE REPLICATION FILTER REPLICATE_IGNORE_DB = (db1, db2);

5、忽略指定表

CHANGE REPLICATION FILTER REPLICATE_IGNORE_TABLE = ('db1.table1');

六、将从库由主从复制切换到链式复制

比如现在服务器A为主库,服务器B和服务器C为从库,复制于服务器A。现在想把服务器C作为服务器B的从库。

1、在服务器C上停止从库运行

stop slave;
show slave status\G;

记录下Relay_Master_Log_File和Exec_Master_Log_Pos的值

2、在服务器B上停止从库运行

stop slave;
show slave status\G;

记录下Relay_Master_Log_File和Exec_Master_Log_Pos的值

3、将服务器B的日志位置与服务器C的进行比较,找出哪一个是服务器A最新同步,通常,服务器C先停止从库运行,服务器B的日志会更靠前。

4、在服务器C上,使用 START SLAVE UNTIL 语句将其同步到服务器B的日志位置:

START SLAVE UNTIL MASTER_LOG_FILE='上一步中服务器B日志名称', MASTER_LOG_POS=上一步中服务器B日志位置;

5、在服务器C上,检查 show slave status 中 Exec_Master_Log_Pos 和 Until_Log_Pos 两者应该相同。

6、在服务器B上,查看主库状态,启动从库。

show master status;
start slave;
show slave status\G;

7、在服务器C上,停止从库运行,执行 CHANGE MASTER TO 命令。

stop slave;
CHANGE MASTER TO
MASTER_HOST='服务器B的IP',
MASTER_USER='服务器B复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='上一步中通过show master status获取日志名称',
MASTER_LOG_POS=上一步中通过show master status获取日志位置;

8、在服务器C上,启动复制并查看状态

start slave;
show slave status\G;

七、将链式复制切换到主从复制

服务器A->服务器B->服务器C,如果想让服务器C直接作为服务器A的从库,该怎么做?

1、在服务器B上,停止从库运行,并记录主库状态

stop slave;
show master status\G;

2、服务器C上,确保从库的延迟已被追上,Relay_Master_Log_File和Exec_Master_Log_Pos应该等于服务器B上主库状态。

一旦延迟被追上,就停止从库的运行。

stop slave;

3、在服务器B上,从 show slave status 中获取服务器A的日志坐标值(Relay_Master_Log_File和Exec_Master_Log_Pos),并启动从库

show slave status\G;
start slave;

4、在服务器C上,停止从库运行,并执行 CHANGE MASTER TO 命令,指向服务器A

stop slave;
CHANGE MASTER TO 
MASTER_HOST='服务器A的IP',
MASTER_USER='服务器A的复制用户',
MASTER_PASSWORD='密码',
MASTER_LOG_FILE='上一步中获取的日志',
MASTER_LOG_POS=上一步中获取的日志位置;

5、在服务器C上,开启从库,并查看状态。

start slave;
show slave status\G;

八、设置延迟复制

为什么需要延迟复制,有可能主库上执行了一条灾难性语句,你必须通过备份中的时间点恢复,如果数据库大小过大,这将导致长时间停机。

为了避免出现这种情况,可以使用一个延迟的从库,如果发生了灾难,并且延迟的从库还没有执行这条灾难性语句,则可以先停止复制,让从库跳过该灾难语句,最后把从库提升为主库。

1、停止从库运行

stop slave;

2、设置延迟时间,以秒为单位

CHANGE MASTER TO MASTER_DELAY = 3600;
start slave;

3、检查从库状态

show slave status\G;

SQL_Delay: 从库延迟于主库的秒数。

SQL_Remaining_Delay:延迟还剩余的秒数,当保持延迟时,这个值是NULL。

Slave_SQL_Running_State:SQL线程的状态

九、设置 GTID 复制

全局事务标识符 GTID 是在程序中创建的唯一标识符,并与主库上提交的每个事务相关联。该标识符是唯一的,不仅在主库上,在其他从库上,它都唯一。

上面描述的所有复制,都需要指明二进制文件和复制起点的位置,如果将一个从库的主库切换到另一个,就必须重新获取二进制文件位置,这会很麻烦。

为了避免,可以使用基于 GTID 的复制,mysql 使用 GTID 自动检测二进制日志的位置。

1、在所有数据库中 my.cnf 中启动 GTID

[mysqld]
gtid_mode = ON
enforce-gtid-consistency = 1
skip_slave_start

2、将主库设置为只读,确保主库与从库数据一致。

set @@global.read_only = on;

3、重新启动所有从库,使 GTID 生效。

4、重新启动主库。

5、在从库上执行 CHANGE MASTER TO 命令来设置 GTID 复制

CHANGE MASTER TO
MASTER_HOST='主库IP',
MASTER_PORT=3306,
MASTER_USER='复制用户',
MASTER_PASSWORD='密码',
MASTER_AUTO_POSITION=1;

6、在所有从库上执行 start slave; 并查看状态。

十、设置半同步复制

默认情况下,复制是异步的,主库不知道写入操作是否到达从库,如果主库与从库间存在延迟,主库崩了,尚未到达从库的那些数据就会丢失。

为了解决这种问题,半同步复制,主库会一直等待,直到至少有一个从库接收到写入的数据。

1、在主库上,安装 rpl_semi_sync_master 插件

install plugin rpl_semi_sync_master SONAME 'semisync_master.so';

windows下请使用如下:

install plugin rpl_semi_sync_master SONAME 'semisync_master.dll';

2、确认插件已激活

select plugin_name, plugin_status from infORMation_schema.plugins where plugin_name like '%semi%';

3、开启半同步复制并调整超时时间

set @@global.rpl_semi_sync_master_enabled=1;
set @@global.rpl_semi_sync_master_timeout=100;

4、在从库上,安装 rpl_semi_sync_slave 插件

install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';

windows下请使用如下:

install plugin rpl_semi_sync_slave SONAME 'semisync_slave.dll';

5、确认插件已激活

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

6、在从库上,启用半同步复制,并重新启动从库IO线程

set global rpl_semi_sync_slave_enabld = 1;
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

7、通过如下方式查看半同步状态

show status like 'rpl_semi_sync_master_clients';

查看以半同步连接到主库的客户端数量

show status like 'rpl_semi_sync_master_status';

主库在异步和半同步复制之间切换,on表示半同步,off表示异步。

感谢你能够认真阅读完这篇文章,希望小编分享的“mysql中复制原理与实践应用的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: mysql中复制原理与实践应用的示例分析

本文链接: https://lsjlt.com/news/55915.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • mysql中复制原理与实践应用的示例分析
    这篇文章主要介绍了mysql中复制原理与实践应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。复制功能是将一个mysql数据库上的...
    99+
    2024-04-02
  • Redis复制原理的示例分析
    这篇文章主要介绍了Redis复制原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前言本文主要介绍Redis复制机制一.配置与实践配置Redis实例分为主节点(ma...
    99+
    2023-06-15
  • MySQL复制应用中继日志的示例分析
    这篇文章主要介绍MySQL复制应用中继日志的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、前言SQL线程应用中继日志,在binlog_format是row格式的时候,是居...
    99+
    2024-04-02
  • MySQL复制以及调优原理的示例分析
    这篇文章主要介绍MySQL复制以及调优原理的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一. 简介MySQL自带复制方案,带来好处有:数据备份。负载均衡。分布式数据。概念介...
    99+
    2024-04-02
  • redis中主从复制原理的的示例分析
    这篇文章将为大家详细讲解有关redis中主从复制原理的的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。1.复制过程从节点执行 slaveof 命令。从节点只是保存...
    99+
    2024-04-02
  • Mysql主从复制,读写分离,分表分库策略与实践的示例分析
    本篇文章给大家分享的是有关Mysql主从复制,读写分离,分表分库策略与实践的示例分析,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、MySQ...
    99+
    2024-04-02
  • MySQL 锁的原理与应用实践
    MySQL 锁的原理与应用实践摘要:MySQL 是一种常用的关系型数据库管理系统,它具有强大的并发处理能力。在多用户同时访问数据库时,为了确保数据的一致性和完整性,MySQL 使用锁机制来控制对共享资源的访问。本文将介绍 MySQL 锁的原...
    99+
    2023-12-21
    MySQL 应用实践
  • mysql中replication复制的示例分析
    这篇文章主要介绍了mysql中replication复制的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 1首先主服务器把数据更改...
    99+
    2024-04-02
  • MySQL 主从复制原理与实践详解
    本文实例讲述了MySQL 主从复制原理与实践。分享给大家供大家参考,具体如下: 简介 MySQL 的主从复制又叫 Replication、AB 复制。至少需要两个 MySQL 服务(可以是同一台机器,也可以是不同机器...
    99+
    2022-05-11
    MySQL 主从复制
  • JavaScript对象特性与实践应用的示例分析
    小编给大家分享一下JavaScript对象特性与实践应用的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!JavaScript 的简单数据类型是数字、字符串、布尔值(true/fal...
    99+
    2024-04-02
  • MySQL主从复制原理解析与最佳实践过程
    目录一、主从复制1、复制的基本原理2、复制的基本原则 二、最佳实践1、ping测试2、主服务器配置3、从服务器配置4、主服务器设置5、从服务器设置6、主从测试7、关闭slave总结一、主从复制 1、复制的基本原理 主要涉...
    99+
    2023-05-16
    MySQL主从复制原理解析 MySQL主从复制 MySQL主从复制实践
  • MySQL中主从复制的原理分析
    今天就跟大家聊聊有关MySQL中主从复制的原理分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。1.1.1 MySQL主从复制介绍MySQL数据库支...
    99+
    2024-04-02
  • JavaScript解析机制与闭包原理的示例分析
    小编给大家分享一下JavaScript解析机制与闭包原理的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!具体如下:js解...
    99+
    2024-04-02
  • mysql中视图原理的示例分析
    小编给大家分享一下mysql中视图原理的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!一、什么是视图视图是指计算机数据库中的视图,是一个虚拟表,其内容由查询定义。同真实的表一样,视...
    99+
    2024-04-02
  • mysql游标的原理与用法实例分析
    本文实例讲述了mysql游标的原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是游标 创建游标 使用游标 首发日期:2018-04-18 什么是游标: 如果你前面看过mysql...
    99+
    2022-05-12
    mysql 游标
  • java异常处理机制原理和应用的示例分析
    这篇文章主要介绍了java异常处理机制原理和应用的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、Java异常简介大家对trycatch可能并不陌生,也都使用的非常...
    99+
    2023-06-29
  • mysql索引原理与用法实例分析
    本文实例讲述了mysql索引原理与用法。分享给大家供大家参考,具体如下: 本文内容: 什么是索引 创建索引 普通索引 唯一索引 全文索引 单列索引 多列索引 ...
    99+
    2022-05-29
    mysql 索引
  • Vue中响应式原理的示例分析
    这篇文章主要介绍了Vue中响应式原理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Vue 嘴显著的特性之一便是响应式系统(reac...
    99+
    2024-04-02
  • Mysql索引实现原理的示例分析
    这篇文章主要为大家展示了“Mysql索引实现原理的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Mysql索引实现原理的示例分析”这篇文章吧。MySQL...
    99+
    2024-04-02
  • MySQL主从复制的原理分析
    本篇文章为大家展示了MySQL主从复制的原理分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。主从复制是怎么实现的呢更新语句会记录 binlog,它是一种逻辑日志。...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作