封尘网

让学习成为一种习惯!

关于rpmbuild打包mysql造成无法启用aio功能

上一次的《rpmbuild制作mysql-5.7.17的rpm包》中虽然rpm是制作完成了,但是会造成Innodb 无法使用aio功能,关于aio功能官方说明了在默认情况下是开启了,但是在制作rpm出来的包就不能启动到aio功能,innodb_use_native_aio参数的值总是off;同时也感谢网友的信任,在收到邮件后我就多次测试过了。因为在相同的编译参数下是可以正常启动的,而rpmbuild时却不正常。

经常多次的实验发现,在编译参数中加入:-DINSTALL_PLUGINDIR="lib/plugin" 加载插件目录,等完成编译后即可成功启动innodb_use_native_aio功能;

cmake \ 
-DCMAKE_INSTALL_PREFIX=%{prefix} \ 
-DINSTALL_PLUGINDIR="lib/plugin" \ 
-DMYSQL_DATADIR=/data/mysql \ 
-DWITH_BOOST=../boost_1_59_0 \ 
-DSYSCONFDIR=/etc \ 
-DWITH_MYISAM_STORAGE_ENGINE=1 \ 
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ 
-DWITH_MEMORY_STORAGE_ENGINE=1 \ 
-DWITH_PARTITION_STORAGE_ENGINE=1 \ 
-DWITH_READLINE=1 \ 
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \ 
-DMYSQL_TCP_PORT=3306 \ 
-DENABLED_LOCAL_INFILE=1 \ 
-DEXTRA_CHARSETS=all \ 
-DDEFAULT_CHARSET=utf8 \ 
-DDEFAULT_COLLATION=utf8_general_ci

aio功能需要跟系统支持

查看系统是否开启了异步:

cat /proc/slabinfo | grep kio
cat /proc/sys/fs/aio-max-nr
root@(none) 09:08:37>show variables like '%aio%'; 
+-----------------------+-------+ 
| Variable_name         | Value | 
+-----------------------+-------+ 
| innodb_use_native_aio | ON   | 
+-----------------------+-------+ 
1 row in set (0.00 sec) 

root@(none) 09:12:09>show variables like '%io_threads'; 
+-------------------------+-------+ 
| Variable_name           | Value | 
+-------------------------+-------+ 
| innodb_read_io_threads  | 8     | 
| innodb_write_io_threads | 8     | 
+-------------------------+-------+ 
2 rows in set (0.00 sec)

参考来源:

https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html