Centos 7 源码编译安装Mysql_8

2021年4月30日09:41:55 发表评论
摘要

【微语】生活可能不像你想象的那么好,但是也不会像你想象的那么糟,人的脆弱和坚强都超乎了自己的想象,有时候可能脆弱的一句的话就泪流满面,有时候你发现自己咬着牙已经走过了很长的路。

一、基本环境
系统:CentOS Linux release 7.6.1810 (Core)
内核信息:3.10.0-957.el7.x86_64
说明:
          MySQL8.0在密码认证方式发生了改变,这也是MySQL创建了想用的用户,也进行了授权操作,死活连接不上的MySQL的原因,归根究底还是MySQL官方做了优化操作,可以让客户端更快的连接到MySQL数据库,说白了就是加密方式发生了改变!我们在创建用户时需要手动设置认证方式,因为目前主流的MySQL图形化破解版工具,暂时还不支持MySQL8.0默认的密码策略,修改方式可参考官方网站:https://dev.mysql.com/doc/refman/8.0/en/alter-user.html。
        MySQL8.0版本之前,MySQL使用的加密方式是“mysql_native_passowrd",在MySQL8.0之后,加密的方式改为“caching_sha2_password”,从字面意思理解,后者的加密方式应该更高效,以便提升客户端的连接速度
二、准备
安装依赖包
[root@localhost ~]# yum -y install wget cmake gcc gcc-c++ ncurses ncurses-devel libaio-devel openssl openssl-develCentos 7 源码编译安装Mysql_8

  • 下载mysql8.0的源码包
    [root@localhost ~]# wget -c http://mirrors.rootpei.com/mysql/mysql-boost-8.0.17.tar.gzCentos 7 源码编译安装Mysql_8
  • 解压并创建用户和目录
    [root@localhost ~]# tar xf mysql-boost-8.0.17.tar.gz
    [root@localhost ~]# cd mysql-8.0.17/
    [root@localhost mysql-8.0.17]# groupadd mysql
    [root@localhost mysql-8.0.17]# useradd -r -g mysql -s /sbin/nologin mysql
    [root@localhost mysql-8.0.17]# mkdir /usr/local/mysql
    [root@localhost mysql-8.0.17]# chown -R mysql.mysql /usr/local/mysql/
    [root@localhost mysql-8.0.17]# mkdir -p /data/mysql
    [root@localhost mysql-8.0.17]# chmod 755 /data/mysql/ -R
    [root@localhost mysql-8.0.17]# chmod 755 /usr/local/mysql/ -R
  • 安装cmake 3.5以上版本
    。卸载旧版本的cmake
    [root@localhost ~]# yum -y remove cmake
    。下载二进制包
    [root@localhost ~]# cd /usr/local/src/
    [root@localhost src]# wget -c http://mirrors.rootpei.com/cmake/cmake-3.15.3-Linux-x86_64.tar.gz
    [root@localhost src]# tar xf cmake-3.15.3-Linux-x86_64.tar.gz
    [root@localhost src]# cp -r cmake-3.15.3-Linux-x86_64 /usr/local/cmake/
    。设置环境变量
    [root@localhost src]# vim /etc/profile
    export CMAKE_PATH=/usr/local/cmake
    export PATH=$PATH:$CMAKE_PATH/bin
    Centos 7 源码编译安装Mysql_8
    [root@localhost src]# source /etc/profile
    [root@localhost src]# cmake --versionCentos 7 源码编译安装Mysql_8
  • 安装高版本的GCC
    [root@localhost mysql-8.0.17]# cd /usr/local/src/
    [root@localhost src]# wget -c http://mirrors.rootpei.com/gcc/gcc-9.2.0.tar.gz
    [root@localhost src]# tar xf gcc-9.2.0.tar.gz
    [root@localhost src]# cd gcc-9.2.0
    [root@localhost gcc-9.2.0]# yum install bzip2 -y
    [root@localhost gcc-9.2.0]# ./contrib/download_prerequisites
    Centos 7 源码编译安装Mysql_8
    [root@localhost gcc-9.2.0]# ./configure --prefix=/usr/local/gcc --enable-bootstrap --enable-checking=release --enable-languages=c,c++ --disable-multilib
    [root@localhost gcc-9.2.0]# make -j2 && make install -j2
    Centos 7 源码编译安装Mysql_8
    安装完成!
  • 设置环境变量
    [root@localhost ~]# echo ‘export PATH=/usr/local/gcc/bin:$PATH’>> /etc/profile.d/gcc.sh
    [root@localhost bin]# source /etc/profile.d/gcc.sh
    [root@localhost bin]# ln -sv /usr/local/gcc/include/ /usr/include/gcc
    [root@localhost bin]# ldconfig –v
    [root@localhost bin]# ldconfig -p |grep gcc
    [root@localhost bin]# gcc –v
    Centos 7 源码编译安装Mysql_8GCC安装成功
    。卸载旧版本的gcc并生成软链接
    [root@localhost mysql-8.0.17]# yum –y remove gcc
    [root@localhost mysql-8.0.17]# ln -s /usr/local/gcc/bin/c++ /usr/bin/
    [root@localhost mysql-8.0.17]# ln -s /usr/local/gcc/bin/gcc /usr/bin/cc
    。由于升级了gcc,却没有将升级后的gcc的动态库去替换老版本的gcc,下面开始替换
    [root@localhost ~]# cp /root/gcc-6.4.0/stage1-x86_64-pc-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.22 /usr/lib64
    [root@localhost ~]# cd /usr/lib64/
    [root@localhost lib64]# rm -rf lib
    [root@localhost lib64]# rm -rf libstdc++.so.6
    [root@localhost lib64]# ln -s libstdc++.so.6.0.27 libstdc++.so.6
    [root@localhost lib64]# strings /usr/lib64/libstdc++.so.6 | grep 'CXXABI'

