Mysql日志管理

日志的分类
error log错误日志排错

/var/log/mysqld.log【默认开启】,编译安装的默认在数据目录下以主机名开头以.err结尾

bin log二进制日志备份

增量备份 DDL DML DCL  对于mysql讲非常重要,它可以做数据的备份和恢复

Relay log中继日志复制

接收 replication master    AB复制会用的

slow log慢查询日志调优

查询时间超过指定值   给开发用的,监控查询速度比较慢的sql语句

Error Log

默认的日志在var/log下rpm的改位置用log-error改,在配置文件改

log-error=/var/log/mysqld.log

【注意】日志存储的目录必须修改所有者和所属组为mysql

vim /etc/my.cnf

cd /var/lib/mysql

Binary Log(用于备份恢复数据) 

1.开启binlog日志

2.读取binlog日志

3.利用binlog日志恢复数据

一、开启binlog日志

开启binlog日志就开始做备份了

产生binlog日志:也是改配置文件,

vim /etc/my.cnf

log-bin=/var/log/mysql/binlog 指定bin/log的位置,写一个路径,放在/var/lib/mysql/里面,指定一个名字叫binlog。不用主动的结尾。还得写一个server id,从1开始写,只要多个服务器不一样就行,server-id=1 //mysql  5.7必须要写,5.5不用   

保存,cd /var/log/mysql      ls   观察一下/var/lib/mysql/ 看看这些文件有没有叫log-bin开头的文件

systemctl restart mysqld     重启服务    

ls  多了一个binlog.000001文件,这个文件是刚才配置了二进制的配置,起了名叫binlog,但它给创建出来的是带了结尾的,以后在修改主配置文件的时候,不用主动的结尾。

binlog日志是不能拿vim看的,想看它的内容就用mysqlbinlog +文件名字 ,里面的/*!开头的全部都是注释(不管什么样的编程语言,只要不是正常的,基本上除了注释也就没有其他的东西) 结尾是*/。

at 后面的数字叫位置点,可以把每一条命令,都给分开,每一条命令都有一个位置点

at下面的时间叫做时间点,同一时间可能会有多条操作

一般每个位置点和时间点都是挨着的,有一个位置点,必然有一个时间点。因为在每一个时间点的下面都会有一个操作,都会有个sql语句。

进入mysql      

 看日志mysqlbinlog binlog.000001,

 5.7加密了要去掉加密,不然不显示sql语句

去除binlog加密:

5.5不用(凡是平时操作不了的,肯定是版本问题)

vim /etc/my.cnf   (在这个配置文件里,把下面两行加进去)

transaction_isolation=repeatable-read

binlog_format=mixed

【注意】如果在binlog日志看不见,写的内容就是加密了,需要去除加密。

去除binlog加密之后,再去看binlog日志,需要重新生成一下,原来的binlog日志是不能直接解密了,只有新的binlog日志才会解密。把它删了,重新启动,让它重新产生binlog日志。和第一次产生一样的,没什么有用的东西。

 【注意】重启mysqld 会截断旧日志产生新的日志。

 直接进入mysql

 再去看binlog日志 mysqlbinlog binlog.000001,

 开启binlog日志之后,mysql会记录每一条写操作。查询操作不会记录。

可以利用它记录下的信息,重新把数据找回来,怎么找回来?重新在执行一遍sql语句,记录的什么东西就给你重新执行一遍。

binlog日志可以备份数据,恢复数据怎么做的备份?

就是把每一个写操作记录到binlog日志里面,这就是它的备份,

怎么恢复?

就是根据binlog日志里记录的操作,重新再把这些语句给你执行一遍,你的数据就恢复回来了。这是它恢复数据的原理。

为什么有位置点,时间点?

因为恢复数据,不一定要把所有的数据,全部都给恢复,有可能只需要恢复一部分数据。比如说只想恢复id=2这条数据,那就找位置点,把位置点下面的数据恢复一下就行了。其他的不恢复。

二、读取binlog日志  

可以同时读取多个日志文件   就用空格把那些日志文件隔开就行

# mysqlbinlog mysql.000002    开启binlog日志就开始做备份了

按datetime读取:

# mysqlbinlog mysql.000002 --stop-datetime="2018-12-05 11:02:54"  从顶头开始,到这里结束

# mysqlbinlog mysql.000002 --start-datetime="2018-12-05 10:02:56" --stop-datetime="2018-12-05 11:02:54"   开始的时间,结束的时间

按position读取 

# mysqlbinlog mysql.000002 --start-position=260 --stop-position=930 开始的位置,结束的位置

mysqlbinlog --help  如果记不起来,去帮助找

注意:

1. 重启mysqld 会截断旧日志产生新的日志

2. 刷新日志会截断旧日志产生新的日志

mysql> flush logs

3. 删除所有binlog(禁用)

到了公司别这么干,因为binlog复制用来做备份,做ab复制,全删了不行

mysql> reset master

4. 删除部分日志(但是没用,别去操作)

mysql> PURGE BINARY LOGS TO 'mysql-bin.010';

mysql> PURGE BINARY LOGS BEFORE '2016-04-02 22:46:26';

5. 暂停binlog日志功能(仅对当前会话生效,不用去操作)

mysql> SET SQL_LOG_BIN=0;

mysql> SET SQL_LOG_BIN=1;

三、利用binlog日志恢复数据

根据binlog恢复数据,把查看的结果通过管道符交给root客户端就完毕

根据时间点恢复数据  

同一时间内可能会有多条操作

# mysqlbinlog --start-datetime='2014-11-25 11:56:54' --stop-datetime='2014-11-25 11:57:41' k-bin.000001 | mysql -u root -p’Helloworld123’

时间点不如位置点精确,需要自己指定结束的时间,而且需要提前一秒,在同一秒内发生的多个操作,要么一起操作,要么不操作,不能把它隔开,最小单位是一秒,如果想把它隔开就用位置点。

根据位置点恢复数据   

# mysqlbinlog --start-position=106 --stop-position=527 binlog.000001 | mysql -u root -p’Helloworld123!’

例如:插入数据8,把8删了,恢复8

 看日志,恢复8,找插入数据那里恢复,不是恢复delete,精确的去找这一行,

可以选择按时间恢复,也可以选择按照位置点恢复,位置点是非常精确的,介意第一选择是位置点

 恢复。位置点就是从at2042开始到下一个位置点之前结束。

在这里我没有用户名密码,所以没写-u root  -p密码,如果有用户名密码加上就行。

 去观察数据,发现恢复回来了

它可以恢复一条数据,也可以恢复一堆数据,看你的怎么指定位置点和时间点。

 刷新bin-log日志:

#mysqladmin flush-logs //方式1

# mysql -u root -p123 -e "flush logs" //方式2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你是我的导航

谢谢您的打赏,您的鼓励。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值