前言:

在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同时分享下自己的经验和方法。

1.主从复制简介及原理

主从复制(也称 AB 复制)是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器既可充当主机,也可充当从机。MySQL默认采用异步复制方式。

主从复制的过程及原理可以总结如下:

master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中。

slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件。

同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致。

2.基于二进制文件位置配置主从复制

基于二进制文件位置的主从复制又可以称为传统复制,即从服务器依赖于主服务器的binlog文件位置,当主库发生数据变更时,binlog pos位点会增长,从库会感应到变化来完成同步。

配置主从复制,我们首先要准备至少两台MySQL实例,一台充当主服务器、一台充当从服务器。由于主从复制依赖于binlog,所以主库必须开启binlog,且主从要配置不同的server_id,下面具体展示下配置过程:

2.1 确认主从库配置参数

MySQL主从服务器建议有如下配置,可以先确认下,如果未配置,则需要修改配置文件然后重启。

# 主库参数配置 要有以下参数

vim /etc/my.cnf

[mysqld]

log-bin = binlog //启用二进制日志

server-id = 137 //服务器唯一ID,默认值是1,一般设置为IP地址的最后一段数字

binlog_format = row //bilog设置为row模式 防止复制出错

# 从库建议配置以下参数

vim /etc/my.cnf

[mysqld]

relay-log = relay-bin

server-id = 138

2.2 确定主库二进制位置,创建同步账号

若主从库都是刚刚初始化完成,且主库无操作时,从库可不用同步主库的数据,直接确定主库的binlog位置即可。

# 查看主库binlog文件位置

show master status;

# 主库创建同步账号

create user 'repl'@'%' identified by '123456';

grant replication slave on *.* to 'repl'@'%';

若主库已经运行了一段时间,有业务数据在,而从库刚刚初始化完成,此时则需要备份主库的数据,然后导入从库,使得主从数据一致。

# 主库创建同步账号

create user 'repl'@'%' identified by '123456';

grant replication slave on *.* to 'repl'@'%';

# 全备主库数据

mysqldump -uroot -pxxxx -A -R -E --single-transaction --master-data=2 > all_db.sql

# 从库端恢复

mysql -uroot -pxxxx < all_db.sql

# 从备份文件中可以找到主库的binlog位置

2.3 进入从库,开启主从复制

找到主库二进制文件位置且完成主从数据一致后,我们就可以正式开启主从复制了。

# 进入从库MySQL命令行 执行change master语句连接主库

# 二进制文件名及pos位置由上面步骤获得

CHANGE MASTER TO MASTER_HOST='MySQL主服务器IP地址',

MASTER_PORT=3306,

MASTER_USER='repl',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='binlog.000002',

MASTER_LOG_POS=154;

# 开启主从复制 并坚持状态

start slave;

show slave status \G //查看slave状态 确保Slave_IO_Running: Yes Slave_SQL_Running: Yes

3.基于GTID的主从复制

GTID是MySQL 5.6的新特性,其全称是Global Transaction Identifier,可简化MySQL的主从切换以及Failover。GTID用于在binlog中唯一标识一个事务。当事务提交时,MySQL Server在写binlog的时候,会先写一个特殊的Binlog Event,类型为GTID_Event,指定下一个事务的GTID,然后再写事务的Binlog。

在基于GTID的复制中,首先从服务器会告诉主服务器已经在从服务器执行完了哪些事务的GTID值,然后主库会有把所有没有在从库上执行的事务,发送到从库上进行执行,并且使用GTID的复制可以保证同一个事务只在指定的从库上执行一次,这样可以避免由于偏移量的问题造成数据不一致。也就是说,无论是级联情况,还是一主多从的情况,都可以通过GTID自动找位置,而无需像之前那样通过File_name和File_position找主库binlog位置了。

基于GTID的主从复制与上面基于二进制文件位置的主从复制搭建步骤类似,同样简单展示下搭建过程:

3.1 确认主从库配置,开启GTID

# 主库参数配置 要有以下参数

vim /etc/my.cnf

[mysqld]

server-id = 137

log-bin = binlog

binlog_format = row

gtid-mode = ON //开启gtid模式

enforce-gtid-consistency = ON //强制gtid一致性,用于保证启动gitd后事务的安全

# 从库建议配置以下参数

vim /etc/my.cnf

[mysqld]

server-id = 138

log-bin = binlog

binlog_format = row

gtid-mode = ON

enforce-gtid-consistency = ON

relay-log = relay-bin

3.2 创建同步账号,保持主从库数据一致

若主库刚初始化完成或者主库端保留有全部二进制文件,则从库无需手动同步数据。否则需要手动同步数据使得主从一致。

# 主库创建同步账号

create user 'repl'@'%' identified by '123456';

grant replication slave on *.* to 'repl'@'%';

# 若主库刚初始化或保留有完整二进制文件 则无需执行下面步骤

# 全备主库数据

mysqldump -uroot -pxxxx -A -R -E --single-transaction > all_db.sql

# 从库端恢复

mysql -uroot -pxxxx < all_db.sql

3.3 进入从库,开启主从复制

# 进入从库MySQL命令行 执行change master语句连接主库

CHANGE MASTER TO MASTER_HOST='MySQL主服务器IP地址',

MASTER_PORT=3306,

MASTER_USER='repl',

MASTER_PASSWORD='123456',

MASTER_AUTO_POSITION = 1;

# 开启主从复制 并坚持状态

start slave;

show slave status \G

4.一些经验及建议

在日常学习及工作过程中,主从复制方面也积累了一些经验,下面简单分享几点,希望各位少踩坑。

