当前位置: 首页 > ops >正文

Mysql的binlog日志

环境准备

[root@mysql152 ~]# yum install -y mysql-server mysql
[root@mysql152 ~]# systemctl enable mysqld --now

1.查看正在使用的binlog日志文件

mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
mysql>  select count(*) from  mysql.user;
+----------+
| count(*) |
+----------+
|        4 |
+----------+
执行查询命令 日志偏移量不变
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      157 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
执行建库、建表命令
mysql> create database db1;
mysql> create table db1.user(name char(10));
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      535 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+
mysql> insert into db1.user values ('王畅');
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+---------------+----------+--------------+------------------+-------------------+
| binlog.000001 |      812 |              |                  |                   |
+---------------+----------+--------------+------------------+-------------------+

2.自定义日志目录和日志名

[root@mysql152 ~]# cat /etc/my.cnf.d/mysql-server.cnf |grep log-bin
增加该配置
log-bin=/mylog/mysql152  
[root@mysql152 ~]# mkdir /mylog/
[root@mysql152 ~]# chown -R mysql.mysql /mylog/
[root@mysql152 ~]# systemctl restart mysqld
[root@mysql152 ~]# ls /mylog/
mysql152.000001  mysql152.index
[root@mysql152 ~]# mysql
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000001 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+

3.手动创建新的日志文件

说明:默认日志文件容量大于1G时会自动创建新的日志文件,在日志文件没写满时,执行的所有写命令都会保存到当前使用的日志文件里。

1.
//刷新前查看
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000001 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+
#刷新日志
mysql> flush logs;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000002 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+2.
//只要服务重启就会创建新日志
[root@mysql152 ~]# systemctl restart mysqld
[root@mysql152 ~]# mysql
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000003 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+3.
//完全备份后创建新的日志文件,创建的日志个数和备份库的个数一致
[root@mysql152 ~]# mysqldump --flush-logs mysql user > user.sql
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000004 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+

4.练习日志相关命令的使用

//查看已有的日志文件
mysql> show binary logs;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mysql152.000001 |       203 | No        |
| mysql152.000002 |       180 | No        |
| mysql152.000003 |       203 | No        |
| mysql152.000004 |       157 | No        |
+-----------------+-----------+-----------+//查看正在使用的日志
mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000004 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+//插入记录
mysql> insert into db1.user values("yaya");
//查看日志文件内容
说明:
Log_name: 日志文件名。
Pos: 命令在日志文件中的起始位置。
Event_type: 事件类型,例如 Query、Table_map、Write_rows 等。
Server_id: 服务器 ID。
End_log_pos:命令在文件中的结束位置,以字节为单位。
Info:执行命令信息。
mysql> show binlog events in "mysql152.000004";
+-----------------+-----+----------------+-----------+-------------+--------------------------------------+
| Log_name        | Pos | Event_type     | Server_id | End_log_pos | Info                                 |
+-----------------+-----+----------------+-----------+-------------+--------------------------------------+
| mysql152.000004 |   4 | Format_desc    |         1 |         126 | Server ver: 8.0.36, Binlog ver: 4    |
| mysql152.000004 | 126 | Previous_gtids |         1 |         157 |                                      |
| mysql152.000004 | 157 | Anonymous_Gtid |         1 |         236 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| mysql152.000004 | 236 | Query          |         1 |         307 | BEGIN                                |
| mysql152.000004 | 307 | Table_map      |         1 |         360 | table_id: 96 (db1.user)              |
| mysql152.000004 | 360 | Write_rows     |         1 |         401 | table_id: 96 flags: STMT_END_F       |
| mysql152.000004 | 401 | Xid            |         1 |         432 | COMMIT /* xid=71 */                  |
+-----------------+-----+----------------+-----------+-------------+--------------------------------------+//删除日志文件名之前的所有日志文件mysql> show binary logs;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mysql152.000001 |       203 | No        |
| mysql152.000002 |       180 | No        |
| mysql152.000003 |       203 | No        |
| mysql152.000004 |       432 | No        |
+-----------------+-----------+-----------+
4 rows in set (0.00 sec)mysql> purge master logs to "mysql152.000003";
Query OK, 0 rows affected (0.01 sec)mysql> show binary logs;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mysql152.000003 |       203 | No        |
| mysql152.000004 |       432 | No        |
+-----------------+-----------+-----------+
2 rows in set (0.00 sec)//删除所有日志文件,并重新创建日志文件
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)mysql> show binary logs;
+-----------------+-----------+-----------+
| Log_name        | File_size | Encrypted |
+-----------------+-----------+-----------+
| mysql152.000001 |       157 | No        |
+-----------------+-----------+-----------+
1 row in set (0.00 sec)

