文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

掌握 MySQL 数据复制:从 Binlog 到主从同步的最佳实践

2024-11-28 13:21

关注

在本篇文章中,我们将深入探讨 MySQL binlog 的原理、配置以及如何通过 binlog 实现主从同步。无论你是 MySQL 新手,还是希望进一步了解数据库高可用性的开发人员,都可以从本文中获得宝贵的实践经验和理论知识。

2. Binlog

Binlog(Binary Log,二进制日志) 是 MySQL 用来记录所有数据库修改操作的日志文件,是Mysql server层去记录,所以,不管是什么存储引擎进行的数据存储,如果BinLog开启,都会进行记录。

Binlog用途

  1. 数据同步与主从复制:

在 MySQL 主从复制架构中,主服务器将所有的数据库变更操作记录到 binlog 中,从服务器会读取主服务器的 binlog 文件并将其应用到本地数据库,从而实现数据的实时同步。

binlog 是主从复制的核心,通过它,MySQL 可以确保从服务器与主服务器保持数据一致性。

  1. 数据恢复:

Binlog配置

查询Binlog配置命令

show variables like '%log_bin%';
show variables like '%binlog%';

比较重要的配置含义

log_bin -- 默认on 开启 可以对binlog进行关闭
log_bin_basename -- bin文件前缀 默认/var/lib/mysql/mysql-bin
log_bin_index -- bin文件索引 /var/lib/mysql/mysql-bin.index

binlog_cache_size -- binlog日志 事务缓存大小
binlog_encryption -- 内容是否加密 我们的内容为了安全性可能需要加密
binlog_format -- binlog格式
binlog_expire_logs_seconds -- 多久后binlog删除 默认2592000s也就是30天

BinLog格式

STATEMENT: 基于sql语句记录,记录的是语句,后续去执行binLog的执行语句。优点是存储空间小,但在某些情况下可能会出现与主库不一致的情况,比如:

update order set pay_time = now() where id = 1;

大家想想,如果这条语句是11月1号执行的,但是11月3号数据库宕机需要恢复数据,那么pay_time就会有问题。

ROW: 基于行格式记录,binLog记录的是单个行是如何更改的,虽然这种方式会占用更多的存储空间,但能确保主从数据的一致性。比如上面那个语句:

update order set pay_time = 168535465 where @1 = 1;  -- 168535465随便写的,不要纠结这个

MIXED: 混合模式,默认是STATEMENT,在个别场景会切换成ROW模式

BinLog同步机制

BinLog也是先放到内存再同步到磁盘的,这里可以联想下redolog内存与磁盘的方式

show variables like '%binlog_cache_size%'; -- 事务期间用于保存二进制日志更改的内存缓冲区的大小
show variables like '%sync_binlog%'; -- 同步方式

sync_binlog=0,不同步刷新到磁盘,交给操作系统去操作,断电或者操作系统异常,可能导致数据丢失

sync_binlog=1,能保证数据的一致性,每次提交都必须同步到磁盘,但是对性能有影响,默认

sync_binlog=N, N默认是1,最大4294967295,代表我达到N条binLog后,再同步到磁盘,能够灵活的来设置数据的一致性与性能之间的平衡

3. 主从同步

流程图:

图片图片

必要条件:

server-id=xx

或者使用sql语句配置

SET GLOBAL server_id=xx; -- 更改server_id

从库创建流程

CHANGE REPLICATION SOURCE TO
->  SOURCE_HOST='source_host_name', 
->  SOURCE_USER='replication_user_name',
->  SOURCE_PASSWORD='replication_password',
->  SOURCE_LOG_FILE='recorded_log_file_name',
->  SOURCE_LOG_POS=recorded_log_position; --我要从binlog的哪个位置开始同步
start replica; --开启主从同步
SHOW VARIABLES LIKE'%read_only%';
SET GLOBAL super_read_notallow=1; -- super账号也只读
SET GLOBAL read_notallow=1; -- 只读

同步方式

4. 总结

MySQL 的 binlog(二进制日志) 和 主从同步 是确保数据库高可用性、可扩展性和灾难恢复的关键技术。通过 binlog,MySQL 记录了所有数据修改操作,为主从复制提供了数据同步的基础。主服务器的变更通过 binlog 被传递到从服务器,实现了数据的实时同步,从而保证了数据的一致性和容错能力。

在配置 MySQL 主从复制时,理解和正确配置 binlog 是至关重要的。binlog 不仅是数据同步的核心,也是数据库恢复和数据审计的重要工具。通过合适的配置(如设置 log_bin、server-id、read_only 等参数),可以确保主从同步的高效性和可靠性。

此外,虽然 binlog 和主从复制为 MySQL 提供了高可用性和灾难恢复的基础,但在实际使用过程中,仍然需要关注复制延迟、网络带宽、负载均衡等因素的影响。对于复杂的生产环境,建议结合 GTID(全局事务标识符) 和 semi-sync replication(半同步复制) 等技术来进一步增强主从复制的健壮性和一致性。

总的来说,MySQL 的 binlog 和主从同步技术为我们提供了强大的数据复制和恢复能力,是构建高可用数据库架构的基石。在日常使用中,掌握这些技术不仅能帮助我们实现高效的数据同步,还能为系统的扩展性和容错能力提供保障。

来源:Java极客技术内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