mysql学习

查看glibc版本
ldd --version

--mysql启动失败,尝试启动
1 查看错误日志,端口被占用,参数名写错,有不支持的参数
2 通过mysqld启动 mysqld --default-file=my.cnf &
3 mysqld --no-defaults --basedir=/user/local/mysql --datadir=/data/mysql/3306/data/ --user=mysql
4 strace查看mysql启动过程的系统调用情况

查看当前用户
select user();

系统表中注册已加载的组件
rpm包安装的软件默认加载了validate_password
show plugins;
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS;
select * from mysql.component;
show variables like 'validate_password%';

加载validate_password
mysql5.7 
install plugin validate_password soname 'validate_password.so';
vi /etc/my.cnf
plugin-load=validate_password.so

mysql8.0
install component 'file://component_validate_password';

--参数
--查看参数的信息
select * from variables_info limit 1 \G
default_authentication_plugin:默认的密码认证插件
master_info_repository:复制的相关信息保存在文件还是表里(mysql.slave_master_info,mysql.slave_relay_log_info)
gtid_mode=on
enforce_gtid_consistency=on


--错误
--mysql8.0以下的客户端连接mysql8.0报错
Authentication plugin ‘caching_sha2_password‘ cannot be loaded
原因:mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password。
解决方法:
1 升级mysql客户端或驱动
2 将参数default_authentication_plugin设置为mysql_native_password
3 创建用户时指定auth_plugin为mysql_native_password
create user user1@'%' identified with mysql_native_password 'xxxxx';
创建用户不指定密码认证插件,实际上被默认指定

--主从复制
mysql8.0要加 get_master_public_key=1 ,主要是由于复制用户使用新的密码认证插件
change master to  master_host='xxx', master_port=xxx, master_user='xxx', master_password='xxxx', get_master_public_key=1,master_log_file='binlog.000003',master_log_pos=155 for channel 'channel_201_3306';
基于gtid复制
change master to  master_host='xxx', master_port=xxx, master_user='xxx', master_password='xxxx', master_auto_position=1;

 
--数据字典
mysql.slave_master_info  保存连接主库的信息,IO线程读取主库binlog信息(非实时,写入sync_master_info参数个事务后更新)
mysql.slave_relay_log_info  sql线程重放relay_log的位置

--查看binlog事件
show binlog events in 'mysql-bin.000001'; 

--查看全局变量
show global variables like 'gtid_executed';


============================延迟复制============================
暂停SQL线程应用,并不会暂停IO线程接受日志
在主库执行后,要等待若干秒才在备库执行
===============使用场景:
1 应对主库的误操作,比如drop table
delete,update误操作,如果日志格式是ROW,可通过binlog闪回恢复.drop操作binlog只记录原生SQL,无法使用工具恢复
2 查看数据的历史状态
3 人为模拟主从延迟
也可使用flush tables with read lock模拟来模拟延迟
===============开启延迟复制
CHANGE MASTER TO master_host='xxxxx',master_port=xxxx,master_user='xxx',master_password='******',MASTER_LOG_FILE='mysql1_bin.000007', MASTER_LOG_POS=426114256 ,master_delay=28800;
stop slave;
CHANGE MASTER TO master_delay=28800;
start slave;

show slave status\G
SQL_Delay: 28800 ---期望的延迟时间
SQL_Remaining_Delay: 28774 ---需要等待多久才能到达期望延迟时间
Slave_SQL_Running_State: Waiting until MASTER_DELAY seconds after master executed event
===============使用延迟复制恢复主库误删的表
从库开启延迟复制
主库查看删表的binlog位置
show master status;
show binlog events in 'mysql-bin.000003';
pager grep -iB 5 drop
show binlog events in 'mysql-bin.000003';

从库恢复到drop之前的位点
stop slave;
CHANGE MASTER TO master_delay=0;
start slave until master_log_file='xxx',master_log_pos=xxx;

show slave status\G  --确认恢复到指定位置
Master_Log_File=Relay_Master_Log_File
Exec_Master_Log_Pos=Until_Log_Pos
Slave_SQL_Running='No'
导出数据导入到主库

