MySQL5.6加入了一个把buffer_pool dump到磁盘的功能,加快MySQL重启后,数据的预热速度,我们用的Percona Server 5.5也加入了这个功能主要有以下几点:
- 只dump页表的号码到磁盘,而不是数据 ,所以,即使你buffer_pool很大,实际dump出来的数据很小,文件存放在MySQL的数据目录
- 可以设置固定时间间隔自动dump
- 设置关闭时自动dump,开启时自动restore
- innodb_buffer_pool_restore_at_startup=600,每10分钟保存buffer_pool到磁盘,这个只是保存了磁盘上数据的索引,并不是真正的数据,否则这个文件会非常大
- innodb_blocking_buffer_pool_restore=1,在MySQL启动时,阻塞启动过程,直到buffer_pool预热后才通知系统已经启动成功
#!/bin/bash
# change online
mysql -uroot -pxxx <<EOF
set @@global.innodb_buffer_pool_restore_at_startup=600;
select * from information_schema.XTRADB_ADMIN_COMMAND /*!XTRA_LRU_DUMP*/;
EOF
手动dump和restore
可以在MySQL启动后,select一个表的数据,然后查看buffer pool的page数量,手动把buffer pool dump到磁盘,再重启MySQL,看它是否会restore
一些命令:
# 查看buffer pool的数据大小
show status like 'innodb_buffer_pool_pages_data';
# 手动dump
select * from information_schema.XTRADB_ADMIN_COMMAND /*!XTRA_LRU_DUMP*/;
#手动restore
select * from information_schema.XTRADB_ADMIN_COMMAND /*!XTRA