二、安装
        [root@localhost ~]# cd mysql-8.0.17/

  • 执行如下编译参数
    [root@localhost mysql-8.0.17]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
    -DMYSQL_DATADIR=/data/mysql -DSYSCONFDIR=/etc \
    -DMYSQL_TCP_PORT=3306 \
    -DWITH_BOOST=/usr/local/src/mysql-8.0.17/boost \
    -DDEFAULT_CHARSET=utf8 \
    -DDEFAULT_COLLATION=utf8_general_ci \
    -DENABLED_LOCAL_INFILE=ON \
    -DWITH_INNODB_MEMCACHED=ON \
    -DWITH_INNOBASE_STORAGE_ENGINE=1 \
    -DWITH_FEDERATED_STORAGE_ENGINE=1 \
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
    -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
    -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
    -DFORCE_INSOURCE_BUILD=1Centos 7 源码编译安装Mysql_8[root@localhost mysql-8.0.17]# make -j2 && make install -j2
    。如遇下图报错Centos 7 源码编译安装Mysql_8。解决上图错误:
    在此路径的开头添加如下参数:#include "sys/syscall.h"
    [root@localhost mysql-8.0.17]# vim storage/innobase/buf/buf0buf.ccCentos 7 源码编译安装Mysql_8。如下报错:Centos 7 源码编译安装Mysql_8解决方法:修改2个配置文件三个地方
    [root@localhost mysql-8.0.17]# vim storage/innobase/lock/lock0lock.cc
    [root@localhost mysql-8.0.17]# vim storage/innobase/trx/trx0trx.cc
    源: os_compare_and_swap_thread_id
    改为:os_compare_and_swap_lintCentos 7 源码编译安装Mysql_8Centos 7 源码编译安装Mysql_8Centos 7 源码编译安装Mysql_8
  • 安装完成如下图:Centos 7 源码编译安装Mysql_8
  • 初始化数据库
    [root@localhost mysql-8.0.17]# cd /usr/local/mysql/bin/
    [root@localhost bin]# ./mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
    。修改配置文件
    [root@localhost bin]# vim /etc/my.cnf
    [client]
    port=3306
    socket=/tmp/mysql.sock
    default-character-set=utf8
    [mysqld]
    server-id=1
    port=3306
    user=mysql
    max_connections=200
    socket=/tmp/mysql.sock
    basedir=/usr/local/mysql
    datadir=/data/mysql
    pid-file=/data/mysql/mysql.pid
    init-connect='SET NAMES utf8'
    character-set-server=utf8
    default-storage-engine=INNODB
    log_error=/data/mysql/mysql-error.log
    slow_query_log_file=/data/mysql/mysql-slow.log
    [mysqldump]
    quick
    max_allowed_packet=16M
    。添加环境变量
    [root@localhost bin]# echo "PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile
    [root@localhost bin]# source /etc/profile
    [root@localhost bin]# cp /usr/local/src/mysql-8.0.17/support-files/mysql.server /etc/init.d/mysqld
    [root@localhost bin]# vim /etc/init.d/mysqld
    basedir=/usr/local/mysql
    datadir=/data/mysql
    Centos 7 源码编译安装Mysql_8
    [root@localhost bin]# chmod +x /etc/init.d/mysqld
    [root@localhost bin]# /etc/init.d/mysqld startCentos 7 源码编译安装Mysql_8
    启动成功!
  • 无密码登录即可
    [root@localhost bin]# mysql -uroot –pCentos 7 源码编译安装Mysql_8
  • 总结:
          整个源码安装过程是非常消耗耐力和时间的一个过程,随着操作系统版本一些硬性要求,基础的依赖问题,编译安装过程出现的需要修改源包的问题,非常耗时间和折腾,建议非必要直接使用二进制包吧!
  • 基础操作
    。由于默认密码为空使用下面的命令为root 创建密码
    [root@localhost bin]# mysqladmin -uroot password "123456";
    。创建wordpress数据库
    mysql> create database wordpress character set utf8;
    。创建用户
    mysql> create user 'wordpress'@'%'identified by '123456';
    。授权用户登录数据库
    mysql> grant all privileges on wordpress.* to 'wordpress'@'%';
    mysql> flush privileges;
    登录报错
    Centos 7 源码编译安装Mysql_8
  • 解决登录报错
    。查看当前登录用户
    mysql> select current_user();
    。查看用户使用的是什么加密认证方式
    mysql> SELECT user,host,plugin from mysql.user where user='root';
    。查看所有用户
    mysql> select user,host,plugin from mysql.user;Centos 7 源码编译安装Mysql_8
  • 修改加密方式
    。新建用户并指定加密方式的命令创
    mysql> create user admin@'%'identified with mysql_native_password by '123456';
    mysql> flush privileges;
    Centos 7 源码编译安装Mysql_8
    。修改已有用户root的密码验证方式
    mysql> alter user 'root'@'localhost'identified with mysql_native_password by '123456';
    mysql> flush privileges;
    Centos 7 源码编译安装Mysql_8
    。永久修改需要修改配置文件,且需要重启
    [mysqld]
    default_authentication_plugin=caching_sha2_password
    #\\后面可以指定mysql_native_password
    。mysql8修改现有用户host 权限,’localhost’改为‘%’
    mysql> use mysql;
    mysql> update user set host="%"where user="root";
    mysql> flush privileges;
    mysql> select host,user,authentication_string,plugin from user;
    Centos 7 源码编译安装Mysql_8
    。授权
    mysql> grant all privileges on wordpress.*to'admin'@'%';
    mysql> flush privileges;
    Centos 7 源码编译安装Mysql_8成功
  • 微信公众号
  • 这是我的微信公众号扫一扫
  • weinxin
  • 我的QQ技术群
  • 我的QQ技术群扫一扫
  • weinxin
admin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: