一、MySQL二进制日志
1.1 MySQL二进制日志
MySQL的二进制日志(binary log)是一个二进制文件,记录了所有对mysql数据库的修改事件,包括增删改事件和对表结构的修改事件。它不记录SELECT、SHOW等那些不修改数据的SQL语句。二进制日志(binary log)主要用于数据库恢复和主从复制,以及审计(audit)操作。
1.2 二进制日志状态查看
1、查看是否开启二进制日志
- 系统变量log_bin的值为OFF表示没有开启二进制日志(binary log)。ON表示开启了二进制日志(binary log)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
2、查看当前服务器所有的二进制日志文件
mysql> show binary logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000004 | 478421400 |
| mysql-bin.000005 | 9653 |
| mysql-bin.000006 | 340631484 |
+------------------+-----------+
3 rows in set (0.00 sec)
mysql> show master logs;
+------------------+-----------+
| Log_name | File_size |
+------------------+-----------+
| mysql-bin.000004 | 478421400 |
| mysql-bin.000005 | 9653 |
| mysql-bin.000006 | 340631484 |
+------------------+-----------+
3 rows in set (0.00 sec)
3、查看当前二进制文件状态
1.3 二进制日志开启
查看系统变量log_bin,如果其值为OFF,表示没有开启二进制日志(binary log),如果需要开启二进制日志,则 在my.cnf中[mysqld]下面添加log-bin [=DIR[filename]] ,DIR参数指定二进制文件的存储路径;filename参数指定二级制文件的文件名。 其中filename可以任意指定,但最好有一定规范。
系统变量log_bin是静态参数,不能动态修改的(因为它不是Dynamic Variable)。
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | OFF |
+---------------+-------+
1 row in set (0.00 sec)
mysql> set global log_bin=mysql_bin;
ERROR 1238 (HY000): Variable 'log_bin' is a read only variable
1、修改my.cnf: 在[mysqld]下面增加log_bin=mysql_bin,重启MySQL后,log_bin变为了ON,二进制日志(binary log)默认放在数据目录下(系统变量datadir下)
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set (0.00 sec)
mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/mysql_bin_log |
| log_bin_index | /var/lib/mysql/mysql_bin_log.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------------+
6 rows in set (0.00 sec)
mysql>
2、若在my.cnf里面只设置log_bin,但是不指定file_name,然后重启数据库,则二进制日志文件名称为${hostname}-bin 这样的格式。
mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------------+
| Variable_name | Value |
+---------------------------------+------------------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/server1-bin |
| log_bin_index | /var/lib/mysql/server1-bin.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+------------------------------------+
6 rows in set (0.00 sec)
mysql>
1.4 二进制日志切换
1、命令flush logs切换二进制日志
mysql> flush logs;
Query OK, 0 rows affected (0.03 sec)
每次重启MySQL服务也会生成一个新的二进制日志文件,相当于二进制日志切换。
切换二进制日志时,你会看到这些number会不断递增。另外,除了这些二进制日志文件外,你会看到还生成了一个server1-bin.index的文件,这个文件中存储所有二进制日志文件的清单又称为二进制文件的索引。
1.5 二进制日志删除
1、删除某个日志之前的所有二进制日志文件:purge binary logs to ‘Log_name’; 这个命令会修改index中相关数据。
2、清除某个时间点以前的二进制日志文件:purge binary logs before ‘2017-03-10 10:10:00’;
3、清除7天前的二进制日志文件:purge master logs before date_sub( now( ), interval 7 day);
4、清除所有的二进制日志文件(当前不存在主从复制关系):reset master;
5、**设置自动清理expire_logs_days参数,其默认值为0,表示不启用过期自动删除功能,**如果启用了自动清理功能,表示超出此天数的二进制日志文件将被自动删除,自动删除工作通常发生在MySQL启动时或FLUSH日志时。
mysql> show variables like 'expire_logs_days';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| expire_logs_days | 7 |
+------------------+-------+
1 row in set (0.00 sec)
mysql>