目录
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';
//我们创建一个schema
create databases alex;
//再次查看binlog内容,呵呵,发现了吗,已经把schema创建的记录到log了
show binlog events in 'bin-log.000001';
通过Binlog恢复数据
我们进入刚才配置文件里写的log的路径查看binlog
//三种恢复方式
//通过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';
清理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. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性