============================主从延迟============================
===============如何分析主从延迟
1 从库服务器的负载情况
top 
iostat -xm 1
2 主从复制状态
show master status;
show slave status\G
对比主位点以及备读取位点
对比备读取位点以及备执行位点
3 主库binlog写入量
===============主从延迟常见原因以及解决方法
1 IO线程存在延迟
网络延迟  --开启slave_compressed_protocol,启用binlog压缩
磁盘IO存在瓶颈  --调整从库双1设置或者关闭binlog
网卡问题
2 sql线程存在延迟
a 主库binlog写入量过大,SQL线程单线程重放
具体体现:
从库磁盘IO无明显瓶颈
relay_master_log_file和exec_master_log_pos不断变化
binlog生成速度快于5分钟一个,主库写入量过大
解决:升级到5.7以上,开启并行复制
b statement格式下的慢SQL
具体体现:
relay_master_log_file和exec_master_log_pos一段时间没变化
解决:设置log_slow_slave_statements,记录从库的慢SQL,优化SQL
c 表上无索引且binlog为row格式
具体体现:
relay_master_log_file和exec_master_log_pos一段时间没变化
表无索引操作时,主库表只会被扫描一次,而row格式下的从库,对于每条记录都会扫描一次
解决
从库临时创建一个索引
将参数slave_rows_search_algorithms设置为INDEX_SCAN,HASH_SCAN
d 大事务
拆分成小事务
e 从库上有查询
消耗系统资源,有锁等待
查询操作阻塞主库的DDL
f 从库上有备份
全局读锁阻塞SQL线程
g 磁盘IO存在瓶颈
===============如何理解seconds_behind_master
根据计算逻辑
1 seconds_behind_master只计算SQL线程的延迟,不计算IO线程的延迟
网络原因,磁盘瓶颈,slave_net_timeout设置过大,导致的binlog未及时发送
2 binlog为statement和row计算逻辑不一样
3 级联复制无法真正反映延迟

主从延迟的监控
8.0之前使用pt-hearteat
8.0使用如下SQL
select case when min_commit_timestamp is null then 0 
       else unix_timestamp(now(6))-unix_timestamp(min_commit_timestamp) end as seconds_behind_master 
  from (select min(APPLYING_TRANSACTION_ORIGINAL_COMMIT_TIMESTAMP) as min_commit_timestamp 
        from performance_schema.replication_applier_status_by_worker 
       where applying_transaction<>'') t;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解 Nginx 的负载均衡与反向代理

深入理解 Nginx 的负载均衡与反向代理 Nginx 是一个高性能的 HTTP 和反向代理服务器&#xff0c;也是一个 IMAP/POP3/SMTP 代理服务器。由于其出色的性能和灵活性&#xff0c;Nginx 已成为现代 web 架构中的重要组成部分&#xff0c;尤其是在处理高并发连接和大规模流量时。在…

找到数组的中间位置-1991-[简单]

力扣 关键点 从题目中总结出公式 sum * 2 nums[i] total从左往右开始尝试&#xff0c;寻找 i 位置满足上面的公式&#xff0c;为什么从左开始&#xff0c;因为题目要求找到最左边的一个用前缀和的概念来解&#xff0c;从左往右尝试i位置的左边所有数之和&#xff0c;右边所有…

基础小白快速入门Python------>模块的作用和意义

模块&#xff0c; 这个词听起来是如此的高大威猛&#xff0c;以至于萌新小白见了瑟瑟发抖&#xff0c;本草履虫见了都直摇头&#xff0c;好像听上去很难的样子&#xff0c;但是但是&#xff0c;年轻人&#xff0c;请听本少年细细讲述&#xff0c;他只是看起来很难&#xff0c;实…

GO-接口

1. 接口 在Go语言中接口&#xff08;interface&#xff09;是一种类型&#xff0c;一种抽象的类型。 interface是一组method的集合&#xff0c;接口做的事情就像是定义一个协议&#xff08;规则&#xff09;&#xff0c;只要一台机器有洗衣服和甩干的功能&#xff0c;我就称它…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用&#xff0c;首先介绍如何安装swagger&#xff0c;测试是否成功&#xff1b;然后列出常用的注释和给出使用例子&#xff1b;最后生成接口文档&#xff0c;并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

