• 64160

    文章

  • 632

    评论

  • 59

    友链

  • 最近新加了换肤功能,大家多来逛逛吧~~~~
  • 喜欢这个网站的朋友可以加一下QQ群,我们一起交流技术。

CentOS7.2 源码安装MySQL8.0

撸了今年阿里、腾讯和美团的面试,我有一个重要发现.......>>

一. 实测环境

腾讯云主机CentOS7.2、 MySQL8.0.16

二. 准备工作

  1. 下载源码包:

    #不带boost库的版本,安装过程中会联网下载
    wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.16.tar.gz
    
    #带有boost库的版本----建议下载该版本
    wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.16.tar.gz
    
  2. 创建mysql用户

    groupadd mysql
    useradd  -g mysql mysql
    
  3. 创建安装目录和数据目录

    mkdir -p /usr/local/mysql
    mkdir -p /data/mysql
    
  4. 依赖安装

    #yum -y install cmake
    #根据平台不同,使用cmake命令或者cmake3命令(实测时,在上述安装环境下即使安装了cmake命令也无法使用,需要使用cmake3命令)
    yum -y install cmake3 git openssl openssl-devel ncurses-devel
    

    MySQL 8.0源代码允许使用C++14特性。为了在所有支持的平台上实现良好的C++14支持,最低需要使用GCC 5.3。若执行cmake或cmake3命令时出现如下错误Could not find devtoolset gcc且确认已安装devtoolset和gcc依赖,请查看mysql-8.0.16文件夹中CMakeLists.txt文件,确认其中的devtoolset和gcc版本是否比系统已安装版本高,即已安装版本过低则需要升级devtoolset和gcc。

    #借助devtoolset升级GCC
    yum -y install centos-release-scl-rh centos-release-scl
    yum -y install devtoolset-8-gcc  devtoolset-8-gcc-c++
    #重启devtoolset,仅对本次shell有效,可加入~/,bashrc中确保每次均有效
    source /opt/rh/devtoolset-8/enable
    #通过gcc -v即可查看升级之后的GCC版本(本文升级后的gcc版本为8.3.1)
    

