美文网首页操作系统哲学原理
CentOS7.4 编译安装 MySQL5.7.20

CentOS7.4 编译安装 MySQL5.7.20

作者: mashen | 来源:发表于2017-11-10 11:18 被阅读0次

    PHP Nginx 安装都没什么大问题 Mysql安装是遇到问题最多的 总结一下

    1. 下载软件包
    # 下载 mysql-5.7.20
    wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.20.tar.gz
    
    # 解压
    tar xzf mysql-5.7.20.tar.gz
    
    # 移动 ( 移动到你要安装的位置 )
    mv /root/mysql-5.7.20 /usr/local/mysql
    
    # MySQL从5.7开始必须安装boost库才行
    # 如果未安装cmake时可能会报错误
    # CMake Error at cmake/boost.cmake:81 (MESSAGE)
    
    # 下载 boost_1_59_0
    wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz
    
    # 解压
    tar xzf boost_1_59_0.tar.gz
    
    # 将解压后的包拷贝到mysql安装目录下的boost目录下 ( 自行创建boost )
    cp -R boost_1_59_0   /usr/local/mysql/boost/
    
    1. 处理依赖关系
    yum install cmake cmake-gui gcc-c++ ncurses-devel
    
    // 添加mysql用户
    useradd -s /sbin/nologin mysql
    
    // 创建mysql数据存放目录
    mkdir -p /data/mysql
    
    // 给予目录权限
    chown -R mysql:mysql /data/mysql
    
    1. cmake构建mysql
    cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/data/mysql/ -DSYSCONFDIR=/etc/ -DWITH_BOOST=/usr/local/mysql/boost/
    
    # 安装目录
    CMAKE_INSTALL_PREFIX
    
    # 数据目录
    MYSQL_DATADIR
    
    # 配置文件目录
    SYSCONFDIR
    
    # 指定boost库的位置
    WITH_BOOST
    
    # cmake时遇到的错误
    
    错误1:
    CMake Error: your C compiler: "CMAKE_C_COMPILER-NOTFOUND" was not found.   Please set CMAKE_C_COMPILER to a valid compiler path or name.
    解决:
    // 安装gcc
    yum install gcc-c++
    
    错误2:
    CMake Error at cmake/readline.cmake:64 (MESSAGE):
      Curses library not found.  Please install appropriate package,
          remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel
    解决:
    yum install ncurses-devel
    
    解除错误后删除 CMakeCache.txt 在重新cmake
    
    1. 编译并安装
    make 
    make install
    
    # mysql 编译时间较长建议make和make install分开执行
    # mysql 编译非常消耗内存 如果内存较小可能无法编译通过
    # 之前1G内存的阿里云编译到30%左右就挂了 换4G内存机器才编译通过
    # 目测编译MySQL5.7.20至少要2G的内存 ( 未测试 )
    
    1. 安装完成后 初始化MySQL
    /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
    
    # 生成MySQL临时密码
    --initialize
    
    # 指定运行MySQL的用户
    --user=mysql
    
    # 指定MySQL的安装目录
    --basedir=/usr/local/mysql
    
    # 指定MySQL的数据目录
    --datadir=/data/mysql
    
    # 初始化成功 
    A temporary password is generated for root@localhost: 5-h1Bbf*EQwk
    临时密码: 5-h1Bbf*EQwk
    
    1. 启动MySQL
    # MySQL默认启动命令在
    /usr/local/mysql/support-files/mysql.server
    # 拷贝一个出来
    cp /usr/local/mysql/support-files/mysql.server    /usr/local/mysql/mysqld
    
    # 启动MySQL
    /usr/local/mysql/mysqld start
    
    # 启动报错
    
    错误1:
    MySQL.2017-11-09T09:27:48.949025Z mysqld_safe error: log-error set to '/var/log/mariadb/mariadb.log', however file don't exists. Create writable for user 'mysql'.
    
    解决:
    猜测可能是日志文件没有权限
    直接去修改MySQL配置文件 /etc/my.cnf 
    修改 log-error 位置 并给予日志文件权限
    在 mysql 目录下创建了 log 存在错误日志
    mkdir log
    chown mysql:mysql log
    
    错误2:
    Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
    
    解决: 
    首先查看 /var/lib/mysql/ 下是否有 mysql.sock
    然后建立软连接到 /tmp/ 下
    ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
    
    mysql.sock 的位置在my.cnf中也有配置
    
    再次启动
    /usr/local/mysql/mysqld start
    启动成功
    
    1. 连接MySQL
    /usr/local/mysql/bin/mysql -h localhost -uroot -p 
    # 密码是初始化的 :  5-h1Bbf*EQwk
    
    # 登陆成功
    执行 show databases;  直接报错了  提示必须修改初始密码
    
    # 修改密码
    set password for root@localhost = password('MaShen');
    # 刷新权限
    flush privileges;
    
    # 再次执行  
    show databases;  
    成功
    
    1. MySQL加入到systemctl中管理
    # mysql.service 
    
    [Unit]
    Description=mysql
    After=network.target
    
    [Service]
    Type=forking
    PIDFile=/usr/local/mysql/pid/mysql.pid
    ExecStart=/usr/local/mysql/mysqld start
    ExecStop=/usr/local/mysql/mysqld stop
    ExecRestart=/usr/local/mysql/mysqld restart
    ExecStatus=/usr/local/mysql/mysqld status
    PrivateTmp=true
    
    [Install]
    WantedBy=multi-user.target
    

    重载systemctl配置

    systemctl daemon-reload
    
    总结
    1. MySQL5.7 必须安装boost库 这里折腾好久
    2. 初始化和5.7版本之前不同了
    3. 编译时如果内存较小可能无法编译完成
    4. 安装后启动MySQL时报的错误多数为权限问题
    5. 如果不修改初始密码无法操作MySQL

    相关文章

      网友评论

        本文标题:CentOS7.4 编译安装 MySQL5.7.20

        本文链接:https://www.haomeiwen.com/subject/uhwvmxtx.html