我们即将在生产数据库上设置 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 所需的秒数,然后根据这个时间进行数字运算
试一试 !!!