前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mysql日志管理

mysql日志管理

原创
作者头像
萧晚歌
修改2022-03-21 10:46:24
1.5K0
修改2022-03-21 10:46:24
举报
文章被收录于专栏:linux技术分享linux技术分享

binlog

是逻辑日志 会记录整个数据库运行期间变更性的,语句

1备份恢复必须依赖二进制日志

2复制环境必须依赖二进制日志

3分析大事务

配置

log_bin binlog的开关和binlog的前缀

server_id 必须要打开

binlog_format binlog日志的格式 ROW/Statement/mixed 只影响dml语句记录格式

ddl只会记录 statement格式

row格式 记录数据行的变化

Statement格式

mixed格式 自动判断是用什么格式

sync_binlog =1 刷新参数

1代表每次事务提交都要刷新binlog

0代表由os cache判断什么时候刷新

2多少组事务去刷磁盘

在线查看binlog

show binary logs;

Log_name 日志名字

File_size 日志的大小,日志量当前日志文件偏移量

Encrypted 是不是加密的

binlog使用只会使用最后一个

show master status ; 当前在使用哪个binlog文件,Position号是多少

整个日志里面的记录单元是evnet

每个evnet都有开始和结束位置点用,Position表示

show binlog events in 'mysql-bin.000004';

查看事件,主要关注 文件名 ,事件起点, 事件终点

mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000004 linux系统查看文件

想查看某一端时间的日志

mysqlbinlog --start-datetime='2021-12-12-18 10:00:00' --stop-datetime'2021-12-18 10:00:00' --base64-output=decode-rows mysql-bin.000004

通过position号查询

mysqlbinlog --start-postion=19646 --stop-postion=200000 --base64-output=decode-rows mysql-bin.000004

生产恢复痛点

1.跨度太大,起点难找 (一般备份加日志)

2. 跨多个文件 (分段截取,时间截取,gtid)

3. 日志文件记录了,所有库所有表的日志(可以用my2sql)

gtid特性

是对于一个已提交事务的编号 ,并且是一个全局唯一的编号.

官方定义如下

gtid = server_uuid : transaction_id

重要参数

gtid-mode=on #gtid是不是开启

enforce-gtid-consistency=true #是不是强制gtid一致性

log_slave-updates=1#从库当中强制将gtid写入binlog中

如何查看gtid信息

show master status;

在最后一列显示Executed_Gtid_Set

按照一个事务滚动一个gtid号码

无论夸多少文件号码都是一直增长的

如何截取gtid1-3号

mysqlbinlog --include-gtids='94a10acd-44dc-11ec-85c0-00163e06d66f:1-3' /data/mysql/binlog_3306/mysql-bin.000006

截取1,3跳过2号

mysqlbinlog --include-gtids='94a10acd-44dc-11ec-85c0-00163e06d66f:1-3' --exclude-gtids='94a10acd-44dc-11ec-85c0-00163e06d66f:2' /data/mysql/binlog_3306/mysql-bin.000006

gtid是具备幂等性的,我们截取出来的日志文件是带有已经执行过的gtid信息当我们把日志文件执行,发现数据并为恢复

mysqlbinlog --skip-gtids --include-gtids='94a10acd-44dc-11ec-85c0-00163e06d66f:1' /data/mysql/binlog_3306/mysql-bin.000006 >/tmp/t2.sql

需要加上--skip-gtids这个参数跳过gtid的记录,如果开启了gtid,用position号截取也要加这个参数

binlog 删除和清理

可以手动也可以自动

expire_logs_days = 8.0之前是这个参数,保留几天就写几

binlog_expire_logs_seconds = 8.0用这个以秒为准

至少要保留1轮全备周期的binlog

也可以手工清理

紧急情况磁盘不够了

紧急rm掉

如果能登录到数据库

purge binary logs to 'mysql-bin.000005';

删除到哪个文件

删除全部从0开始主从必蹦(gtid也会重置)

reset master;

binlog滚动

重启会滚动一个新的日志文件

命令 flush logs;手工滚动一个新的出来

日志文件大小设置

max_binlog_size 默认是1g一般会设置小点

slowlog

主要记录执行较慢的sql语句

开关 slow

slow_query_log=1

文件位置及名字

