精华内容
下载资源
问答
  • 开启MySQLbinlog日志

    万次阅读 多人点赞 2017-07-08 13:41:15
    binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作。通过binlog日志我们可以做数据恢复,做主...如何开启mysqlbinlog日志呢? 在my.inf主配置文件中直接添加三行 log_bin=ON log_bin_basenam
    binlog 就是binary log,二进制日志文件,这个文件记录了mysql所有的dml操作。通过binlog日志我们可以做数据恢复,做主住复制和主从复制等等。对于开发者可能对binlog并不怎么关注,但是对于运维或者架构人员来讲是非常重要的。
     
    如何开启mysql的binlog日志呢?
    在my.inf主配置文件中直接添加三行
    log_bin=ON
    log_bin_basename=/var/lib/mysql/mysql-bin
    log_bin_index=/var/lib/mysql/mysql-bin.index
    三个参数来指定,
    第一个参数是打开binlog日志
    第二个参数是binlog日志的基本文件名,后面会追加标识来表示每一个文件
    第三个参数指定的是binlog文件的索引文件,这个文件管理了所有的binlog文件的目录
     
    当然也有一种简单的配置,一个参数就可以搞定
    log-bin=/var/lib/mysql/mysql-bin
    这一个参数的作用和上面三个的作用是相同的,mysql会根据这个配置自动设置log_bin为on状态,自动设置log_bin_index文件为你指定的文件名后跟.index
     
    这些配置完毕之后对于5.7以下版本应该是可以了,但是我们这个时候用的如果是5.7及以上版本的话,重启mysql服务会报错。这个时候我们必须还要指定一个参数
    server-id=123454
    随机指定一个不能和其他集群中机器重名的字符串,如果只有一台机器,那就可以随便指定了
     
    有了上述的配置之后,我们就可以重新启动我们的mysql了
    # CentOS 6
    service mysqld restart
    
    
    # CentOS 7
    systemctl restart mysqld

    启动成功之后,我们可以登陆查看我们的配置是否起作用

    show variables like '%log_bin%'
    下面我们可以找到这个目录来看一下
     
    因为我这里已经操作过数据库了,所以能看到这里有多个mysql-bin的文件,还有一个mysql-bin.index的文件,我们可以打开这个文件来看一下
    到这里,我们的binlog日志就打开了。

    对于binlog日志的具体操作,可以参考
    binlog日志详解:http://blog.csdn.net/king_kgh/article/details/74833539
    使用binlog恢复数据:http://blog.csdn.net/king_kgh/article/details/74890381
     
    展开全文
  • MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。我们今天重点...

    MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log),中继日志(relay log)。

    我们今天重点来研究下BinLog.

    当数据发生增删改,创建数据库对象都会记录到binlog中,数据库的复制也是基于binlog进行同步数据;

    默认情况下,Mysql的BinLog是关闭的,5.7版本及以上,需要在my.cnf文件中通过配置开启,配置如下:

    log_bin=/var/lib/mysql/bin-logs/mysql-bin

    server-id=1

    binlog_format=ROW

    其中,mysql-bin为binlog文件的前缀,例如mysql-bin.000001

    通过命令查看当前Binlog的相关配置:

    show variables like '%log_bin%';

    7d08497c571d21c9019d9f5491cbd476.png

    执行Delete语句:

    delete from salaries

    where emp_no='11090'

    30292af0650f87ad3d964919c1d7260e.png

    查看bin_log日志:

    /usr/bin/mysqlbinlog --no-defaults --database=employees --base64-output=decode-rows -v --start-datetime='2020-10-05 16:00:00' --stop-datetime='2020-10-06 00:00:00' /var/lib/mysql/bin-logs/mysql-bin.000002 | more

    c13eea567778fbb07ec1d61f58349cfc.png
    展开全文
  • 开启MySQL binlog日志 1、登录MySQL,查看binlog日志的状态 登录MySQL后,输入show variables like '%log_bin%';查看到binlog日志为OFF关闭状态;(我的已经开了) mysql> show variables like '%log_bin%'; ...

    开启MySQL binlog日志

    1、登录MySQL,查看binlog日志的状态

     登录MySQL后,输入show variables like '%log_bin%';查看到binlog日志为OFF关闭状态;(我的已经开了)

    mysql> show variables like '%log_bin%';
    +---------------------------------+---------------------------------+
    | Variable_name                   | Value                           |
    +---------------------------------+---------------------------------+
    | log_bin                         | off                             |
    | log_bin_basename                |                                 |
    | log_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>
    

     

    2、开启MySQL binlog日志

     退出MySQL,使用vi编辑器修改MySQL的my.cnf配置文件

    在my.cnf配置文件中添加如下图的两句

    [root@localhost /]# vim /opt/mysql/my.cnf
    
    
    #开启二进制日志(默认放到data)
    log-bin=mysql-bin
    

    3、重启MySQL

     

    查看/var/lib/mysql目录下的内容

     使用命令:ls /var/mysql/data

    auto.cnf  ib_logfile0  localhost.localdomain.err  mysql             mysql-bin.000002  mysql-bin.000004  oper                test
    ibdata1   ib_logfile1  localhost.localdomain.pid  mysql-bin.000001  mysql-bin.000003  mysql-bin.index   performance_schema  zabbix
    

    此时再次进入MySQL,查看binlog日志的状态。显示binlog日志为ON开启状态

    mysql> show variables like '%log_bin%';
    +---------------------------------+---------------------------------+
    | Variable_name                   | Value                           |
    +---------------------------------+---------------------------------+
    | log_bin                         | ON                              |
    | log_bin_basename                | /var/mysql/data/mysql-bin       |
    | log_bin_index                   | /var/mysql/data/mysql-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)
    

    binlog文件 恢复mysql 数据库

    介绍

    mysqlbinlog命令用法:shell> mysqlbinlog [options] log_file ...

    1)  mysqlbinlog 选项示例

    常见的选项有以下几个:

    --start-datetime

    从二进制日志中读取指定等于时间戳或者晚于本地计算机的时间。取值如:="1470733768" 或者="2016-08-09  5:09:28"

    示例: 

    [root@hcloud ~]# mysqlbinlog --start-datetime="2016-08-09 5:05:27" /var/mysql/data/mysql-bin.000001

    --stop-datetime

    从二进制日志中读取指定小于时间戳或者等于本地计算机的时间  取值和上述一样

    --start-position        

    从二进制日志中读取指定position 事件位置作为开始。取值:="2698"

    示例:

    [root@hcloud ~]# mysqlbinlog --start-position="2698" /var/mysql/data/mysql-bin.000001

    --stop-position

    从二进制日志中读取指定position 事件位置作为事件截至。取值:="2698"

    备份

    1)  安装好mysql后,检查开启binlog(上面已给出)

    2)  检查下binlog

    mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       613 |
    | mysql-bin.000002 |       143 |
    | mysql-bin.000003 |      5963 |
    | mysql-bin.000004 |      2460 |
    +------------------+-----------+
    4 rows in set (0.00 sec)
    

    3)  先创建一些原始数据。

    4)  备份还原 (完整备份以及还原)

    先备份

    [root@hcloud ~]# mysqldump -uroot -p Test_DB > /data/mysqlbackup/Test_DB_0809-16:50.sql
    Enter password:

    中间删数据

    恢复

    [root@hcloud ~]# mysql -uroot -p Test_DB < /data/mysqlbackup/Test_DB_0809-16\:50.sql

    5)  利用binlog模拟还原

    删数据

    利用binlog恢复

    a.生成sql文件

    mysqlbinlog --stop-position=1709 /var/mysql/data/mysql-bin.000004 > /tmp/binlog.sql

    b.sql文件导入

     

    展开全文
  • 大家有没有碰到过由于误操作把测试数据库的一张表给删除了,导致测试的数据都被删除了,然后手足无措...MySql数据恢复主要依赖的是Binlog日志,在之前的文章中也有讲过,大家有兴趣可以去看看,这里简单介绍一下: bin

    大家有没有碰到过由于误操作把测试数据库的一张表给删除了,导致测试的数据都被删除了,然后手足无措,测试把你一定数落,顿时感觉自己要死了?今天就教你即使误删了也可以将删除的数据恢复,以后误删再也不用惊吓了。当然,实际操作中最好还是认真对待,小心操作。还有就是在大公司内,数据也不是你想删就能删掉的,有无数权限/备份阻拦着你,所以通常情况下你都不会有机会,但还是备着以防万一。

    Binlog简述

    MySql数据恢复主要依赖的是Binlog日志,在之前的文章中MYSQL专题-MySQL三大日志binlog、redo log和undo log也有讲过,大家有兴趣可以去看看,这里简单介绍一下:

    • binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE…)以及表数据修改(INSERT、UPDATE、DELETE…)的二进制日志;
    • binlog不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但你可以通过查询通用日志来查看MySQL执行过的所有语句。

    通过Binlog日志,我们解决以下的问题:

    • 恢复数据:(今天要说的重点);
    • 数据库复制:主从数据库是通过将binlog传给从库,从库有两个线程,一个I/O线程,一个SQL线程,I/O线程读取主库传过来的binlog内容并写入到relay log,SQL线程从relay log里面读取内容,写入从库的数据库;
    • 审计:用户可以通过二进制日志中的信息来进行审计,判断是否有对数据库进行注入攻击。

    所以说,想要能够恢复数据,首先你得打开Mysql的binlog,在平常你自己安装的单机Mysql中,默认情况下不会开启。下面就一步步地实践下如何开启你服务器上的Binlog日志。

    Binlog开启(Windows示范)

    首先进入数据库控制台,运行指令:
    在这里插入图片描述
    可以看到我们的binlog是开启的(MySql8.0.21默认是开启的状态,8.0以后都是默认开启,加了反而会报错),如果你的是低版本的没有开启,输入 net stop mysql停止MySql,修改mysql的配置文件my.ini。添加如下配置:

    # Binary Logging.
    server_id=1(高版本,需要指定server-id,唯一就可以)
    log-bin=mysql-bin 
    binlog-format=Row 
    

    输入 net start mysql重启mysql服务,然后再执行show variables like 'log_bin’就可以看到已经开启了,执行 show binary logs,发现有对应的binlog日志:
    在这里插入图片描述
    当然你也可以到对应的Mysql安装目录的data中进行查看:
    在这里插入图片描述
    如果想关闭binlog日志,低版本的直接去掉就行,自动默认的加入skip-log-bin,然后重启即可。需要说明的是,每当我们重启MySQL一次,会自动生成一个binlog文件。我们也可以手动的来刷新binlog文件,通过 flush logs,同样会新创建一个binlog文件。实际上当服务器在重启时,也会调用flush logs操作。

    Binlog实操

    首先新建数据库binLogTest,新建一张表tableLog1,SQL代码如下:

    CREATE DATABASE `binLogTest` ;
    USE `binLogTest`;
    DROP TABLE IF EXISTS `tableLog1`;
    CREATE TABLE `tableLog1` (
      `id` int(11) DEFAULT NULL,
      `name` varchar(20) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
    

    然后插入两条数据,分别是 (1,‘tom’),(2,‘jack’)

    INSERT INTO `tableLog1` VALUES (1,'tom'),(2,'jack');
    

    执行完成以后,我们再控制台使用show master status看以下binlog日志的状态:
    在这里插入图片描述
    可以看到,现在我们正在使用 binlog.0000004 ,并且这个文件现在正在记录到1207行。
    然后,使用flush logs来主动刷新一次binlog,然后再次查看状态:
    在这里插入图片描述
    可以看到,现在日志文件在 binlog.000005 文件中,位置为156。也就是我们主动刷新了一次binlog,生成了新的binlog.000005,而binlog.000004则已经归档了,不会再写入新的日志进去了。
    接下来我们再插入两条数据:

    insert into 'tableLog1' values (3,'Lili'),(4,'Jim');
    

    可以看到我们已经成功插入了4条数据:
    在这里插入图片描述
    我们再次flush logs,把binlog.000005日志存档,开启新的binlog.000006日志,这样,每次我们插入的数据彼此独立。实际情况下,binlog会比较复杂,这里也是做了简化,为了理解更方便。
    在这里插入图片描述
    然后我们删除id为4的数据,并且再次刷新binlog,如此一来,binlog.000006里面只有一条删除操作:
    在这里插入图片描述
    我们来好好观察下binlog.00005和binlog.00006两个binlog,使用命令:show binlog events in 'binlog.000005’和show binlog events in ‘binlog.000006’:
    在这里插入图片描述
    一条插入操作的完整日志如上面标注所示。我们的目的是恢复误删的数据,其实就是将binlog.000005日志的插入记录重演一遍,而不需要理会binlog.000006的操作(因为删除是一个误操作)。在实际的线上环境中,我们肯定需要将binlog导出后,仔细筛选出误操作,并将其排除,之后再运行binlog,这里为了方便演示直接进行。我们只做一个恢复两条插入语句的操作。
    首先看到我们的数据库中的确是不存在id为4的记录。

    在这里插入图片描述
    然后我们执行以下语句:

    mysqlbinlog --no-defaults binlog.000005 --start-position 156 --stop-position 470 | mysql -uroot -p binLogTest
    

    需要说明的是,这里的语句执行不要在Mysql中执行,否则会报错:
    在这里插入图片描述
    应该在binlog所在地方再开一个执行窗口执行:
    在这里插入图片描述
    执行完成以后我们在看一下数据:
    在这里插入图片描述
    看到的确是恢复了数据,为什么会有两条id为3的数据,是因为我们执行的文件是插入id为3和4的binlog,大家可以依据自己数据的情况进行恢复,只要配置不同的起始位置即可:

    --start-position:从二进制日志中读取指定position 事件位置作为开始
    --stop-position:从二进制日志中读取指定position 事件位置作为事件截至
    

    还有一点需要说明的,在最开始执行语句没有加入–no-defaults,导致出错:
    在这里插入图片描述
    大家加入即可。

    看完binlog日志恢复数据的原理,希望大家以后在定期备份数据库的脚本里,也能够加上刷新binlog日志的命令,这样一旦某天丢失数据,可以将当天binlog数据单独拿出来还原,做到清晰可辨,也加快恢复效率。

    猜你感兴趣
    MYSQL专题-绝对实用的MYSQL优化总结
    MYSQL专题-MySQL事务实现原理
    MYSQL专题-MVCC多版本并发控制
    MYSQL专题-MySQL三大日志binlog、redo log和undo log

    更多文章请点击:更多…

    展开全文
  • binlog打开设置 win10 查看数据库binlog是否打开 show variables like 'log_bin'; show variables like 'log_bin%';...#开启binlog日志 server_id=1 log-bin=mysql-bin binlog-format=ROW bi...
  • linux开启MySQL binlog日志

    万次阅读 2018-02-07 13:45:41
    binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份...下面就介绍一下开启MySQL binlog日志的过程:1、登录MySQL,查看binlog日志的状态 登录MySQL后,输入show variables like...
  • Mysql开启binlog日志

    2020-11-13 16:54:09
    Mysql安全设置—开启binlog日志 binlog介绍: binlog是二进制文件; binlog记录了数据库的所有dml操作; 通过binlog日志可以进行数据恢复操作; binlog配置: 修改my.cnf数据库的配置文件,配置binlog; 重启mysql...
  • binlog日志 [mysql优化](#d # 一.事务原理 事务(Transaction)是数据库区别于文件系统的重要特性之一,事务就是用户定义的一系列执行SQL语句的操作,这些操作要么完全地执行,要么完全地都不执行, 它是一个不可...
  • binlog日志简介: binlog 就是binary log,二进制日志文件,这个文件记录了MySQL所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间。 binlog日志包括两类文件: 1)二进制日志...
  • 开启MySQL binlog日志

    2021-01-23 18:33:13
    binlog日志,即binary log,是二进制日志文件。它有两个作用,一是增量备份,即只备份新增的内容;二是用于主从复制等,即主节点维护了一个binlog日志文件,从节点从binlog中同步数据 前提 安装Mysqlhttps://...
  • 1.测试使用mysql版本: mysql-5.6.43 ...Windows环境下mysql开启binlog日志方法: 首先确认mysql是否开启binlog日志 登录Mysql,输入:Show variables like ‘log%’; 未开启binlog日志时的情况如下。 配
  • 开启mysqlbinlog日志

    2021-01-27 21:57:16
    查看binlog日志是否开启 show global variables like 'log_bin'; 我这里是已经开启了,默认是不开启的! 设置binlog开启 找到你mysql的my.ini目录,我的MySQL是免安装版本的,所以我的ini文件好找,添加下面配置:...
  • CentOS7开启MySQL binlog日志

    千次阅读 2018-09-30 12:00:25
    开启MySQL binlog日志 binlog日志是二进制日志文件。它有两个作用: (1) 增量备份,即只备份新增的内容 (2) 用于主从复制等(主节点维护了一个binlog日志文件,从节点从binlog中同步数据) vim /etc/my.cnf #添加 log...
  • 1、开启binlog日志。 找到mysql安装目录,打开配置文件my.ini 在[mysqld]下添加: bin-log=mysql-bin 保存后重启mysql。此时在data目录会生成mysql-bin.000001和mysql-bin.index。 注意:MySQL每次重启服务会...
  • 2. 开启MySQL binlog日志 退出MySQL,使用vi编辑器修改MySQL的my.cnf配置文件 在my.cnf配置文件中添加如下图的两句 server-id : 单个结点的id,这里由于只有一个结点,所以可以把id随机指定...
  • MySQL开启binlog日志

    2019-01-03 17:56:00
    查看是否开启binlog日志功能 show variables like '%log_bin%'; 现在是关闭状态 开启binlog日志方法一 在配置文件[mysqld]下添加 log_bin = /server/mysql/data/mysql-bin 开启binlog日志方法二...
  • MySql开启binlog日志

    千次阅读 2017-03-29 09:55:44
    1、开启binlog日志 启动时添加参数--log-bin,命令: mysqld --log-bin 2、binlog日志查看 缺省的在mysql安装目录的data子目录下会出现一个***-bin.0000001的文件。使用mysqlbinlog查看。测试: (1)mysql -u root ...
  • 传送门开启Binlog日志使用Binlog日志恢复数据启动Binlog利用binlog日志重做数据库操作通过binlog日志恢复表记录 开启Binlog日志 修改配置文件,并重启服务 vim /etc/my.cnf [mysqld] server_id=1 #指定server_id ...
  • 一、环境介绍 canal是阿里开源的中间件,主要用于同步mysql数据库变更。具体参见:https://github.com/alibaba/canal/relea...
  • windows 开启mysqlbinlog日志

    千次阅读 2019-07-16 09:27:57
    一、查看binlog日志是否开启 show global variables like ‘log_bin’; 如果返回的是 log_bin | OFF 那么就是没有开启,ON 则是已经开启,我这里已经开启了。 二、设置binlog开启 找到my.ini文件,添加 log_bin= ...
  • 发现是没有开启binlog 修改Docker的MySQL的my.cnf配置文件 添加下面内容,注意: log-bin = /logs/mysql-bin.log 是Docker内部的路径,不是Linux宿主机的路径 #设置日志格式 binlog_format = mixed #设置日志路径,注意...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 45,974
精华内容 18,389
关键字:

binlog日志开启mysql

mysql 订阅