首页 > 数据库 >mysql 5.7安装及使用binlog日志恢复数据库

mysql 5.7安装及使用binlog日志恢复数据库

时间:2022-11-08 18:23:39浏览次数:40  
标签:bin binlog 5.7 -- MySQL mysql 日志

目录

mysql 5.7安装及使用binlog日志恢复数据库

我这里以mysql5.7为例

binlog日志介绍

是MySQL server维护的一组日志文件,用来记录对数据进行修改的信息。
MySQL 的二进制日志 binlog 可以说是 MySQL 最重要的日志,它记录了所有的 DDL 和 DML 语句(除了数据查询语句select、show等),以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。binlog 的主要目的是复制和恢复。

主要应用场景有:

  • MySQL主从复制
  • 数据恢复

Binlog日志格式,支持三种格式类型

  • STATEMENT:基于SQL语句的复制(statement-based replication, SBR),语句级别,记录写操作的SQL语句
    • 优点:不需要记录每一行的变化,减少了binlog日志量,节约了IO, 提高了性能。
    • 缺点:可能会造成数据不一致,比如now()函数,random()函数。比如update user set name = ‘张三’ where time < now() 。
  • ROW:基于行的复制(row-based replication, RBR),行级别,记录每次操作后行的变化。
    • 优点: 记录的是行变化,不会出现数据不一致
    • 缺点:以行的记录保存,会占用空间。
  • MIXED:混合模式复制(mixed-based replication, MBR)
    • 从5.1.8版本开始,MySQL提供了Mixed格式,实际上就是Statement与Row的结合。
    • 在Mixed模式下,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种

安装mysql5.7

//下载镜像源
wget http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
yum -y install mysql57-community-release-el7-11.noarch.rpm
//--nogpgcheck  (不校验数字签名)
yum -y install mysql-server  --nogpgcheck

//启动mysql
systemctl start mysqld.service
//获取初始密码
cat /var/log/mysqld.log| grep password

//登陆mysql
mysql -uroot -p
//修改密码
ALTER USER USER() IDENTIFIED BY '123456Admin@123';
//授权
grant all privileges on *.* to 'root'@'%' identified by '123456Admin@123' with grant option;
 //刷线权限
flush privileges;

//修改密码策略,把root密码改成更简单的密码
set global validate_password_policy=0;
set global validate_password_length=1;
flush privileges;

//修改root的密码为root
alter user 'root'@'localhost' identified by 'root';

//授权
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

开启Binlog日志

通过配置 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf 配置文件的 log-bin 选项:

#配置修改
//配置binlog日志路径以及日志文件名前缀、生成的日志格式为:bin-log.000001
log-bin=/var/lib/mysql/bin-log
//注意5.7以及更高版本需要配置本项、自定义,保证唯一性
server-id=1
//binlog格式,有3种statement,row,mixed,上面讲到了
binlog-format=mixed
//表示每1次执行写入就与硬盘同步,会影响性能,为0时表示,事务提交时mysql不做刷盘操作,由系统决定
sync-binlog=1

查看binlog日志状态和内容

//查看日志状态
show variables like '%log_bin%';
//查看日志内容
show master status;
show binlog events in 'bin-log.000001';

image

//我们创建一个schema
create databases alex;
//再次查看binlog内容,呵呵,发现了吗,已经把schema创建的记录到log了
show binlog events in 'bin-log.000001';

image

通过Binlog恢复数据

我们进入刚才配置文件里写的log的路径查看binlog

image

//三种恢复方式
//通过Binlog恢复数据
/usr/bin/mysqlbinlog --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello


//通过指定位置恢复数据
/usr/bin/mysqlbinlog --start-position=573 --stop-position=718 --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello
--start-position=573 开始位置
--stop-position=718  结束位置


//通过指定时间恢复数据
/usr/bin/mysqlbinlog --start-datetime="2021-06-27 20:58:18" --stop-datetime="2021-06-27 20:58:35" --database=hello /var/lib/mysql/bin-log-1.000001 | /usr/bin/mysql -uroot -p123456zy -v hello
//查看开始和结束位置
show binlog events in 'bin-log-1.000001'; 

image

清理MySQL的binlog日志

MySQL的binlog是以二进制形式打印的日志,没设置自动删除的话,时间长了就会占用大量存储空间。删除MySQL的binlog日志有两种方法:自动删除和手动删除。

自动删除

  • 永久生效,修改MySQL配置文件my.cnf,配置binlog的过期时间,重启生效。
    expire_logs_days=30
    
  • 临时生效:即时生效,重启后失效。
    -- 设置过期时间为30天
    set global expire_logs_days=30;
    

手动删除

手动删除前需要先确认主从库当前在用的binlog文件。

主库:show master status;
从库:show slave status\G

假设当前在用的binlog文件为master-bin.000277,现需要删除master-bin.000277之前的所有binlog日志文件(不删master-bin.000277):

PURGE MASTER LOGS TO 'master-bin.000277';

其它

查看binlog文件

show binary logs;

标签:bin,binlog,5.7,--,MySQL,mysql,日志
From: https://www.cnblogs.com/liwenchao1995/p/16870725.html

相关文章

  • Python 生成MySQL数据库的表结构到word文档
    原理:读取系统表的数据,调用python-docx库生成word文档。importpymysqlfromdocximportDocumentfromdocx.sharedimportInchesdocument=Document()document.a......
  • mysql根据json字段内容作为查询条件(包括json数组)检索数据
    最近用到了mysql5.7的json字段的检索查询,发现挺好用的,记录一下笔记我们有一个日志表,里面的data字段是保存不同对象的json数据,遇到想根据里面的json的字段内容作为条件查询......
  • 【MySQL】基础练习题
    习题参考:https://blog.csdn.net/qq_41936662/article/details/80393172数据库准备建表语句学生表studentCREATETABLE`student`(`s_id`varchar(20)NOTNULL,......
  • dpkg 安装mysql
    名称版本系统Ubuntu16.04MySQL5.7.26下载安装包wgethttps://dev.mysql.com/get/Downloads/MySQL-8.mysql-server_8.0.16-2ubuntu18.04_amd64.deb-bun......
  • MySQL锁表解锁表
    CREATETABLEt1(idint(11)NOTNULL,valvarchar(10)DEFAULTNULL,PRIMARYKEY(id))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;INSERTintot1(i......
  • MySQL主从复制
    MySQL主从复制主机名称IP备注mysql-master192.168.175.93mastermysql-slave192.168.175.130slave在mysql-master上创建一个复制账号;mysql-master......
  • MySql -基础学习3 - DML语言
    数据库的意义:数据存储,数据管理DML语言,数据操作语言insert    -  插入update   -  修改delete   -  删除1.插入--插入语句--inse......
  • Mysql常见错误处理(持续更新)
    ERROR1290(HY000):TheMySQLserverisrunningwiththe--skip-grant-tablesoptionsoitcannotexecutethisstatement​mysqladmin: connect to server at '......
  • mysql insert into select锁全表情况分析
    前言  Insertintoselect请慎用。这天xxx接到一个需求,需要将表A的数据迁移到表B中去做一个备份。本想通过程序先查询查出来然后批量插入。但xxx觉得这样有点慢,需要耗费......
  • 解决 Can't connect to local MySQL server through socket '/tmp/mysql.sock'
    [root@localhostansible-pandora]#mysql-uroot-pEnterpassword:ERROR2002(HY000):Can'tconnecttolocalMySQLserverthroughsocket'/tmp/mysql.sock'(2......