mysql主从复制-使用心得

文章目录

  • 前言
  • 环境
  • 配置
    • 主库
    • 从库
  • STATEMENT
  • binlog
  • gtid
  • log-error
  • DistSQL
  • 总结


前言

mysql 主从复制使用感受,遇到一些问题的整理,也总结了一些排查问题技巧。


环境

mysql5.7

配置

附:千万级数据快速插入配置可以参考:mysql千万数据快速插入-实战

主库

主要配置

server_id=16523
log_bin=/laday/mysql/logbin/log_bin
# 这里为啥使用 STATEMENT 后面细讲
binlog_format=STATEMENT
# 日志过期时间天数
expire_logs_days=7
log-error=/laday/mysql/log/err.log
# 是否开启慢查询日志收集, 1为启用, 0为禁用
slow_query_log=1
# 慢查询日志文件
slow_query_log_file=/laday/mysql/log/slow.log
# 记录慢查询超时时间, 秒
long_query_time=20
tmpdir=/laday/mysql_tmpdir

# 开启 gtid, 自动寻找同步点
gtid_mode=ON
enforce_gtid_consistency=ON

# 数据库同步白名单(库级)
binlog-do-db=laday

# 数据库同步黑名单
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys

从库

主要配置

# mysql 启动时是否忽略启动slave,  ON=mysql 启动后slave不会自动启动,需要手动启动。
skip_slave_start=ON
# 忽略同步过程出现所有错误,根据实际情况制定
slave-skip-errors=all
# 开启 gtid
gtid_mode=ON
enforce_gtid_consistency=ON

# 同步表白名单 (表级)
replicate_wild_do_table=laday.table_1%
replicate_wild_do_table=laday.table_2%

# 同步表黑名单
replicate_wild_ignore_table=laday.%
replicate_wild_ignore_table=mysql.%
replicate_wild_ignore_table=information_schema.%
replicate_wild_ignore_table=performance_schema.%
replicate_wild_ignore_table=sys.%

STATEMENT

binlog_format=STATEMENT

最开始是使用 ROW 的,但是后面发现从库同步任务一直卡,发现是主库使用了 DELETE 语句删除一个千万级的大表,导致从库是一行一行删除,也就卡si了。
在这里插入图片描述
后面换成:MIXED
还随手测试了一下 delete from 【表名】 看着正常。后面还是卡了, 原来主库有一个语句 delete from 【表名】 where … sysdate() … 删除大表,导致从库又卡了。罪魁祸首->sysdate

最终我决定使用: STATEMENT

binlog

有时候主从复制会有延迟的情况,可以通过 show slave status 查看此刻进度,包括 pos 和 file。

show slave status

在这里插入图片描述
然后带入 pos 和 file 在主库执行如下语句:
在这里插入图片描述
使用SQL查询看不出执行时间,可以使用 mysqlbinlog(在mysql 安装目录里面) 命令:

./bin/mysqlbinlog --start-datetime='2023-11-02 20:00:00' --stop-datetime='2023-11-02 23:00:00'  ./logbin/log_bin.000613 > /home/xyz/temp001.sql

./bin/mysqlbinlog --start-position=314712945   --stop-position=315156780  ./logbin/log_bin.000973 > /home/xyz/temp002.sql

在这里插入图片描述

gtid

开启 gtid,方便从库自动寻找续点。
初始化如下:

CHANGE MASTER TO MASTER_HOST='10.111.xxx.xxx',MASTER_PORT=3308,MASTER_USER='账号', MASTER_PASSWORD='密码',master_auto_position=1;

也可以手动定义同步点,如下:

CHANGE MASTER TO MASTER_HOST='10.111.xxx.xxx',MASTER_PORT=3308,MASTER_USER='账号', MASTER_PASSWORD='密码',master_auto_position=0,
master_log_file='log_bin.000694',master_log_pos=194;

log-error

对于很多问题,错误日志会有很多信息提示,不要错过。

DistSQL

DistSQL(Distributed SQL)是 Apache ShardingSphere 特有的操作语言,读写分离用到,在此顺便记录一下。
常用语句:

-- 查询存储单元信息
SHOW STORAGE UNITS;

-- 查询所有分片规则
SHOW SHARDING TABLE RULES FROM pddyjc;
-- 查询指定逻辑表的分片规则
SHOW SHARDING TABLE RULE  表 FROM  库;
-- 删除指定逻辑表的分片规则
DROP SHARDING TABLE RULE  表;

