Linux系统MySQL二进制日志(binary log)

概念
二进制日志(Binary Log)也可叫作变更日志(Update Log),是 MySQL 中非常重要的日志。主要用于记录数据库的变化情况,即 SQL 语句的 DDL 和 DML 语句,不包含数据记录查询操作。

作用
主要用于灾难时数据恢复和主从复制,以及审计(audit)操作。

使用经验
实际工作中,不建议把二进制日志文件与数据库的数据文件放在同一块硬盘上,好处是这样即使数据文件所在的硬盘被破坏,也可以使用另一块硬盘上的二进制日志来恢复数据库文件。两块硬盘同时坏了的可能性要小得多,这样可以保证数据库中数据的安全。

1、二进制日志启动状态查看

mysql> show variables like 'log_bin';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| log_bin                         | OFF   |
+---------------------------------+-------+
# OFF表示未开启,ON表示开启

2、查看二进制日志文件

myslq> show binary logs;
myslq> show master logs; 	# 与上条命令一样
myslq> show master status;  # 查看当前正在写入的二进制日志文件

3、开启二进制日志 log-bin

vi /etc/my.cnf
#!修改my.cnf,在[mysqld]下面增加log-bin=dir/[filename],其中,dir 参数指定二进制文件的存储路径;
# filename 参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。
# 然后重启MySQL即可。每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename 部分不会改变,number 会不断递增。
# 同时也要添加参数 server-id(随便一个唯一值)。如下所示:
# 配置文件中加入以下两行即可开启二进制日志文件,且文件会保存在mysql数据存放目录下
[mysqld]
log-bin=mysql-bin 	# 日志文件会默认存放在mysql数据库存放目录下
# log-bin=/home/ichroma/mysqllog/mysql-bin 	# 日志文件设置存放位置为/home/ichroma/mysqllog/
server-id=1

4、查看二进制日志文件内容

# 二进制日志使用二进制格式存储,不能直接打开查看。如果需要查看二进制日志,必须使用 mysqlbinlog 命令。
mysqlbinlog filename.number
sudo mysqlbinlog  /usr/local/LAMP/mysql/var/mysql-bin.000017
# 也可以将日志文件拷贝成log或txt格式后查看
sudo mysqlbinlog  /usr/local/LAMP/mysql/var/mysql-bin.000017  >  /home/ichroma/log.log
sudo mysqlbinlog  /usr/local/LAMP/mysql/var/mysql-bin.000017  >  /home/ichroma/log.txt

5、定义二进制日志过期时间

# 修改my.cnf,在[mysqld]下面增加expire_logs_days参数,不设置的话,默认值是0,即不自动清除。下面参数10表示天数
expire_logs_days = 10   # 设置日志过期时间为10天,到时间则自动删除日志文件 

6、定义二进制日志文件大小

# 修改my.cnf,在[mysqld]下面增加max_binlog_size参数,不设置的话,默认值为1GB。
# 下面设置表示设置每个日志文件大小为100M。如果二进制日志写入的内容大小超出给定值,日志就会发生滚动(关闭当前文件,重新打开一个新的日志文件)。
# 不能将该变量设置为大于 1GB 或小于 4096B(字节)。
max_binlog_size = 100M

7、清理mysql数据库的日志文件

mysql> reset master;   # 删除所有日志,删除所有二进制日志文件。并重新创建二进制文件,扩展名从000001开始
mysql> PURGE MASTER LOGS TO 'mysql-bin.000010';  # 删除文件名编号比指定文件名编号小的所有日志文件
mysql> purge {master | binary} logs before 'date';     # 删除指定日期以前的所有日志文件

8、暂停二进制日志功能

# 我们可以在执行 SQL 语句之前执行下面SQL语句暂停或启动二进制日志功能
set sql_log_bin = 0; 	# 暂停
set sql_log_bin = 1; 	# 启动

猜你喜欢

转载自blog.csdn.net/qq_34125713/article/details/127918514