mysql查看binlog文件列表:MySQL日志系统binlogredo

作者:小菜 更新时间:2023-04-09 点击数:
简介:mysql查看binlog文件列表:MySQL日志系统binlogredo?日志是 mysql 数据库的重要组成部分,比如数据持久化、主从复制、数据

【菜科解读】

mysql查看binlog文件列表:MySQL日志系统binlogredo

mysql查看binlog文件列表:MySQL日志系统binlogredo?日志是 mysql 数据库的重要组成部分,比如数据持久化、主从复制、数据回滚等操作都依赖日志系统来实现本文将介绍MySQL的三种日志:归档日志binlog、重做日志redo log 和回滚日志undo log,我来为大家科普一下关于mysql查看binlog文件列表:MySQL日志系统binlogredo?下面希望有你要的答大案纪实:我们一起来看看吧!

mysql查看binlog文件列表:MySQL日志系统binlogredo

mysql查看binlog文件列表:MySQL日志系统binlogredo

日志是 mysql 数据库的重要组成部分,比如数据持久化、主从复制、数据回滚等操作都依赖日志系统来实现。

本文将介绍MySQL的三种日志:归档日志binlog、重做日志redo log 和回滚日志undo log。

binlog 归档日志什么是binlog

二进制日志binary log描述了数据库更改的“事件”,比如建表、更改表数据等操作,它属于逻辑日志,由 Server 层记录,记录了数据库所有的逻辑操作。

还包含了关于每条语句更新数据的时间信息,不记录查询语句的日志,比如SELECT语句,如果要查看所有语句的日志,可以使用通用查询日志 general query log。

binlog主要有两个用途:

主从复制。

将源服务器 Master 端上binlog发送到Slave 端,Slave 端根据binlog重放事务,实现主从数据保持一致。

数据恢复。

binlog是通过增量的形式进行写入的,可使用binlog恢复某一时刻的数据。

下面来看看MySQL中如何使用binlog。

开启binlog

查看binlog是否开启:show variables like '%log_bin%';

mysql> show variables like '%log_bin%'; ERROR 2006 HY000: MySQL server has gone away No connection. Trying to reconnect... Connection id: 15 Current database: mysql --------------------------------- ------------------------------------------------ | Variable_name | Value | --------------------------------- ------------------------------------------------ | log_bin | ON | | log_bin_basename | D:\tools\mySQL-8.0.16-winx64\data\binlog | | log_bin_index | D:\tools\mysql-8.0.16-winx64\data\binlog.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | --------------------------------- ------------------------------------------------ 6 rows in set, 1 warning 0.81 sec

如果没有开启,需修改配置文件,新增:

[mysqld] log-bin=mysql-bin

然后重启MySQL。

MySQL 5.7.7 之后的版本中,binlog日志格式默认采用ROW,Row 格式不记录 SQL 语句上下文相关信息,仅记录每一行的数据修改。

mysql> show variables like 'binlog_format'; --------------- ------- | Variable_name | Value | --------------- ------- | binlog_format | ROW | --------------- ------- 1 row in set, 1 warning 0.00 sec

binlog日志通常在事务提交时才记录,mysql 通过 sync_binlog 参数来控制 biglog 刷入磁盘的时机,其取值范围是 0-N:

0:由系统自行判断何时写入磁盘;

1:每次提交时写入磁盘

N:每N个事务写入磁盘

MySQL 5.7.7 之后的版本默认为 1。

mysql> show variables like 'sync_binlog'; --------------- ------- | Variable_name | Value | --------------- ------- | sync_binlog | 1 | --------------- ------- 1 row in set, 1 warning 0.00 sec

查看binlog

刷新日志:Flush logs; , 会产生一个新编号的binlog文件。

查看所有binlog文件:

mysql> show binary logs; --------------- ----------- ----------- | Log_name | File_size | Encrypted | --------------- ----------- ----------- | binlog.000742 | 178 | No | | binlog.000743 | 1571 | No | | binlog.000744 | 415 | No | | binlog.000745 | 155 | No | --------------- ----------- ----------- 4 rows in set 0.00 sec