C++从零开始的打怪升级之路(day39)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前&#xff0c;我学了一点点C语言还有简单的数据结构&#xff0c;如果有小伙伴想和我一起学习的&#xff0c;可以私信我交流分享学习资料 那么开启正题 今天分享的是关于模板的知识点 1.非类型模板参数 模板参数分为…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实&#xff0c;它只是根据上文&#xff0c;猜下一个词&#xff08;的概率&#xff09;…… OpenAI 的接口名就叫【completion】&#xff0c;也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

高并发下的 AtomicReference 性能陷阱

介绍 Java 提供了 AtomicInteger/AtomicLong 在并发编程里经常用到&#xff0c;它们封装了对 int 和 long 的原子操作。 Java 还提供了 AtomicReference&#xff0c;用于对象引用做原子性的管理&#xff0c;比如 get、set、CAS。 一般情况下 AtomicInteger、AtomicLong 的性能…

mac新环境

1、maven 设置阿里云镜像 打开Maven的settings.xml文件。找到<mirrors>标签&#xff0c;如果没有&#xff0c;可以手动添加。在<mirrors>标签内部添加以下内容&#xff1a; <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorO…

【C++】类的转换函数

使用场景 C中当你创建了一个类&#xff0c;你想把这个类对象转换成基本类型的函数。类对象->基本类型对象 原理 如下实例&#xff0c;设计一个分数类&#xff0c;实现分数转换成double 浮点数的转换函数。并在mian函数隐式调用。 #include<iostream> class Fractio…

6. 使用 Spring Boot进行开发(Developing with Spring Boot)

6. 使用 Spring Boot进行开发&#xff08;Developing with Spring Boot&#xff09; 本节详细介绍了如何使用Spring Boot。它涵盖考虑构建系统、自动配置以及如何运行应用程序等主题。我们还介绍一些 Spring Boot 最新做法。虽然 Spring Boot 没有什么特别之处&#xff08;它只…

Java 接口和抽象类有何区别?

Java接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;都是面向对象编程中用于实现多态和代码复用的重要概念&#xff0c;但它们之间有几个关键的区别&#xff1a; 1. **实例化**&#xff1a; - **接口**&#xff1a;不能被实例化。它…

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema 一、生成Schema二、加密字段三、JSON Schema类型 从3.6版本开始&#xff0c;MongoDB支持根据提供的 JSON Schema验证documents的集合。在创建集合时&#xff0c;可以定义schema本身以及验证操作和级别&…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候&#xff0c;在爬取没有登录的情况下&#xff0c;我们也可以访问一部分页面或请求一些接口&#xff0c;因为毕竟网站本身需要做 SEO&#xff0c;不会对所有页面都设置登录限制。 但是&#xff0c;不登录直接爬取会有一些弊端&#xff0c;弊端主要有…

南京师范大学计电院数据结构课设——排序算法

1 排序算法 1.1 题目要求 编程实现希尔、快速、堆排序、归并排序算法。要求首先随机产生10000个数据存入磁盘文件&#xff0c;然后读入数据文件&#xff0c;分别采用不同的排序方法进行排序并将结果存入文件中。 1.2 算法思想描述 1.2.1 随机数生成 当需要生成一系列随机数…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序&#xff1a; 从第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果顺序不对就交换它们。 经过一轮遍历后&#xff0c;最大&#xff08;或最小&#xff09;的元素会排在最后。 重复进行上述步骤&#xff0c;直到没有任何元素需要交换&#xff0c;即…

Linux了解

简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由芬兰的Linus Torvalds于1991年首次发布。Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统&#xff0c;现在已经被移植到更多的计算机硬件平台&#xff0c;如手机、平板电脑、路由器、视频游戏控…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…

解决conda环境下import TensorFlow失败的问题

问题描述 安装了anaconda的电脑&#xff0c;新建了一个名叫deeplearning的环境&#xff0c;在该环境下已经成功安装了tensorflow。 于是在终端打开python并执行代码 import tensorflow as tf print(1)除了提示 2024-02-27 21:50:00.801427: I external/local_tsl/tsl/cuda/c…