2024年Java最新详解MySQL主从复制实战 - 基于GTID的复制,java后端面试题目

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

image

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

2、配置主库服务器

NOTE: 把日志与数据分开是个好习惯, 最好能放到不同的数据分区

enforce_gtid_consistency 强制GTID一致性, 启用后以下命令无法再使用:

1、create table … select …

因为实际上是两个独立事件, 所以只能将其拆分先建立表, 然后再把数据插入到表中。

2、事务内部不能创建临时表create temporary table

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> create temporary table dept(id int);

错误代码: 1787

When @@GLOBAL.ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only,

and require that AUTOCOMMIT = 1. These statements are also not allowed in a function or trigger because functions and triggers are also considered to be multi-statement transactions.

复制代码

上面的错误中提到,当事务是自动提交的,是可以执行的,如下:

同一事务中更新事务表与非事务表(MyISAM)

mysql> CREATE TABLE dept_innodb (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT);

Query OK, 0 rows affected (0.04 sec)

mysql> CREATE TABLE dept_myisam (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT) ENGINE = MyISAM;

Query OK, 0 rows affected (0.03 sec)

mysql> begin;

Query OK, 0 rows affected (0.00 sec)

mysql> insert into dept_innodb(id) value(1);

Query OK, 1 row affected (0.00 sec)

mysql> insert into dept_myisam(id) value(1);

ERROR 1785 (HY000): Statement violates GTID consistency: Updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions,

and never in the same statement as updates to transactional tables.

复制代码

所以建议选择Innodb作为默认的数据库引擎。

log_slave_updates 该选项在MySQL 5.6版本时基于GTID的复制是必须的, 但是其增大了从服务器的IO负载, 而在MySQL 5.7中该选项已经不是必须项。

3、配置从库服务器

master_info_repository 与relay_log_info_repository

在MySQL 5.6.2之前, slave记录的master信息以及slave应用binlog的信息存放在文件中, 即master.info与relay-log.info. 在5.6.2版本之后, 允许记录到table中. 对应的表分别为mysql.slave_master_info与mysql.slave_relay_log_info, 且这两个表均为innodb引擎表.

4、从库数据初始化 - [optional]

先在主库上备份数据

mysqldump --single-transaction --master-data=2 --triggers --routines --all-databases --events -u root -p > backup.sql

复制代码

—master-data=2 该选项将当前服务器的binlog的位置和文件名追加到输出文件中(show master status). 如果为1, 将偏移量拼接到CHANGE MASTER 命令. 如果为2, 输出的偏移量信息将会被注释。

–all-databases 因为基于GTID的复制会记录全部的事务, 所以要构建一个完整的dump这个选项是推荐的

常见错误

当从库导入SQL的时候出现

ERROR 1840 (HY000) at line 24: @@GLOBAL.GTID_PURGED can only be set when @@GLOBAL.GTID_EXECUTED is empty.

复制代码

此时进入从库的MySQL Command Line, 使用reset master即可

最后

作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料


本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

va面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.youkuaiyun.com/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值