查看当前写入的binlog文件:

mysql> show master status; --------------- ---------- -------------- ------------------ ------------------- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | --------------- ---------- -------------- ------------------ ------------------- | binlog.000745 | 155 | | | | --------------- ---------- -------------- ------------------ ------------------- 1 row in set 0.00 sec

接下来创建一个数据表,并插入数据库,SQL语句如下:

create table department id int, name varchar255 not null ; ALTER TABLE department CHANGE COLUMN name dept varchar255; insert into department id, dept values 1,'开发'; insert into department id, dept values 2,'测试'; update department set dept=产品 where id=2;

查看数据:

mysql> select from department; ------ ------ | id | dept | ------ ------ | 1 | 开发 | | 2 | 测试 | ------ ------ 2 rows in set 0.00 sec

然后使用 show binlog events; 命令查看binlog内容:

#p#分页标题#e#

mysql> show binlog events in 'binlog.000745'; --------------- ------ ---------------- ----------- ------------- --------------------------------------------------------------------------------------------------- | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | --------------- ------ ---------------- ----------- ------------- --------------------------------------------------------------------------------------------------- | binlog.000745 | 4 | Format_desc | 1 | 124 | Server ver: 8.0.16, Binlog ver: 4 | | binlog.000745 | 124 | Previous_gtids | 1 | 155 | | | binlog.000745 | 155 | Anonymous_Gtid | 1 | 232 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000745 | 232 | Query | 1 | 393 | use `testdb`; create table department id int, name varchar255 not null / xid=191 / | | binlog.000745 | 393 | Anonymous_Gtid | 1 | 470 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000745 | 470 | Query | 1 | 621 | use `testdb`; ALTER TABLE department CHANGE COLUMN name dept varchar255 / xid=192 / | | binlog.000745 | 621 | Anonymous_Gtid | 1 | 700 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000745 | 700 | Query | 1 | 777 | BEGIN | | binlog.000745 | 777 | Table_map | 1 | 843 | table_id: 100 testdb.department | | binlog.000745 | 843 | Write_rows | 1 | 891 | table_id: 100 flags: STMT_END_F | | binlog.000745 | 891 | Xid | 1 | 922 | COMMIT / xid=193 / | | binlog.000745 | 922 | Anonymous_Gtid | 1 | 1001 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' | | binlog.000745 | 1001 | Query | 1 | 1078 | BEGIN | | binlog.000745 | 1078 | Table_map | 1 | 1144 | table_id: 100 testdb.department | | binlog.000745 | 1144 | Write_rows | 1 | 1192 | table_id: 100 flags: STMT_END_F | | binlog.000745 | 1192 | Xid | 1 | 1223 | COMMIT / xid=194 / | --------------- ------ ---------------- ----------- ------------- --------------------------------------------------------------------------------------------------- 16 rows in set 0.00 sec

可以看到binlog记录了执行过程。

使用binlog恢复数据

先删除数据表:

mysql> drop table department; Query OK, 0 rows affected 0.28 sec mysql> select from department; ERROR 1146 42S02: Table 'testdb.department' doesn't exist

windows中可以使用 mysqlbinlog.exe 来使用binlog恢复数据到某个位置,我的存放地址为 D:\tools\mysql-8.0.16-winx64\bin 。

使用mysqlbinlog命令恢复:

$ mysqlbinlog --no-defaults "D:\tools\mysql-8.0.16-winx64\data\binlog.000745" --start-position=124 --stop-position=1223 > d:\\test.sql

登录mysql服务器,执行:source d:\\test.sql

查询数据:

mysql> select from department; ------ ------ | id | dept | ------ ------ | 1 | 开发 | | 2 | 测试 | ------ ------ 2 rows in set 0.00 sec

数据成功恢复了。

redo log 重做日志

前面介绍了binlog日志是在事务提交时才记录的,如果MySQL在事务执行过程中突然奔溃,使用binlog日志无法保证事务完整性,没有 crash-safe 的能力,这也是MySQL 引擎 MyISAM的一个缺点。