5.使用日志恢复数据
 

//重置日志
mysql> reset master;
Query OK, 0 rows affected (0.01 sec)mysql> show master status;
+-----------------+----------+--------------+------------------+-------------------+
| File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-----------------+----------+--------------+------------------+-------------------+
| mysql152.000001 |      157 |              |                  |                   |
+-----------------+----------+--------------+------------------+-------------------+//建库
mysql> create database gamedb;
Query OK, 1 row affected (0.00 sec)mysql> create table  gamedb.t1(name char(10),class char(3));
Query OK, 0 rows affected (0.01 sec)mysql> insert into gamedb.t1 values ("yaya","nsd");
Query OK, 1 row affected (0.00 sec)mysql> insert into gamedb.t1 values ("yaya","nsd");
Query OK, 1 row affected (0.00 sec)mysql> insert into gamedb.t1 values ("yaya","nsd");
Query OK, 1 row affected (0.00 sec)//查看表记录
mysql> select * from gamedb.t1;
+------+-------+
| name | class |
+------+-------+
| yaya | nsd   |
| yaya | nsd   |
| yaya | nsd   |
+------+-------+
3 rows in set (0.00 sec)
mysql> exit
Bye
//把日志文件拷贝给恢复数据的服务器,比如 mysql50
[root@mysql152 ~]# scp /mylog/mysql152.000001 root@192.168.10.150:/root在MySQL150 使用日志恢复数据
[root@mysql150 ~]# ls /root/mysql152.000001 
/root/mysql152.000001
[root@mysql150 ~]# mysqlbinlog /root/mysql152.000001 |mysql -uroot -p123456
[root@mysql150 ~]# mysql -uroot -p123456 -e "select * from gamedb.t1"
mysql: [Warning] Using a password on the command line interface can be insecure.
+------+-------+
| name | class |
+------+-------+
| yaya | nsd   |
| yaya | nsd   |
| yaya | nsd   |
+------+-------+

http://www.xdnf.cn/news/7719.html

相关文章:

  • .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
  • 八: 人工神经元/感知机 算法
  • Python数据可视化高级实战之一——绘制GE矩阵图
  • Windows安装MongoDb.并使用.NET 9连接
  • 深度学习+Flask 打包一个AI模型接口并部署上线
  • 【优秀三方库研读】在 quill 开源库中定义的 QUILL_LIKELY 和 QUILL_UNLIKELY 这两个宏的作用是什么
  • 【教程】Nuitka | Python打包exe新工具
  • Python 包管理工具核心指令uv sync解析
  • Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用
  • 什么是车载座舱产品的SRRC认证?
  • function calling简介
  • Vue组件开发深度指南:构建可复用与可维护的UI
  • python的加速方法
  • 【固废处理核心痛点】RS485转Profinet协议转换,如何提升设备监控效率?​​
  • Python训练营打卡31
  • 2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
  • git 撤销最近的几次push
  • Linux系统编程-DAY01
  • 动态DNS管理:【etcd+CoreDNS】 vs【BIND9】便捷性对比
  • Profinet转RS485网关赋能热敏CTP冲版机:高精度数据交互的核心解码方案​​
  • C++静态函数错误解析与修复指南练习
  • 编程技能:字符串函数08,strcmp
  • 刚刚!2025年5月WOS期刊目录已更新,新增多本期刊,剔除1本SCI期刊,慎投!
  • 软件测试期末复习
  • 深入解析OrientDB:多模型数据库的技术优势与实际应用
  • 如何从不同位置将联系人导入 iPhone(完整指南)
  • STM32定时器简单采集编码器脉冲
  • 【ubuntu服务器显卡老是坏掉】
  • BGP边界网关协议
  • 9、AI测试辅助-代码Bug分析提示词优化