Mysql数据备份与恢复( 二 )

  • binlog_format 在 STATEMENT 模式下记录的是 sql
flush logs;update ceshi2.account set username='2';mysql> SHOW BINLOG EVENTS IN 'binlog.000019' limit 10;+---------------+-----+----------------+-----------+-------------+----------------------------------------+| Log_name| Pos | Event_type| Server_id | End_log_pos | Info|+---------------+-----+----------------+-----------+-------------+----------------------------------------+| binlog.000019 |4 | Format_desc|1 |125 | Server ver: 8.0.21, Binlog ver: 4|| binlog.000019 | 125 | Previous_gtids |1 |156 ||| binlog.000019 | 156 | Anonymous_Gtid |1 |235 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|| binlog.000019 | 235 | Query|1 |324 | BEGIN|| binlog.000019 | 324 | Query|1 |446 | update ceshi2.account set username='2' || binlog.000019 | 446 | Xid|1 |477 | COMMIT /* xid=300671 */|+---------------+-----+----------------+-----------+-------------+----------------------------------------+binlog 操作查看所有的 binlog-- 查看链接的数据库 binlog 文件信息SHOW BINARY LOGS;SHOW MASTER LOGS;mysql> SHOW BINARY LOGS;+---------------+-----------+-----------+| Log_name| File_size | Encrypted |+---------------+-----------+-----------+| binlog.000013 |16162 | No|| binlog.000014 |179 | No|| binlog.000015 |3765 | No|| binlog.000016 |1700 | No|+---------------+-----------+-----------+查看当前正在写入的 binlog-- 查看当前正在写入的 binlog 文件信息SHOW MASTER STATUS;mysql> SHOW MASTER STATUS;+---------------+----------+--------------+------------------+-------------------+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000016 |1700 ||||+---------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)生成新的 binlog-- 刷新产生新的日志文件FLUSH LOGS;-- 原来的日志文件是 binlog.000016mysql> SHOW MASTER STATUS;+---------------+----------+--------------+------------------+-------------------+| File| Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+---------------+----------+--------------+------------------+-------------------+| binlog.000017 |156 ||||+---------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)查看 binlog 中的操作SHOW BINLOG EVENTS[IN 'log_name'][FROM pos][LIMIT [offset,] row_count]mysql> show binlog events limit 100,3;+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+| Log_name| Pos| Event_type| Server_id | End_log_pos | Info|+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+| binlog.000013 | 9382 | Query|1 |9539 | use `ceshi`; GRANT SELECT ON `ceshi`.`test2` TO 'db_dev'@'localhost' /* xid=1023 */ || binlog.000013 | 9539 | Anonymous_Gtid |1 |9616 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'|| binlog.000013 | 9616 | Query|1 |9711 | use `ceshi`; FLUSH PRIVILEGES|+---------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------------------+binlog 落盘时机Mysql 中有很多 Buffer Pool (可以简单理解为内存),为了提高数据库性能,一般提交事务之后,二进制日志先写入 Buffer Poll ,在写入到二进制文件中 。
如果二进制日志没有落盘,那么二进制日志有可能丢失,从库进行复制时会丢失数据 。
参数 sync_binlog 配置写入 Buffer Poll 多少次的时候调用系统调用 fsync 将内存中的二进制日志数据落盘 。
  • sync_binlog=1 表示提交事务的时候同步将二进制日志数据落盘 。配合 innodb_flush_log_at_trx_commit=1(控制 redo log 落盘) 数据安全 。
  • sync_binlog=N 表示提交了 N 个二进制数据时才将日志数据落盘 。也有人将其设置为 2,提高并发性,系统崩溃时可能丢失二进制日志数据 。
  • sync_binlog=0 表示由操作系统 IO 调度来决定日志什么时候落盘 。一般没人采用这个 。
Mysql 备份和恢复为了避免意外情况发生导致数据丢失,数据库需要定时全备和增量备份 。以便于可以将数据库恢复到任意时间点的数据 。
根据备份方法的不同可以划分为:
  • 热备(Hot Backup)
  • 冷备 (Clod Backup)
热备是在数据库正在运行时直接备份,对业务的影响不大 。
冷备需要停止 Mysql 进行备份,速度较快 。可以在从库进行冷备 。


推荐阅读