crash-safe指MySQL服务器奔溃重启后,能够保证:

所有已经提交的事务的数据仍然存在。

所有没有提交的事务的数据可以自动回滚。

Innodb 引擎通过redo log重做日志和undo log回滚日志这两个日志保证了MySQL的crash-safe 能力,他们都是InnoDB 引擎引入的日志,属于引擎层的日志。

前面说了binlog是server层记录的日志,所以使用各种引擎的MySQL服务器都可以使用它。

WAL技术

redo log属于物理日志,记录的是事务对某个数据页做了哪些修改,只记录修改相比存储整个数据页的性能更优。

redo log的记录采用了WALWrite-Ahead Logging 技术,也就是先写日志,再写磁盘,这样进一步提升了性能。

当执行一条DML语句的时候,InnoDB 引擎会先把记录写到内存redo log buffer中,然后在系统在适当的时候将这个操作记录更新到磁盘redo log file。

这个写入磁盘的时机可以通过 innodb_flush_log_at_trx_commit 参数来配置:

0:每秒刷新写入磁盘,当系统崩溃,可能会丢失1秒钟的数据。

1:实时写,实时刷。

事务每次提交都会写入磁盘,Innodb 默认设置的就是1。

2:实时写,延迟刷。

每次提交仅写入到内存,然后每秒将内存中的日志写入到磁盘中。

mysql> show variables like 'innodb_flush_log_at_trx_commit'; -------------------------------- ------- | Variable_name | Value | -------------------------------- ------- | innodb_flush_log_at_trx_commit | 1 | -------------------------------- ------- 1 row in set, 1 warning 0.00 sec

redo log大小固定,通过循环写入的方式,

#p#分页标题#e#

mysql> show variables like '%innodb_log%'; ------------------------------------ ---------- | Variable_name | Value | ------------------------------------ ---------- | innodb_log_buffer_size | 16777216 | | innodb_log_checksums | ON | | innodb_log_compressed_pages | ON | | innodb_log_file_size | 50331648 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | .\ | | innodb_log_spin_cpu_abs_lwm | 80 | | innodb_log_spin_cpu_pct_hwm | 50 | | innodb_log_wait_for_flush_spin_hwm | 400 | | innodb_log_write_ahead_size | 8192 | ------------------------------------ ---------- 10 rows in set, 1 warning 0.01 sec

两阶段提交

redo log 的写入包括了两个步骤:prepare 和 commit,也就是"两阶段提交"。

目的是为了使 redo log 和 binlog 保持一致,步骤如下:

InnoDB 写redo log,标记为prepare状态;

执行器写binlog;

InnoDB 写redo log,标记为commit状态。

使用两阶段提交可以保证主从数据一致。

undo log 回滚日志

redo log保证数据持久性,而undo log用于保证事务操作的原子性。

undo log属于逻辑日志,记录了数据的反向操作语句,保证进行事务回滚时,可以将数据还原。

主要有两个功能:

事务回滚:保证原子性

多版本并发控制MVCC:隔离性

mysql> show variables like '%undo%'; -------------------------- ------------ | Variable_name | Value | -------------------------- ------------ | innodb_max_undo_log_size | 1073741824 | | innodb_undo_directory | .\ | | innodb_undo_log_encrypt | OFF | | innodb_undo_log_truncate | ON | | innodb_undo_tablespaces | 2 | -------------------------- ------------ 5 rows in set, 1 warning 0.01 sec

innodb_max_undo_log_size:日志文件大小

innodb_undo_directory :存放目录

innodb_undo_tablespaces:创建undo文件个数,会在mysql的data目录下创建命名为undo_001~undo_002的undo tablespace文件。

undo log默认存放在 data/ibdata1 中,如果开启了 innodb_file_per_table 则会保存到每个表的.ibd文件中。