slow_query_log_file=/data/mysql/slow.log

设置慢查询时间

long_quer_time=0.1

没有走索引的语句也记录只记录最近1000条

log_queries_not_using_indexes=1000

分析

mysqldumpslow工具分析

-s c 按照次数排序

-t 5 显示前几个

mysqldumpslow -s c -t 5 /data/mysql/data_3306/slow.log

第三方工具

pt

安装

https://www.percona.com/downloads/percona-toolkit/LATEST/

官网下包

yum安装

yum localinstall percona-toolkit-3.3.1-1.el7.x86_64.rpm

使用方法

pt-query-digest /data/mysql/data_3306/slow.log 可以直接跟文件

备份

作用 故障恢复(PITR), 升级迁移

逻辑备份

备份语句,

mysqldump 单线程串行

load(针对单表)

mydumoer 多线程

mysql shell

物理备份

备份数据文件,数据页

xtrabackup 建议8.0.12版本后

clone plugin mysql8.0版本后的

mysqldump

链接参数

本地备份

mysqldump -uroot -p123456 -S /tmp/mysql.sock

远程备份

mysqldump -uroot -p123456 -h 10.0.0.51 -P3006

备份参数

mysqldump -uroot -p123456 -S /tmp/mysql.sock -A >/tmp/1.sql

备份全库数据

mysqldump -uroot -p123456 -S /tmp/mysql.sock -B 库名 >/tmp/1.sql

单库备份

mysqldump -uroot -p123456 -S /tmp/mysql.sock 库名 表名 >/tmp/1.sql

单表备份

如果只备份表结构加 --no-data

特别参数

--master-data=

--master-data=1

会将 position号 和文件名写入备份

会将change master 语句写入dump文件中

在从库导入后,配置主从无需再指定文件名和位置

--master-data=2

会将 position号 和文件名写入备份

会将change master 语句写入dump文件中,只不过会被注释掉

在故障恢复的时候,是备份加binlog恢复

--single-transaction 加了master-data会上锁

备份的时候会开启一个事务创建一致性快照

只支持mvcc的多版本的只对innodb的表管用

--max_allowed_packet=128M

即最大允许传输包的大小,也就是查询出结果后,把结果发送到客户端时,每个网络包的最大大小。

-R -E --triggers 不加这些参数不会备份高级对象

--set-gtid-purged= 默认是auto如果手动开启了会把gtid信息会记录进去,off就不会记录

构建主从的时候可以设置on 把我们主库的备份恢复到从库之前的带gtid信息的binlog,就不会同步

逻辑导入导出load data

先导出

select * from 库名.表名 into outfile '/tmp/test.csv';

select * from help_keyword into outfile '/tmp/t1.csv' fields enclosed by "'";

导出并设置字段引用符把我们每一个字段用引号引起来注意只能用表里没有引用的

select * from help_keyword into outfile '/tmp/t0.csv' fields terminated by ',' enclosed by "'";

设置字段引用符和字段分隔符

想导出,先需要查看'secure_file_priv'参数

使用mysqldump导出csv

mysqldump -uroot -p123456 库名 --fields-terminated-by ',' --fields-enclosed-by "'" -T /tmp

导入可以用load或者mysqlport

mysqlimport -uroot -p123456 导入哪个库 --fields-terminated-by ',' --fields-enclosed-by "'"

/tmp/t1.txt

导出的时候,什么格式导入就什么格式

物理备份工具

xtrabackup

在mysql8.0之后要使用对应的 pxb 8.0对应的版本工具

mysql8.0.20版本需要使用8.0.12以上版本

只支持服务器端

https://www.percona.com/downloads/

下载地址

下载安装包直接安装

针对innodb表支持热备份

其他不是热备份

mysql clone-plugin(8.9.17)

版本必须是一致的

支持两种克隆方式 本地克隆 远程克隆

克隆过程中出现ddl操作会失败

本地克隆

1加载插件

install plugin clone soname 'mysql_clone.so';

或者写到mysql配置文件

plugin-load-add=mysql_clone.so

clone=force_plus_permanent

可以通过视图去查看

select plugin_name,plugin_status from information_schema.plugins where plugin_name like 'clone';

2创建克隆专用用户

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档