http://ebergen.net/wordpress/2010/09/28/cool-stuff-from-tivos-mysql-patch/
虽然TiVo的mysql补丁不如google和facebook的补丁出名,但还是有一定可取之处的。
尤其是监视mysql的状态与查询优化。monitoring and query optimization。
下载地址:
http://www.tivo.com/mysql/
TiVo改动了mysqld_safe,mysqldump,以及google补丁中的”show xxxx”语句。
mysqld_safe的改动
–fallback-ledir
mysqld_safe中ledir用来设置mysqld所在的目录。
当mysqld挂掉的时候,–fallback-ledir会切换ledir的设置,从而启动一个新的mysqld。。。
如果您要把一个测试版的mysqld放到线上来应用,那么很有必要用–fallback-ledir来设置一个稳定版的mysqld,以防万一吧。
–crash-script
当mysqld挂掉的时候,会执行–crash-script设置的脚本。
mysqldump的改动
–slave-data
在mysqldump出的文件中记录了slave server中的replication position。
适用于以下情况:
从某台slave服务器上备份数据,然后把数据恢复到另外一台slave上面。
–log-pos-comment
以注释的方式记录了 slave server和master server中的replication positions。
适用于手工恢复备份的情况。
–no-bin-log
mysqldump会把
SET SQL_LOG_BIN=0;
加入到导出的sql文件顶部。
This makes dump files import only on the machine and not be written to the replication stream
这样在master server恢复数据的时候,不写入二进制日志, 这些导入的数据就不会进入slave server。
SHOW TABLE_STATISTICS and SHOW INDEX_STATISTICS
Row stats in the TiVo patch are tracked at 3 different levels, per query, per session, and globally.
google补丁中只是在globally范围内对Row stats进行统计。
mysql> SELECT * FROM t;
+------+
| t |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows IN SET (0.00 sec)
mysql> SHOW table_statistics;
+--------+-----------+--------------+-------------------------+
| TABLE | Rows_read | Rows_changed | Rows_changed_x_#indexes |
+--------+-----------+--------------+-------------------------+
| test.t | 3 | 0 | 0 |
+--------+-----------+--------------+-------------------------+
1 row IN SET (0.00 sec)
如果相同的语句再执行一次,show table_statistics的结果与上面相同。
但是show session table_statistics 与 show global table_statistics就不同了。
mysql> SELECT * FROM t;
+------+
| t |
+------+
| 1 |
| 2 |
| 3 |
+------+
3 rows IN SET (0.00 sec)
mysql> SHOW table_statistics;
+--------+-----------+--------------+-------------------------+
| TABLE | Rows_read | Rows_changed | Rows_changed_x_#indexes |
+--------+-----------+--------------+-------------------------+
| test.t | 3 | 0 | 0 |
+--------+-----------+--------------+-------------------------+
1 row IN SET (0.00 sec)
mysql> SHOW session table_statistics;
+--------+-----------+--------------+-------------------------+
| TABLE | Rows_read | Rows_changed | Rows_changed_x_#indexes |
+--------+-----------+--------------+-------------------------+
| test.t | 6 | 3 | 3 |
+--------+-----------+--------------+-------------------------+
1 row IN SET (0.00 sec)
Rows_changed中的3,是之前在同一个session中创建此表,并且insert 了三条语句。
它也支持like语句,与show variables类似。
mysql> SHOW global table_statistics LIKE 'mysql%';
+----------------------+-----------+--------------+-------------------------+
| TABLE | Rows_read | Rows_changed | Rows_changed_x_#indexes |
+----------------------+-----------+--------------+-------------------------+
| mysql.proc | 293 | 4 | 4 |
| mysql.user | 10237928 | 2 | 2 |
| mysql.help_category | 36 | 0 | 0 |
| mysql.help_topic | 463 | 0 | 0 |
| mysql.help_relation | 733 | 0 | 0 |
| mysql.help_keyword | 381 | 0 | 0 |
| mysql.db | 10964886 | 0 | 0 |
+----------------------+-----------+--------------+-------------------------+
8 rows IN SET (0.00 sec)
更加牛的是,出现slow query的时候,TiVo补丁会把当时的Row stats与sql语句一起写入slow query log:
# Time: 100725 14:39:33
# User@Host: tivo[tivo] @ localhost []
# Query_time: 3 Lock_time: 0 Rows_sent: 3 Rows_examined: 3
# Row_Stats: test.t:rows_read=3,rows_changed=0,rows_changed_x_indexes=0;
# Index_Stats:
SELECT *, sleep(1) FROM t;
此外,TiVo补丁还对google补丁和Percona补丁中的innodb部分进行了改进。不表。