mysql> show variables like 'innodb_file_per_table'; ----------------------- ------- | Variable_name | Value | ----------------------- ------- | innodb_file_per_table | ON | ----------------------- ------- 1 row in set, 1 warning 0.01 sec

update语句执行流程

简单介绍了这3种日志之后,来看一下一条更新语句执行过程中这些日志是如何记录的。

update department set dept='产品' where id=2;

主要流程如下:

分析器对SQL 语句进行解析,通过词法和语法解析知道这条语句要做什么。

执行器通过InnoDB引擎提供的接口读取id=2这一行数据,如果数据在内存中就直接返回行数据,如果不在就从磁盘中读取。

执行器将这行数据的dept设置为 产品。

InnoDB将旧行数据写入undo log中。

InnoDB将新行更新到内存。

InnoDB写redo log并标记为prepare状态。

执行器写binlog,并把 binlog 写入磁盘。

执行器调用InnoDB的提交事务接口,InnoDB写redo log并标记为commit状态,更新完成。

本文介绍了MySQL的三种重要日志:物理日志 redo log和undo log 和逻辑日志 binlog,它还有其它日志,菜叶说说,比如Error log、General query log、Relay log、Slow query log、DDL log等,他们都是MySQL数据库的重要组成部分,日志记录在一定程度上影响MySQL服务的性能,但他们是必不可少的,备份的频率需要根据具体业务来进行配置。

--THE END--

他们只要拒绝相信就行。

面对难题,最容易的对策就是拒绝相信它的存在。

——艾萨克·阿西莫夫《神们自己》

社保个人账户,2025年每月划入多少钱?进来查查看(2025年4月19日)

社保卡一般一个月打入多少钱社保卡的医保账户每月进多少钱?医保卡需要充钱吗?下面随新社通小编一起了解详情。

公司社保就是我们日常说的五险,包括包括养老保险、医疗保险、失业保险、工伤保险和生育保险。

其中养老保险、医疗保险和失业保险,这三种险是由企业和个人共同缴纳的保费,工伤保险和生育保险完全是由企业承担的。

您了解社保卡个人账户每月有多少钱吗社保卡每月打入的金额主要由医疗保险个人账户返还构成,具体比例与年龄、缴费基数及地区相关。

退休人员:以当地上年度职工月平均工资为基数,不满70周岁按4.3%,70周岁以上按4.8%返还。

假设当地平均工资为6000元,70岁以上退休人员每月返还288元(60004.8%)。

在职职工:根据年龄划分返还比例,不满35周岁按缴费基数的0.8%,35-45周岁为1%,45周岁以上为2%。

例如,若缴费基数为8000元,45岁以上职工每月医保账户返还160元(80002%)。

社保卡里的钱主要由个人缴纳的医疗保险费部分计入,具体数额根据个人的缴费基数和年龄等因素计算得出。

社保卡通常指的是医保卡,它是参加基本医疗保险的个人持有的卡片,用于享受医疗服务时的费用结算。

以下是影响社保卡内金额的几个因素:到账时间:一般来说,医保卡的钱在缴费后的两三天内就能够到账,而每月的月末,医保会根据缴费工资、年龄等因素拨付到个人账户里。

年龄因素:不同年龄段的人,其个人医保账户的计入比例可能不同。

例如,35岁以下的人员,每个月到账的金额可能会按照社保缴费基数的2%来计算。

缴费基数:个人医保账户的金额是根据个人的社保缴费基数来计算的。

缴费基数通常是个人上一年度的平均月收入。

个人缴费比例:职工每月个人需缴纳一定比例的医疗保险费,这部分费用全部计入个人医保账户。

统筹基金:除了个人账户外,基本医保还包括统筹基金部分,这部分资金主要用于大病住院的报销。

社保卡里的钱是按照个人的社保缴费基数和年龄等因素计算的,而且每个月都会有相应的金额打入卡内,用于日常的医疗消费和报销。

每年的拨付通常是12次,即每月一次。

社保缴费多少年才能享受终生医保、养老待遇社保卡交多少年才可以终身享受主要取决于具体的社保类型和地区要求。

