mysql ld preload,二进制版安装以及启动 Percona-5.7.15

原标题:二进制版安装以及启动 Percona-5.7.15

纯手工打造每一篇开源资讯与技术干货,数十万程序员和Linuxer已经关注。

导读

本文将叙述通过二进制源码方式安装Percona-5.7.15,并进行快速启动。这边如何使用二进制版本安装Percona-5.7.15就不说了,和之前一模一样。

不做多余的事

1、解压

2、创建用户

3、创建相关目录并且赋予MySQL权限

4、使用mysqld初始化

麻烦的地方

按道理来说安装和启用MySQL应该是一件很容易的事,特别是使用二进制版本安装的特别容易的,只要解压初始化就行了。

但是在Percona-5.7.15(包括)之后的版本官网为了一个严重的MySQL漏洞,从而在启动MySQL的时候一些动态链接库只能从/usr/lib、/usr/lib64加载。而一般我安装MySQL都喜欢使用jemalloc这个内存分配,而不使用linux自带的和tcmalloc。所以在my.cnf配置文件中有如下一个配置

[mysqld_safe]

malloc-lib = /usr/local/mysql/lib/mysql/libjemalloc.so.1

有读过mysqld_safe启动程序源码的都知道在MySQL在寻找 jemalloc.so.1 这两个动态链接库的时候是先寻找到 my.cnf 中设置的 basedir

源码如下:

#

# Add jemalloc to ld_preload if no other malloc forced - needed for TokuDB

#

if test $load_jemalloc -eq 1

then

for libjemall in "${MY_BASEDIR_VERSION}/lib/mysql" "/usr/lib64" "/usr/lib/x86_64-linux-gnu" "/usr/lib"; do

if [ -r "$libjemall/libjemalloc.so.1" ]; then

add_mysqld_ld_preload "$libjemall/libjemalloc.so.1"

break

fi

done

fi

启动报错

由于libjemalloc.so.1 在 basedir 中存在,可是MySQL又限制了只能在/usr/lib64、/usr/lib等等标准库中加载这些动态文件所以启动的时候会报错。

报错如下:

mysqld_safe --malloc-lib must be located in one of the directories: /usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu

其实查看报错的提示就很明显,就是对于加载这些库只能在/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu这个库中

解决

1、将libjemalloc.so.1文件拷贝到/usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu 这几个目录中

cp /usr/local/mysql/lib/mysql/libjemalloc.so.1 /usr/lib64/libjemalloc.so.1

2、修改[mysqld_safe]

修改前:

[mysqld_safe]

malloc-lib = /usr/local/mysql/lib/mysql/libjemalloc.so.1

修改后:

[mysqld_safe]

malloc-lib = /usr/lib64/libjemalloc.so.1

3、重启MySQL

[root@centos7 mysql]# numactl --interleave=all /bin/bash /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my_3306.cnf

mysqld_safe Adding '/usr/lib64/libjemalloc.so.1' to LD_PRELOAD for mysqld

mysqld_safe Adding '/usr/local/mysql/lib/libHotBackup.so' to LD_PRELOAD for mysqld

2016-12-28T09:03:30.653874Z mysqld_safe Logging to '/u01/mysql/mysql_3306/logs/trace/mysql.err'.

2016-12-28T09:03:30.675215Z mysqld_safe Transparent huge pages are already set to: never.

2016-12-28T09:03:30.692654Z mysqld_safe Starting mysqld daemon with databases from /u01/mysql/mysql_3306/data

可见已经启动成功了

当然可以去修改mysqld_safe文件代码,但是对于要脚本部署就比较麻烦了,需要使用sed对代码进行替换,因为每个版本MySQL的mysqld_safe都会有所不同。所以这边就使用拷贝的方法暂时解决。

注意

MySQL 的basedir是一个软连接,那libHotBackup.so也需要修改

具体最终操作如下:

1、拷贝相关动态链接库

cp /usr/local/mysql/lib/mysql/libjemalloc.so.1 /usr/lib64/libjemalloc.so.1

cp /usr/local/mysql/lib/libHotBackup.so /usr/lib64/libHotBackup.so

mv /usr/local/mysql/lib/libHotBackup.so /usr/local/mysql/lib/libHotBackup.so.bak

2、修改my.cnf

[mysqld_safe]

malloc-lib = /usr/lib64/libjemalloc.so.1

原文来自:

本文地址:编辑:杨鹏飞,审核员:逄增宝

让您学习到的每一节课都有所收获

《Linux就该这么学》是由资深运维专家刘遄及全国多名红帽架构师(RHCA)基于最新RHEL7系统共同编写的高质量Linux技术自学教程,极其适合用于Linux技术入门教程或讲课辅助教材。

☀刘遄老师QQ:5604241 微信:gnu_chuan

☀学员助教QQ:5604674

☀Linux技术交流A群(满):560843

☀Linux技术交流B群:340829

☀Linux技术交流C群:463590

☀Linux技术交流D群:915246(新群,火热加群中……)

☀官方站点:www.linuxprobe.com

☀ 电脑在线阅读效果更佳:

http://www.linuxprobe.com/chapter-00.html

按住图片3秒,即可自动关注。返回搜狐,查看更多

点击左下角查看更多热门技术

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值