我怎样才能估计binlog大小和binlog是否应该在一个单独的磁盘上?

我们即将在我们的生产数据库上设置MySQL主从复制。 我们打算从奴隶运行备份(当我们的主人每天延迟15分钟,同时备份运行,使我们的网站离线)。

  • 我们平均跑步800次
  • 95%以上的查询是SELECT语句

我如何估计bin日志会增长多快? 还需要其他什么信息?

我们的MySQL主数据库服务器目前在RAID 10中有4个15k SAS磁盘。

我应该考虑添加一个单独的RAID 1(2个磁盘)arrays来容纳bin日志吗? 我担心写入bin日志会减慢读写主mysql数据存储。

有两种方法可以解决这个问题

示例#1

假设二进制日志定义如下:

 [mysqld] log-bin=mysql-bin 

进入操作系统,执行此操作:

 cd /var/lib/mysql ls -lt --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}' 

这将向您显示二进制日志及其各自的UNIX时间戳

简单地从前一个减去一个时间戳

 ls -l mysql-bin.0* -rw-rw---- 1 mysql mysql 1073754057 Mar 25 18:27 mysql-bin.000630 -rw-rw---- 1 mysql mysql 1074289363 Mar 25 22:16 mysql-bin.000631 -rw-rw---- 1 mysql mysql 1073746572 Mar 26 07:20 mysql-bin.000632 -rw-rw---- 1 mysql mysql 747478886 Mar 26 11:31 mysql-bin.000633 ls -l --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}' mysql-bin.000630 1364250429 mysql-bin.000631 1364264182 mysql-bin.000632 1364296842 mysql-bin.000633 1364311833 

你能计算什么?

  • mysql-bin.000631的时间是13753秒(1364264182 – 1364250429),3:49:53
  • mysql-bin.000632的时间是32660秒(1364296842 – 1364264182),9:04:20
  • mysql-bin.000633的时间是14991秒(1364311833 – 1364296842),4:09:51

你将不得不为每个二进制日志编写脚本。

示例2

如果你只想检查二进制日志,你可以这样做:

 mysqlbinlog mysql-bin.000632 > binlogsql.txt T1=`head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'` T2=`tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'` (( TT = T2 - T1 )) echo ${TT} 

看看它做了什么:

 [root@*** mysql]# mysqlbinlog mysql-bin.000632 > binlogsql.txt [root@*** mysql]# T1=`head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'` [root@*** mysql]# T2=`tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'` [root@*** mysql]# (( TT = T2 - T1 )) [root@*** mysql]# echo ${TT} 32660 [root@*** mysql]# 

结语

你可以计算每个二进制日志生成的秒数,并从那里进行你的数字处理

试一试 !!!