- 使用二进制文件
- 二进制日志的格式
- 从二进制日志中提取语句
- 忽略要写入二进制日志的数据库
- 迁移二进制日志
一、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=3306
default_authentication_plugin=mysql_native_password
basedir=D:/phpstudy_pro/Extensions/MySQL8.0.12/
datadir=D:/phpstudy_pro/Extensions/MySQL8.0.12/data/
character-set-server=utf8
default-storage-engine=InnoDB
collation-server=utf8_unicode_ci
init_connect='SET NAMES utf8'
innodb_buffer_pool_size=64M
innodb_flush_log_at_trx_commit=1
innodb_lock_wait_timeout=120
innodb_log_buffer_size=4M
innodb_log_file_size=256M
interactive_timeout=120
join_buffer_size=2M
key_buffer_size=32M
log-error="D:/phpstudy_pro/Extensions/MySQL8.0.12/data"
log_error_verbosity=1
max_allowed_packet=16M
max_connections=100
max_heap_table_size=64M
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=32M
read_buffer_size=512kb
read_rnd_buffer_size=4M
server_id=1
# 本次添加的 binlog 目录
log_bin="D:/phpstudy_pro/Extensions/MySQL8.0.12/data/binlogs"
skip-external-locking=on
sort_buffer_size=256kb
table_open_cache=256
thread_cache_size=16
tmp_table_size=64M
wait_timeout=120
# 客户端
[client]
port=3306
default-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)