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

HH MySQL314,3296字数 2491阅读8分18秒阅读模式

不做多余的事

这边如何使用二进制版本安装Percona-5.7.15就不说了,和之前一模一样

1、解压文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

2、创建用户文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

3、创建相关目录并且赋予MySQL权限文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

4、使用mysqld初始化文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

麻烦的地方

按道理来说安装和启用MySQL应该是一件很容易的事,特别是使用二进制版本安装的特别容易的,只要解压初始化就行了。文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

但是在Percona-5.7.15(包括)之后的版本官网为了一个严重的MySQL漏洞,从而在启动MySQL的时候一些动态链接库只能从/usr/lib、/usr/lib64加载。而一般我安装MySQL都喜欢使用jemalloc这个内存分配,而不使用linux自带的和tcmalloc。所以在my.cnf配置文件中有如下一个配置文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

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

有读过mysqld_safe启动程序源码的都知道在MySQL在寻找 jemalloc.so.1 这两个动态链接库的时候是先寻找到 my.cnf 中设置的 basedir文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

源码如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

#
# 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等等标准库中加载这些动态文件所以启动的时候会报错。文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

报错如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

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这个库中文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

解决

1、将libjemalloc.so.1文件拷贝到 /usr/lib /usr/lib64 /usr/lib/i386-linux-gnu /usr/lib/x86_64-linux-gnu 这几个目录中文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

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

2、修改[mysqld_safe]文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

修改前:文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

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

修改后:文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

[mysqld_safe]
malloc-lib          = /usr/lib64/libjemalloc.so.1

3、重启MySQL文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

[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

可见已经启动成功了文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

当然可以去修改mysqld_safe文件代码,但是对于要脚本部署就比较麻烦了,需要使用sed对代码进行替换,因为每个版本MySQL的mysqld_safe都会有所不同。所以这边就使用拷贝的方法暂时解决。文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

注意

MySQL 的basedir是一个软连接,那libHotBackup.so也需要修改文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

具体最终操作如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/

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

昵称: HH

QQ: 275258836

ttlsa群交流沟通(QQ群②: 6690706 QQ群③: 168085569 QQ群④: 415230207(新) 微信公众号: ttlsacom)

感觉本文内容不错,读后有收获?

逛逛衣服店,鼓励作者写出更好文章。

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
HH
  • 本文由 发表于 11/01/2017 00:48:27
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/percona-5-7-15-binary-version-install-and-start/
评论  3  访客  3
    • 励志语录
      励志语录 0

      支持,虽然看不懂 :cry:

      • 美剧天堂
        美剧天堂 1

        用Percona那么麻烦,还不如用mariadb

          • 匿名
            匿名 9

            @ 美剧天堂 如果要使用源生的 malloc 就不需要那么麻烦,我需要使用的是 jemalloc
            还有就是 percona 和 Oracle MySQL 是为了修复一个所有版本都有的一个安全漏洞。
            当然使用 RPM 安装也简单

        评论已关闭!