职工社保对于参加职工社保的人员,通常需要满足以下条件才能享受终身社保待遇:养老保险:累计缴费满15年,并且达到法定退休年龄(男性60岁,女性干部55岁,女性工人50岁)。

医疗保险:城镇职工医保:各地要求有所不同,常见的缴费年限要求包括:累计缴费男职工满30年、女职工满25年,且实际缴费年限累计满10年。

累计缴费男职工满25年、女职工满20年,且实际缴费年限累计满10年。

少数地区要求累计缴费满15年。

如果医疗保险缴费年限不足,退休后可以继续缴纳职工医疗保险费,或者一次性补足,或者转为居民医保继续缴费。

城乡居民社保对于参加城乡居民社保的人员(如新农合、城居保),需要满足以下条件:医疗保险:需要每年缴纳费用,交一年保一年,没有终身享受的说法。

养老保险:累计缴满15年,且年满60岁。

具体地区的差异不同地区的具体要求可能有所不同。

例如,某些地区可能要求本地实际缴费年限达到一定年限才能享受退休人员医保待遇2。

因此,建议咨询当地社保部门或专业的保险顾问以获取最准确的信息。

社保个人账户,2025年每月划入多少钱?进来查查看(25年4月10日)

社保卡里的每个月个人账户进多少钱您了解社保卡个人账户每月有多少钱吗?社保卡里的医保每个月到账金额是根据个人的工资、年龄以及缴费比例等多个因素来确定的。

下面随新社通小编一起了解详情。

五险一金:由单位缴纳,五险缴到社会社保部门,一金缴到住房公积金管理中心。

基数以上年职工月平均工资,或以新参加工作职工的第一个月工资。

社保卡每月打入多少钱?社保卡里返的钱是您医疗保险的个人缴费部分,及按照单位缴费部分划到医保个人账户的金额合计。

以北京为例,用人单位缴纳的医疗保险费划入个人账户如下:(一)不满35周岁的职工按本人月缴费工资基数的0.8%划入个人帐户;(二)35周岁以上不满45周岁的职工按本人月缴费工资基数的1%划入个人帐户;(三)45周岁以上的职工按本人月缴费工资基数的2%划入个人帐户;(四)不满70周岁的退休人员按上一年本市职工月平均工资的4.3%划入个人帐户;(五)70周岁以上的退休人员按上一年本市职工月平均工资的4.8%划入个人帐户。

因此,你社保卡里扣每月返多少钱,是与您医疗保险个人缴费金额及医疗保险缴费基数、个人年龄有关的,与您每月交的社保总额并无直接关系,而且通过每月缴纳的社保总额,也不会推算出返还您社保卡里的金额。

请根据上述提示及个缴费工资基数测算。

社保卡交多少年才可以终身享受?社保要交多少年才能享受终身,这一问题的答案主要取决于所指的社保具体项目。

社保包含多个项目,其中最为人们关注的是养老保险和医疗保险。

对于养老保险而言:社保要交15年才可以享受终身。

只有满足15年的累计缴费年限,将来才能够办理退休,享受按月领取养老金的待遇。

这是确保参保人员在达到法定退休年龄后,能够依法获得养老保险。

对于医疗保险而言:社保要交多少年才能享受终身医保,则存在性别和地区的差异。

一般来说,男性累计缴满25-30年、女性累计缴满20-25年,就可以在退休后享受终身医保待遇,而无需再缴纳医保费用。

这一要求旨在确保参保人员在长期缴纳医保费用后,能够在老年时享受到充分的医疗保险。

综上所述,社保要交多少年才能享受终身,主要取决于所关注的社保项目。

对于养老保险而言,需要累计缴纳15年;而对于医疗保险而言,则需要根据性别和地区的具体法规来确定。

请注意,以上信息可能因地区的不同而有所变化,具体情况还需咨询当地社保部门或专业律师。

加入收藏
               

mysql查看binlog文件列表:MySQL日志系统binlogredo

点击下载文档

格式为doc格式

  • 账号登录
社交账号登录