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;

原文地址:http://www.cnblogs.com/liwenchao1995/p/16870725.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性