阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

二进制版安装以及启动 Percona-5.7.15

85次阅读
没有评论

共计 2474 个字符,预计需要花费 7 分钟才能阅读完成。

导读 本文将叙述通过二进制源码方式安装 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

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-24发表,共计2474字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中