示例 1

示例 1

我们即将在生产数据库上设置 MySQL 主从复制。我们打算从从服务器运行备份(目前,我们的主服务器在运行备份时每天会滞后 15 分钟,导致我们的网站离线)。

  • 我们的平均运行速度为 800 qps
  • 95% 以上的查询都是 SELECT 语句

我如何估计 bin log 的增长速度?还需要哪些信息?

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

我是否应该考虑添加一个单独的 RAID 1(2 个磁盘)阵列来保存 bin 日志?我担心写入 bin 日志会减慢对主 mysql 数据存储的读写速度。

答案1

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

示例 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

您必须为每个 binlog 编写此计算脚本。

示例 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]#

结语

你可以计算生成每个 binlog 所需的秒数,然后根据这个时间进行数字运算

试一试 !!!

相关内容