-- 查询指定数据库中具有广播规则的表
SHOW BROADCAST TABLE RULES FROM  库;
-- 删除指定数据库中具有广播规则的表
DROP BROADCAST TABLE RULE  表  FROM 库;
-- 将 test_br 添加到广播规则中
CREATE BROADCAST TABLE RULE  test_br ;

-- 设置单表默认存储单元
SET  DEFAULT single table storage unit = ds_0;

-- 创建规则(分库)
-- test_a 以 sjsj 字段分库。
-- allow-range-query-with-inline-sharding=true , 支持 between 等区间关键字跨库查询。
CREATE SHARDING TABLE RULE test_a(
DATANODES("ds_${0..1}.test_a"),
DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=sjsj,
SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${ sjsj >='2023-10'?0:1 }","allow-range-query-with-inline-sharding"="true"))))
);

-- 创建规则(分表)
-- testtable 以 zzbm 字段分表。
ALTER SHARDING TABLE RULE testtable(
DATANODES("ds_0.testtable_${['0501','0502','0503','0504','0505','0506','0507','0508','0509','0510','0511','0512','0513','0514','0515','0516','0522','0581']}"),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=zzbm,
SHARDING_ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="iamskh_ydkh_${ zzbm }"))))
);

-- 同时有分库分表
-- 伪语法
CREATE SHARDING TABLE RULE t_order_item (
DATANODES("ds_${0..1}.t_order_item_${0..1}"),
DATABASE_STRATEGY(TYPE="standard",SHARDING_COLUMN=user_id,SHARDING_
ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="ds_${user_id % 2}
")))),
TABLE_STRATEGY(TYPE="standard",SHARDING_COLUMN=order_id,SHARDING_
ALGORITHM(TYPE(NAME="inline",PROPERTIES("algorithm-expression"="t_order_item_$
{order_id % 2}"))))
);


-- 导出当前配置信息
EXPORT DATABASE CONFIGURATION;

总结

实践是检验真理的唯一标准


—————— 但行好事莫问前程,你若盛开蝴蝶自来

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/137418.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据分析面试题1

1.右表为一组数据,尝试进行简单分析,并给出结论(使用公式和图表辅助) ①理解数据 userid:用户id神兽印记消耗数量 ②数据清洗 冻结首行,将列标题的英文字段转换成汉字字段检查是否有重复项:…

STM32F407: CMSIS-DSP库的移植(基于源码)

上一篇:STM32F407: CMSIS-DSP库的移植(基于库文件)-CSDN博客 1. 拷贝源码 仿照官方源码目录,新建一个source目录:\Drivers\CMSIS\DSP\Source 将所有源文件拷贝过来,如下: 然后在每个目录下新建一个总的c文件&#x…

CSS花边001:无衬线字体和有衬线字体

网站中我们看到过很多字体,样子各有千秋。通常针对结构,区分为有衬字体(serif) 和无衬字体(sans-serif)。今天我们聊一下这个话题。 什么是有衬字体,什么是无衬字体? 衬线字体&…

sqli-labs关卡16(基于post提交的双引号加括号闭合的布尔盲注)通关思路

文章目录 前言一、回顾上一关知识点二、靶场第十六关通关思路1、判断注入点2、猜数据库长度3、猜数据库名字4、猜表名长度5、猜表名名字6、猜列名长度7、猜列名名字8、猜数据长度9、猜数据名字 总结 前言 此文章只用于学习和反思巩固sql注入知识,禁止用于做非法攻击…

已解决:java.net.BindException: 地址已在使用

解决zookeeper报错:java.net.BindException: 地址已在使用,是因为端口被占用。显示Starting zookeeper ... STARTED,jps没有QuorumPeerMain进程。 问题截图: 看似Starting zookeeper ... STARTED,实则集群并没有启动…

逻辑回归-癌症病预测与不均衡样本评估

1.注册相关库(在命令行输入) pip install scikit-learn pip install pandas pip install numpy 2.导入相关库 import pandas as pd import numpy as np from sklearn.metrics import classification_report from sklearn.model_selection import train_test_split…

【每日一题】—— B. Deja Vu(Codeforces Round 907 (Div. 2))(暴力枚举、队列)

🌏博客主页:PH_modest的博客主页 🚩当前专栏:每日一题 💌其他专栏: 🔴 每日反刍 🟡 C跬步积累 🟢 C语言跬步积累 🌈座右铭:广积粮,缓称…

“苹果定律”失效,2023是VR的劫点还是拐点?

因为Pico裁员的事情,VR行业又被讨论了。 Pico于2021年9月被字节跳动收购,当时是出货量排名全球第三的VR 头显生产商。 此前曾有国际机构预测,2023年随着Meta和Pico的硬件更新,苹果Vision Pro的推出,三星电子重新回归VR…

黑马程序员微服务Docker实用篇

Docker实用篇 0.学习目标 1.初识Docker 1.1.什么是Docker 微服务虽然具备各种各样的优势,但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中,依赖的组件非常多,不同组件之间部署时往往会产生一些冲突。在数百上千台服务中重复部署…

初探地理编码(2023.11.12)

地理编码相识 2023.11.12 引言1、地理编码简介2、地理编码API和服务(解决方案供应商 / 厂商)2.1 高德2.2 百度2.3 超图2.4 天地图2.5 ArcGIS2.6 MapBox2.7 Cesium2.8 MapLocation 3、python实例3.1 pip安装依赖库(python 3.6)3.2 …

git分支与tag标签的介绍与使用)

git分支与tag标签的介绍与使用 一.什么是分支与标签1.2.开发环境分层 二git分支介绍2.1分支操作2.2.IDEA中操作分支 三、Git标签的讲解3.1.GitBashHere操作标签3.2. IDEA中操作标签 一.什么是分支与标签 分支(Branches): 功能开发&#xff…

Jenkins简介及Docker Compose部署

Jenkins是一个开源的自动化服务器,用于自动化构建、测试和部署软件项目。它提供了丰富的插件生态系统,支持各种编程语言和工具,使得软件开发流程更加高效和可靠。在本文中,我们将介绍Jenkins的基本概念,并展示如何使用…

PyCharm 安装库时显示连接超时

在setting->python Interpreter 中用“” 安装库时,出现一个弹窗,提示信息如下: Error updating package list: Connect timed out 通过查阅资料,发现是镜像源的问题,具体的解决方案如下: 1. 更新一下…

初始MySQL(四)(查询加强练习,多表查询(未完))

目录 查询加强 where加强 order by加强 group by 分页查询 总结 多表查询(重点) 笛卡尔集及其过滤 自连接 子查询 #先创建三张表 #第一张表 CREATE TABLE dept(deptno MEDIUMINT NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT ,loc VARCHAR(13) NOT NULL D…

v-bind和v-model

目录 前言 v-bind 作用 语法格式 编译原理 简写 v-model 作用 使用方法 v-bind和v-model的区别和联系 前言 本文我们来了解一下模板语法之指令语法中的v-bind和v-model v-bind 作用 v-bind可以让html标签的某个属性的值产生动态的效果 语法格式 <html标签 v-bin…

菜单栏管理软件 Bartender 3 mac中文版功能介绍

​Bartender 3 mac是一款菜单栏管理软件&#xff0c;该软件可以将指定的程序图标隐藏起来&#xff0c;需要时呼出即可。 Bartender 3 mac功能介绍 Bartender 3完全支持macOS Sierra和High Sierra。 更新了macOS High Sierra的用户界面 酒吧现在显示在菜单栏中&#xff0c;使其…

Anolis 8.6 安装 Drawio

Anolis 8.6 安装 Drawio 22.1.0 一.RPM版&#xff08;不建议&#xff09;二.WAR 包部署 一.RPM版&#xff08;不建议&#xff09; Draw RPM 包下载链接 RPM 包直接基于Linux图形化能力部署&#xff0c;服务器类型的Linux系统启动RPM包安装的Draw可能比较复杂 系统版本 ## 1.…

如何配置Apple推送证书 push证书

转载&#xff1a;如何配置Apple推送证书 push证书 想要制作push证书&#xff0c;就需要使用快捷工具appuploader工具制 作证书&#xff0c;然后使用Apple的推送功能配置push证书&#xff0c;就可以得到了。PS&#xff1a;push没有描述文件&#xff0c;所以不 要问推送选择哪…

springboot苍穹外卖实战:十、缓存菜品(手动用redisTemplate实现缓存逻辑)+缓存套餐(Spring cache实现)

缓存菜品 缺点 缓存和数据库的数据一致性通常解决方案&#xff1a;延时双删、异步更新缓存、分布式锁。 该项目对于缓存菜品的处理较为简单&#xff0c;实际可以用管道技术提高redis的操作效率、同时cache自身有注解提供使用。 功能设计与缓存设计 建议这部分去看下原视频&…

登顶request模块

华子目录 Requests介绍安装requests模块常用方法常用属性实例引入各种请求方式基于get请求带参数的get请求推荐写法 基于post请求添加headers信息content获取二进制数据bytes类型获取json数据第一种方式第二种方式 response响应状态码判断 高级操作会话维持通过cookie维持会话通…