- 使用二进制文件
- 二进制日志的格式
- 从二进制日志中提取语句
- 忽略要写入二进制日志的数据库
- 迁移二进制日志
一、bin log 文件
MySQL 中的二进制日志,对说的就是 mysql-binlog 文件。 如在我win10上data文件夹下的binlog日志。
每次mysql服务启动或者是当bin-log达到了最大大小,都会从新去创建一个新的binlog.xxxxx 文件。
binlog日志会去记录,写的操作以及DDL语句,而select的操作是不会被记录的
1. binlogs 的作用
1.1 备份和恢复
1.2 主从配置
2. 配置和常用SQL
2.1 先简单看一下我自己 Mysql-8.0.12 的配置
# mysql 命令行[mysql]default-character-set=utf8# mysql 服务端[mysqld]port=3306default_authentication_plugin=mysql_native_passwordbasedir=D:/phpstudy_pro/Extensions/MySQL8.0.12/datadir=D:/phpstudy_pro/Extensions/MySQL8.0.12/data/character-set-server=utf8default-storage-engine=InnoDBcollation-server=utf8_unicode_ciinit_connect='SET NAMES utf8'innodb_buffer_pool_size=64Minnodb_flush_log_at_trx_commit=1innodb_lock_wait_timeout=120innodb_log_buffer_size=4Minnodb_log_file_size=256Minteractive_timeout=120join_buffer_size=2Mkey_buffer_size=32Mlog-error="D:/phpstudy_pro/Extensions/MySQL8.0.12/data"log_error_verbosity=1max_allowed_packet=16Mmax_connections=100max_heap_table_size=64Mmyisam_max_sort_file_size=64Gmyisam_sort_buffer_size=32Mread_buffer_size=512kbread_rnd_buffer_size=4Mserver_id=1# 本次添加的 binlog 目录log_bin="D:/phpstudy_pro/Extensions/MySQL8.0.12/data/binlogs"skip-external-locking=onsort_buffer_size=256kbtable_open_cache=256thread_cache_size=16tmp_table_size=64Mwait_timeout=120# 客户端[client]port=3306default-character-set=utf8
2.2 验证是否创建了二进制日志
mysql> show variables like 'log_bin%';+---------------------------------+-----------------------------------------------------------+| Variable_name | Value |+---------------------------------+-----------------------------------------------------------+| log_bin | ON || log_bin_basename | D:\phpstudy_pro\Extensions\MySQL8.0.12\data\binlogs || log_bin_index | D:\phpstudy_pro\Extensions\MySQL8.0.12\data\binlogs.index || log_bin_trust_function_creators | OFF || log_bin_use_v1_row_events | OFF |+---------------------------------+-----------------------------------------------------------+
2.3 查看当前binlog的设置的最大值
-- 一旦其中的某个日志文件达到 max_binlog_size 设置的值或者
-- 服务从新启动了都会创建一个新的 binlog 文件,并且会被添加到 log_bin_index 文件中。
-- 查看当前的 binlog 日志 文件的最大值(单位应该是字节)、
mysql> select @@max_binlog_size;
+-------------------+
| @@max_binlog_size |
+-------------------+
| 1073741824 |
+-------------------+
2.4 查看当前服务器上的所有的binlog
mysql> show binary logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| binlogs.000001 | 155 |
| binlogs.000002 | 155 |
+----------------+-----------+
mysql> show master logs;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| binlogs.000001 | 155 |
| binlogs.000002 | 155 |
+----------------+-----------+
2.5 设置当前会话的binlog
-- 禁用当前会话的二进制日志
SET SQL_LOG_BIN = 0;
-- 重新启用
SET SQL_LOG_BIN = 1;
2.6 查看当前binlog文件的位置
mysql> SHOW MASTER STATUS;
+----------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------+----------+--------------+------------------+-------------------+
| binlogs.000004 | 155 | | | |
+----------------+----------+--------------+------------------+-------------------+
2.7 移至下一个二进制文件
mysql> SHOW BINARY LOGS;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| binlogs.000002 | 155 |
| binlogs.000003 | 155 |
+----------------+-----------+
2 rows in set (0.00 sec)
mysql> FLUSH LOGS;
Query OK, 0 rows affected (0.27 sec)
mysql> SHOW BINARY LOGS;
+----------------+-----------+
| Log_name | File_size |
+----------------+-----------+
| binlogs.000002 | 155 |
| binlogs.000003 | 200 |
| binlogs.000004 | 155 |
+----------------+-----------+
3 rows in set (0.00 sec)
