mysql 中二进制日志

本文介绍了MySQL日志文件系统,重点讲解了二进制日志的构成、配置方法,包括如何在my.ini中设置二进制日志,并通过FLUSH LOGS语句进行管理。此外,还阐述了二进制日志在MySQL复制和数据恢复中的重要作用。
同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。二进制日志,也叫binary log,是MySQL Server中最为重要的日志之一

1、MySQL日志文件系统的组成

   a、错误日志:记录启动、运行或停止mysqld时出现的问题。
   b、通用日志:记录建立的客户端连接和执行的语句。
   c、更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。
   d、二进制日志:记录所有更改数据的语句。还用于复制。
   e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
   f、Innodb日志:innodb redo log

缺省情况下,所有日志创建于mysqld数据目录中。
可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。 当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,则日志被老化。 对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志

2、二进制日志(Binary log)

    a、它包含的内容及作用如下:
        包含了所有更新了数据或者已经潜在更新了数据(比如没有匹配任何行的一个DELETE)
        包含关于每个更新数据库(DML)的语句的执行时间信息
        不包含没有修改任何数据的语句,如果需要启用该选项,需要开启通用日志功能
        主要目的是尽可能的将数据库恢复到数据库故障点,因为二进制日志包含备份后进行的所有更新
        用于在主复制服务器上记录所有将发送给从服务器的语句
        启用该选项数据库性能降低1%,但保障数据库完整性,对于重要数据库值得以性能换完整。有些类似于Oracle开启归档模式
    b、开启二进制日志的方法及属性
         使用--log-bin[=file_name]选项或在配置文件中指定log-bin启动时,mysqld写入包含所有更新数据的SQL命令的日志文件。对于未给出file_name值, 默认名为-bin后面所跟的主机名。在未指定绝对路径的情形下,缺省位置保存在数据目录下。每个二进制日志名会添加一个数字扩展名用于日志老化,因此不支持自定义的扩展名,会被mysql数字扩展名动态替换。若当前的日志大小达到max_binlog_size,则自动创建新的二进制日志。对于大的事务,二进制日志会超过max_binlog_size设定的值。也即是事务仅仅写入一个二进制日志。由是可知,二进制日志文件大小接近,其size不是完全相等,这点不同于oracle。

3、更改my.ini 找到[mysqld]部分,输入以下命令

#启用二进制日志
server-id = 1
log-bin = e:/mysqlbin/binlog.log  
log-bin-index = e:/mysqlbin/binlog.index

4、二进制日志设置步骤

1)、设置二进制日志文件

my.ini文件的[mysqld]下添加:
    #custom define
    log-bin=mysql-bin

2)、重启mysql服务

cmd中net stop mysql
     net start mysql

3)、查看二进制日志文件存放的目录,当前的二进制日志文件

show variables like 'datadir';
show master status;

4)、利用mysqlbinlog工具查看二进制日志文件

mysqlbinlog 二进制日志文件完整路径
如:mysqlbinlog C:\Documents and Settings\All Users\Application Data\MySQL\MySQL Server 5.1\data\mysql-bin.000002

5、 查看是否已经开启

show variables like "log_%";

这里写图片描述

6、二进制日志的作用

 数据回复 
 主从数据库。用于slave端执行增删改,保持与master同步。
### MYSQL二进制数据类型的定义和使用 #### 1. 二进制数据类型概述 在 MySQL 中,二进制数据类型用于存储二进制数据,例如图片、音频、视频文件等。MySQL 提供了几种不同的二进制数据类型,每种类型适用于不同的用途[^1]。 #### 2. 常见的二进制数据类型及其说明 - **BIT(M)**:用于存储位字段值,`M` 表示位数,范围为 1 到 64。例如,`BIT(8)` 可以存储一个字节的数据。 示例: ```sql CREATE TABLE bit_example ( id INT AUTO_INCREMENT PRIMARY KEY, flag BIT(1) NOT NULL ); INSERT INTO bit_example (flag) VALUES (b'1'); ``` - **BINARY(M)**:固定长度的二进制字符串,`M` 表示最大字节长度。如果插入的数据长度不足 `M`,则会在后面用 `\0` 补齐[^5]。 示例: ```sql CREATE TABLE binary_example ( id INT AUTO_INCREMENT PRIMARY KEY, data BINARY(3) NOT NULL ); INSERT INTO binary_example (data) VALUES ('a'); -- 实际存储为 "a\0\0" ``` - **VARBINARY(M)**:可变长度的二进制字符串,`M` 表示最大字节长度。与 `VARCHAR` 类似,但存储的是二进制数据。 示例: ```sql CREATE TABLE varbinary_example ( id INT AUTO_INCREMENT PRIMARY KEY, data VARBINARY(10) NOT NULL ); INSERT INTO varbinary_example (data) VALUES ('abc'); -- 实际存储为 "abc" ``` - **TINYBLOB**:用于存储非常小的二进制对象,最大长度为 255 字节。 - **BLOB**:用于存储较大的二进制对象,最大长度为 65,535 字节。 - **MEDIUMBLOB**:用于存储中等大小的二进制对象,最大长度为 16,777,215 字节。 - **LONGBLOB**:用于存储非常大的二进制对象,最大长度为 4,294,967,295 字节[^2]。 #### 3. 二进制数据类型的特性 - **固定长度 vs 可变长度**:`BINARY` 是固定长度的,而 `VARBINARY` 是可变长度的。这与 `CHAR` 和 `VARCHAR` 的区别类似[^3]。 - **存储空间**:不同类型的二进制数据占用的存储空间不同,具体取决于其最大长度和实际存储的数据量[^2]。 - **时区无关性**:二进制数据类型不涉及时区问题,因为它们存储的是原始二进制数据,而不是日期或时间信息。 #### 4. 示例:将字符串以二进制形式存储到数据库中 如果需要将字符串数据以二进制形式存储到数据库中,可以使用 `VARBINARY` 或其他二进制类型,并确保在应用层正确处理编码转换[^4]。 示例: ```sql CREATE TABLE binary_storage ( id INT AUTO_INCREMENT PRIMARY KEY, file_data LONGBLOB NOT NULL ); -- 插入二进制数据(假设通过程序传递) INSERT INTO binary_storage (file_data) VALUES (UNHEX('48656C6C6F')); -- "Hello" 的十六进制表示 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值