三. 安装MySQL8.0

  1. 安装

    ① 解压

    tar -zxvf mysql-8.0.16.tar.gz -C /usr/local
    

    ② 编译&安装

    cd /usr/local/mysql-8.0.16
    #使用带有boost库的源码时,可以不用添加-DDOWNLOAD_BOOST=1。在使用无boost库的源码安装时,添加-DDOWNLOAD_BOOST=1参数,会自动进行下载相关库文件到指定位置(即DWITH_BOOST指定的位置)
    cmake3 . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/mysql-8.0.16/boost -DDOWNLOAD_BOOST=1
    make && make install
    

    ​ 若执行cmake3命令时,提示Please do not build in-source. Out-of source builds are highly的错误信息,则需要调整执行命令的位置。例如:

    mkdir -p /usr/local/mysql-8.0.16/build
    cd /usr/local/mysql-8.0.16/build
    #注意此处cmake3后面是..
    cmake3 .. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DMYSQL_TCP_PORT=3306 -DWITH_BOOST=/usr/local/mysql-8.0.16/boost -DDOWNLOAD_BOOST=1
    make && make install
    

    ③ 注意事项

    ​ I. 若使用的是不带boost库的源码安装,该过程需要下载boost库,网络不好的情况下可能速度较慢,且会出现下载中途超时取消导致失败的情况。

    ​ II. cmake命令报错修复后再重新执行时,建议先删除CMakeCache.txt文件再执行相关命令。

    ​ III. make && make install若出现报错重新执行时,先make clean再删除CMakeCache.txt文件,再执行make && make install(根据实际情况,可能会需要重新执行cmake命令)。

    ​ IV. 对于make编译,如果是阿里云centos主机内存小于2G的,可能会在make编译到45%、63%时报错;如果是腾讯云centos主机内存为1G时,可能会在make编译到64%时报错。

    ===============阿里云测试结果(引用)==================
    c++: Internal error: Killed (program cc1plus)
    Please submit a full bug report.
    See <http://bugzilla.redhat.com/bugzilla> for instructions.
    make[2]: *** [sql/CMakeFiles/sql.dir/item_geofunc.cc.o] Error 1
    make[1]: *** [sql/CMakeFiles/sql.dir/all] Error 2
    make: *** [all] Error 2
    
    ================腾讯云测试结果(实测)=================
    g++: fatal error: Killed signal terminated program cc1plus
    compilation terminated.
    make[2]: *** [sql/CMakeFiles/sql_gis.dir/gis/crosses.cc.o] Error 1
    make[1]: *** [sql/CMakeFiles/sql_gis.dir/all] Error 2
    make: *** [all] Error 2
    

    以上均为内存不足所致,可通过设置2G交换分区来解决该问题。

    #获取要增加的2G的SWAP文件块
    dd if=/dev/zero of=/swapfile bs=1k count=2048000
    #创建SWAP文件
    mkswap /swapfile 
    #激活SWAP文件
    swapon /swapfile   
    #查看SWAP信息是否正确
    swapon -s  
    #添加到fstab文件中让系统引导时自动启动
    echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab 
    

    swapfile文件的路径在/var/下,编译完后, 如果不想要交换分区了, 可以删除。

    swapoff /swapfile
    rm -rf /swapfile
    

    ps.关于阿里云centos主机内存问题,未进行实测,参见引用贴。实际操作中只使用了腾讯云centos主机进行测试。

    ④ 补充说明

    ​ cmake常用参数

    CMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
    DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
    DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
    ENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
    WITH_COMMENT:指定编译备注信息
    WITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
    WITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
    SYSCONFDIR:初始化参数文件目录
    MYSQL_DATADIR:数据文件目录
    MYSQL_TCP_PORT:服务端口号,默认3306
    MYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
    
  2. 配置及授权

    ① 配置my.cnf文件

    cat /etc/my.cnf
    
    [mysqld]
    server-id=1
    port=3306
    basedir=/usr/local/mysql
    datadir=/data/mysql
    socket=/data/mysql/mysql.sock
    symbolic-links=0
    
    [mysqld_safe]
    log-error=/data/mysql/mariadb.log
    pid-file=/data/mysql/mariadb.pid
    

    ② 目录权限修改

    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /data/mysql
    chmod 755 /usr/local/mysql -R
    chmod 755 /data/mysql -R
    
  3. 初始化并启动mysql

    cd /usr/local/mysql
    #初始化会返回临时密码,暂存供后面修改使用
    #[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ltdowco&g8rG
    bin/mysqld --initialize --user=mysql --datadir=/data/mysql/
    bin/mysql_ssl_rsa_setup
    #启动
    bin/mysqld_safe --user=mysql &
    
  4. 修改账号密码

    bin/mysql -uroot -p
    

    此时需要输入上一步中暂存的临时密码,由于my.cnf中修改了mysql.socket,此处会出现Can 't connect to local MySQL server through socket '/tmp/mysql.sock '(2) 错误,可通过软连接解决该问题。

    ln -s /data/mysql/mysql.sock /tmp/mysql.sock
    

    再次执行bin/mysql -uroot -p输入密码即可进入mysql

    mysql> alter user 'root'@'localhost' identified by '111111';
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    

    添加远程账号

    mysql> create user root@'%' identified by '111111';
    mysql> grant all privileges on *.* to root@'%';
    mysql> flush privileges;
    
  5. 添加到启动项

    #复制mysql.server
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    #赋予可执行权限
    chmod +x /etc/init.d/mysqld
    #添加为服务
    chkconfig --add mysqld
    #查看服务列表
    chkconfig --list
    

参考原文如下:

  1. https://www.cnblogs.com/chenqs/p/8911670.html
  2. https://blog.csdn.net/cryhelyxx/article/details/47610247

 转载至链接:https://my.oschina.net/u/1773521/blog/3073204。

695856371Web网页设计师②群 | 喜欢本站的朋友可以收藏本站,或者加入我们大家一起来交流技术!

欢迎来到梁钟霖个人博客网站。本个人博客网站提供最新的站长新闻,各种互联网资讯。 还提供个人博客模板,最新最全的java教程,java面试题。在此我将尽我最大所能将此个人博客网站做的最好! 谢谢大家,愿大家一起进步!

转载原创文章请注明出处,转载至: 梁钟霖个人博客www.liangzl.com

1条评论

Loading...


发表评论

电子邮件地址不会被公开。 必填项已用*标注

自定义皮肤
注册梁钟霖个人博客