主从两端数据库版本尽量保持一致。

主从库参数建议相同,比如字符集、sql_mode这类参数要设置一样。

从库服务器性能不能过于落后主库,以免因服务器性能产生主从延迟。

所有表强制拥有主键,因为无主键表同步到从库极易产生主从延迟。

建议从库设为read only,以防人为误操作从库数据。

监控主从延迟及状态,及时解决同步中断或延迟问题。

总结:

本文介绍了主从复制的原理及搭建过程,其实关于主从复制的内容还有很多,需要不断的学习。这里推荐大家使用GTID模式来搭建主从复制,关于后面分享的几点经验,也是自己日常积累的,希望对你有所帮助。写作不易,觉得还不错的话,请顺手转发分享下哦。

mysql主从复制 主键 id_MySQL主从复制详解相关推荐

  1. 2005数据库导入mysql没有主键_mysql数据库详解(续二)

    mysql数据库登陆问题解决汇总 首先需要说明一下,MYSQL数据库登陆的方式,通常就是本地登陆(localhost)和远程登陆,那么这里在深入地了解一部localhost和127.0.0.1的区别是 ...

  2. 主键由数据库mysql 映射native_Hibernate主键生成策略详解

    转载自:http://blog.csdn.net/wanghuan203/article/details/7562395 hibernate提供的主键生成策略,使我们可以在实体类的映射xml文件中设定 ...

  3. mysql 主键溢出检查_详解MySQL 表中非主键列溢出情况监控

    今天,又掉坑了. 之前踩到过MySQL主键溢出的情况,通过prometheus监控起来了. 这次遇到的坑,更加的隐蔽. 是一个log表里面的一个int signed类型的列写满了.快速的解决方法当然还 ...

  4. 雪花算法及分布式主键生成策略详解

    目前雪花算法常应用于分布式环境下作为分布式主键的首选,本文详细介绍下雪花算法及相关分布式主键的生成策略. 如下内容已本文PPT讲解内容为基础. 本次内容共包括4部分:分布式主键生成策略,雪花算法详解, ...

  5. Mybatis-Plus主键生成策略详解

    文章目录 前言 一.官网 二.主键注解@TableId说明 1.源码 2.作用 3.使用 三.主键生成策略-IdType枚举说明 1.源码 2.说明 3.全局设置 三.ID生成器介绍 1.Identi ...

  6. mysql 添加外键 完整_详解mysql添加外键的方法

    本文主要向大家介绍了mysql添加外键的方法,通过具体的实例让大家了解,希望对大家学习mysql有所帮助. 为已经添加好的数据表添加外键: 语法:alter table 表名 add constrai ...

  7. hibernate 7大主键生成策略详解与对象状态

    一:代理主键_主键自增 1.identity 1.采用底层数据库本身提供的主键生成标识符,条件是数据库支持自动增长数据类型 2.该生成器要求在数据库中把主键定义成为自增长类型.适用于代理主键 2.in ...

  8. oracle 主键_Oracle约束详解

    一 约束的定义 约束是强加在表上的规则或条件.确保数据库满足业务规则.保证数据的完整性.当对表进行DML或DDL操作时,如果此操作会造成表中的数据违反约束条件或规则的话,系统就会拒绝执行这个操作.约束 ...

  9. MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!

    MySQL 5.7主从复制从零开始设置及全面详解--实现多线程并行同步,解决主从复制延迟问题! 参考文章: (1)MySQL 5.7主从复制从零开始设置及全面详解--实现多线程并行同步,解决主从复制延 ...

最新文章

  1. Android NDK开发之旅31 FFmpeg音频解码
  2. 浏览器下的CSS透明度
  3. (计算机组成原理)第六章总线-第三节:总线操作和定时(同步定时和异步定时)
  4. Spring Boot 官方文档学习(一)入门及使用
  5. MFC中SetTimer函数
  6. Phaserjs基础教程第八节:Weapon对象
  7. Js实现实时显示系统时间(获取当前时间并显示)
  8. 多次请求后tomcat网页假死
  9. 到底什么是云计算?云计算能干什么?
  10. 11 Animation动画
  11. 固态硬盘坏了 安装到里面的软件无法卸载也无法安装
  12. 51虚拟安卓系统v1.1.0.6-安卓端的虚拟机(支持root,xposed框架)
  13. 你必须知道alexa排名的重要性
  14. 分类之混淆矩阵(Confusion Matrix)
  15. 谈谈我的信息安全学习经历
  16. 优惠券通用测试要点 V1.1
  17. 计算机科学与技术理工英语4,2021年7月国开(中央电大)本科《理工英语4》期末考试试题及答案...
  18. 个人学习之C++ 头文件.h与.cpp
  19. 岭南师范学院专插本计算机,2019年岭南师范学院专插本招生专业
  20. mysql timestamp 类型_MySQL timestamp类型

热门文章

  1. 学生邮箱激活IDEA、pycharm
  2. 用MATLAB常见问题,Matlab常见问题集
  3. 细说android广播机制(java)
  4. 我的世界最佳java_我的世界java版20W45A快照下载_我的世界java版20W45A最新快照版官方下载 v1.19.20.106651-菜鸟下载...
  5. 在校外如何安全访问校园内网资源?快解析内网穿透
  6. vue遇到ie兼容问题如何处理_详解vue 兼容IE报错解决方案
  7. LayoutInflater源码分析
  8. 评委征集|关于征集湖南省创新创业大赛评委征集
  9. 【调剂】985华东师范大学数据科学与工程学院校企联合非全日制专硕调剂
  10. 股市是合法赌场 黄金是最大泡沫