• 【MySQL】源码编译MySQL8.x+升级gcc+升级cmake(亲测完整版)


    大家好,我是冰河~~

    今天给大家分享一篇通过源码编译安装MySQL8的文章,期间涉及到gcc和cmake等编译环境的升级。好了, 不多说了,开始今天的正题。

    一、概述

    最近,在CentOS 6.8服务器上编译安装MySQL 8.0.18的源码,百度了许久,发现网上的安装方式没一个可用的。基本都是基于CentOS 7.x来安装MySQL8.0,并且安装过程中会出现各种问题,按照他们的文章进行安装根本解决不了问题。更重要的一点就是,很多文章的内容一模一样!!我就纳闷了,那些发表文章的人,自己真的安装并且验证过吗?还是只是一味的抄袭呢?!

    确实很无语啊,对于一个技术人来说,一定要解决这个问题。于是我彻底关闭了百度,开始翻看MySQL官方文档,自己研究安装方式,总结出MySQL 8.x在各CentOS版本下的安装方式,整理成文,供大家参考。

    本文的安装方式涉及到的CentOS版本不限,MySQL版本为8.x。

    二、安装版本

    本文以如下版本为例进行介绍。

    • 服务器:CentOS:6.8
    • MySQL:8.0.18
    • gcc:9.2.0
    • cmake:3.15.2

    服务器配置。

    这里,我编译安装MySQL8.0.18时,使用的服务器配置如下。

    CentOS 6.8,内存6G,磁盘60G。

    我在内存4G,磁盘60G的情况下,编译不成功,内存不足;在内存6G,磁盘20G的情况下,编译也不成功,磁盘空间不足,所以编译安装MySQL 8.x还是需要一定的内存和磁盘空间的。

    三、安装环境准备

    1.安装基础依赖环境

    在CentOS 6.8服务器中安装一些基础依赖环境,如下所示。

    yum -y install xz wget gcc-c++ ncurses ncurses-devel cmake make perl openssl openssl-devel gcc* libxml2 libxml2-devel curl-devel libjpeg* libpng* freetype* make gcc-c++ cmake bison-devel bison perl perl-devel  perl perl-devel glibc-devel.i686 glibc-devel libaio ntpdate readline-devel zlib.x86_64 zlib-devel.x86_64 libcurl-* net-tool*  sysstat lrzsz dos2unix telnet.x86_64 nethogs iftop iotop unzip ftp.x86_64 xfs* expect vim psmisc openssh-client* libaio libaio1 libnuma bzip2  epel-release
    
    • 1

    2.修改服务器配置

    修改CentOS 6.8服务器配置,如下所示

    [root@binghe ~]# vim /etc/selinux/config
    SELINUX=disabled
    
    • 1
    • 2

    3.添加mysql用户

    groupadd mysql
    useradd -g mysql mysql
    
    • 1
    • 2

    4.创建安装MySQL所需要的目录

    mkdir -p /usr/local/mysql
    mkdir -p /data/mysql/run
    mkdir -p /data/mysql/data
    mkdir -p /data/mysql/tmp
    mkdir -p /data/mysql/conf
    mkdir -p /data/mysql/log/bin_log
    mkdir -p /data/mysql/log/error_log
    mkdir -p /data/mysql/log/query_log
    mkdir -p /data/mysql/log/general_log
    mkdir -p /data/mysql/log/innodb_ts
    mkdir -p /data/mysql/log/undo_space
    mkdir -p /data/mysql/log/innodb_log
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    5.mysql用户授予目录权限

    chown -R mysql.mysql /usr/local/mysql
    chown -R mysql.mysql /data/mysql
    
    • 1
    • 2

    四、下载并安装MySQL

    1.下载安装软件包

    cd /usr/local/src/
    wget https://mirrors.ustc.edu.cn/gnu/gmp/gmp-6.1.2.tar.xz
    wget https://mirrors.ustc.edu.cn/gnu/mpfr/mpfr-4.0.2.tar.gz
    wget https://mirrors.ustc.edu.cn/gnu/mpc/mpc-1.1.0.tar.gz
    wget https://mirrors.ustc.edu.cn/gnu/gcc/gcc-9.2.0/gcc-9.2.0.tar.gz
    wget https://github.com/Kitware/CMake/releases/download/v3.15.2/cmake-3.15.2.tar.gz
    wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.18.tar.gz
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    如果需要通过网页下载MySQL源码,可以在浏览器地址栏输入链接MySQL :: Download MySQL Community Server 。并按照下图方式选择MySQL源码。

    img

    2.升级gcc

    (1)先编译安装gmp->mpfr->mpc
    • 编译gmp
    cd /usr/local/src/
    xz -d gmp-6.1.2.tar.xz
    tar -xvf gmp-6.1.2.tar
    cd gmp-6.1.2
    ./configure --prefix=/usr/local/gmp-6.1.2
    make -j $(nproc)
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 编译mpfr
    cd /usr/local/src
    tar -xvf mpfr-4.0.2.tar.gz
    cd mpfr-4.0.2
    ./configure --prefix=/usr/local/mpfr-4.0.2 --with-gmp=/usr/local/gmp-6.1.2
    make -j $(nproc)
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 编译mpc
    cd /usr/local/src
    tar -xvf mpc-1.1.0.tar.gz
    cd mpc-1.1.0
    ./configure --prefix=/usr/local/mpc-1.1.0 --with-mpfr=/usr/local/mpfr-4.0.2  --with-gmp=/usr/local/gmp-6.1.2
    make -j $(nproc)
    make install
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (2)配置mpfr

    把mpfr lib 加入 ld.so.conf 不然gcc 编译报错

    echo /usr/local/mpfr-4.0.2/lib  >> /etc/ld.so.conf
    ldconfig
    
    • 1
    • 2
    (3)配置系统环境变量
    vim /etc/profile
    MPC_HOME=/usr/local/mpc-1.1.0
    GMP_HOME=/usr/local/gmp-6.1.2
    MPFR_HOME=/usr/local/mpfr-4.0.2
    LD_LIBRARY_PATH=$MPC_LIB_HOME/lib:$GMP_HOME/lib:$MPFR_HOME/lib:$LD_LIBRARY_PATH
    export MPC_LIB_HOME GMP_HOME MPFR_HOME LD_LIBRARY_PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    输入如下命令使系统环境变量生效。

    source /etc/profile
    
    • 1
    (4)创建软链接
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /lib/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/lib/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/local/lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/local/lib/libmpc.so.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    (5)升级gcc

    首先,执行如下命令安装gcc。

    cd /usr/local/src/
    tar -zxvf gcc-9.2.0.tar.gz
    cd gcc-9.2.0
    ./configure --prefix=/usr/local/gcc-9.2.0 -enable-threads=posix -disable-checking -disable-multilib -enable-languages=c,c++ --with-gmp=/usr/local/gmp-6.1.2/  --with-mpfr=/usr/local/mpfr-4.0.2/ --with-mpc=/usr/local/mpc-1.1.0/ -with-tune=generic --with-arch_32=x86-64
    make -j $(nproc)
    make install -j $(nproc)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    接下来,备份旧gcc的可执行文件

     mv /usr/bin/gcc /usr/bin/gcc.old
     mv /usr/bin/g++ /usr/bin/g++.old
     mv /usr/bin/c++ /usr/bin/c++.old
     mv /usr/bin/cpp /usr/bin/cpp.old
     mv /usr/bin/gcov /usr/bin/gcov.old
    
    • 1
    • 2
    • 3
    • 4
    • 5

    创建最新gcc 执行文件软链

     ln -sf /usr/local/gcc-9.2.0/bin/* /usr/bin/
    
    • 1

    删除gcc安装目录下的lib64 目录下的.py 文件。

    rm -rf /usr/local/gcc-9.2.0/lib64/libstdc++.so.6.0.27-gdb.py
    
    • 1

    配置ld.so.conf文件。

    echo /usr/local/gcc-9.2.0/lib64 >> /etc/ld.so.conf
    ldconfig
    
    • 1
    • 2

    复制libstdc++.so.6.0.27文件到/lib64/目录

    cp /usr/local/gcc-9.2.0/lib64/libstdc++.so.6.0.27 /lib64/
    
    • 1

    创建软链 libstdc++.so.6

    cd /lib64
    ln  -sf libstdc++.so.6.0.27 libstdc++.so.6
    
    • 1
    • 2

    查看是否最新版本

    strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX
    
    • 1

    至此,gcc升级完成。

    (6)升级cmake

    首先,编译安装cmake。

    cd  /usr/local/src/
    tar -zxvf cmake-3.15.2.tar.gz
    cd cmake-3.15.2
    ./configure --prefix=/usr/local/cmake-3.15.2
    gmake -j $(nproc)
    gmake install -j $(nproc)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    注意:这里使用的是gmake命令。

    接下来,创建cmake 软链。

    ln -sf /usr/local/cmake-3.15.2/bin/cmake /bin/cmake3
    
    • 1

    至此,cmake升级完成。

    (7)编译安装MySQL
    cd /usr/local/src
    tar -zxvf mysql-8.0.18.tar.gz
    cd mysql-8.0.18
    cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/data/mysql/data -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DEXTRA_CHARSETS=all -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 -DCOMPILATION_COMMENT="binghe edition" -DDOWNLOAD_BOOST=1  -DWITH_BOOST=/data/mysql/tmp -DMYSQL_UNIX_ADDR=/data/mysql/run/mysql.sock -DMYSQL_TCP_PORT=3306 -DSYSCONFDIR=/data/mysql/conf -DWITH_READLINE=1 -DFORCE_INSOURCE_BUILD=1 -DWITH_SSL=system -DWITH_ZLIB=system   -DCMAKE_CXX_COMPILER=/usr/local/gcc-9.2.0/bin/g++ -DCMAKE_C_COMPILER=/usr/local/gcc-9.2.0/bin/gcc
    gmake -j $(nproc)
    gmake install -j $(nproc)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    编译安装完成后,查看MySQL的安装目录,如下所示。

    [root@binghe ~]# cd /usr/local/mysql/
    [root@binghe mysql]# ll
    total 956
    drwxr-xr-x  2 mysql mysql   4096 Nov 23 02:15 bin
    drwxr-xr-x  2 mysql mysql   4096 Nov 23 02:15 docs
    drwxr-xr-x  3 mysql mysql   4096 Nov 23 02:14 include
    drwxr-xr-x  6 mysql mysql   4096 Nov 23 02:15 lib
    -rw-r--r--  1 mysql mysql 408918 Sep 20 16:30 LICENSE
    -rw-r--r--  1 mysql mysql 102977 Sep 20 16:30 LICENSE.router
    -rw-r--r--  1 mysql mysql 408918 Sep 20 16:30 LICENSE-test
    drwxr-xr-x  4 mysql mysql   4096 Nov 23 02:15 man
    drwxr-xr-x 10 mysql mysql   4096 Nov 23 02:15 mysql-test
    -rw-r--r--  1 mysql mysql    687 Sep 20 16:30 README
    -rw-r--r--  1 mysql mysql    700 Sep 20 16:30 README.router
    -rw-r--r--  1 mysql mysql    687 Sep 20 16:30 README-test
    drwxrwxr-x  2 mysql mysql   4096 Nov 23 02:15 run
    drwxr-xr-x 28 mysql mysql   4096 Nov 23 02:15 share
    drwxr-xr-x  2 mysql mysql   4096 Nov 23 02:15 support-files
    drwxr-xr-x  3 mysql mysql   4096 Nov 23 02:15 var
    [root@binghe mysql]# 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    说明,MySQL 8.0.18编译安装成功。

    五、配置MySQL

    1.配置mysql用户系统参数

    [root@binghe ~]# vim /etc/security/limits.conf
    mysql soft nproc 65536
    mysql hard nproc 65536
    mysql soft nofile 65536
    mysql hard nofile 65536
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.配置系统环境变量

    vim /etc/profile
    MYSQL_HOME=/usr/local/mysql
    MPC_HOME=/usr/local/mpc-1.1.0
    GMP_HOME=/usr/local/gmp-6.1.2
    MPFR_HOME=/usr/local/mpfr-4.0.2
    LD_LIBRARY_PATH=$MPC_LIB_HOME/lib:$GMP_HOME/lib:$MPFR_HOME/lib:$LD_LIBRARY_PATH
    PATH=$MYSQL_HOME/bin:$PATH
    export MYSQL_HOME MPC_LIB_HOME GMP_HOME MPFR_HOME LD_LIBRARY_PATH PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    输入如下命令使系统环境变量生效。

    source /etc/profile
    
    • 1

    3.配置/etc/ld.so.conf文件

    echo /usr/local/mysql/lib >> /etc/ld.so.conf
    ldconfig
    
    • 1
    • 2

    4.复制MySQL启动文件

    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chmod 700 /etc/init.d/mysqld
    
    • 1
    • 2

    5.配置MySQL开机自启动

    chkconfig --level 35 mysqld on
    
    • 1

    6.配置MySQL配置文件my.cnf

    在使用cmake预编译MySQL时,配置了如下参数。

    -DSYSCONFDIR=/data/mysql/conf
    
    • 1

    所以,这里,我们把my.cnf文件放到/data/mysql/conf目录下,如下所示

    vim /data/mysql/conf/my.cnf
    
    • 1

    my.cnf文件的内容如下所示。

    [client]
    port = 3306
    socket = /data/mysql/run/mysql.sock
    default-character-set = utf8mb4
    
    # The MySQL server
    [mysqld]
    port = 3306
    user = mysql
    socket = /data/mysql/run/mysql.sock
    pid_file = /data/mysql/run/mysqld.pid
    basedir = /usr/local/mysql
    datadir = /data/mysql/data
    tmpdir = /data/mysql/tmp
    open_files_limit = 65535
    explicit_defaults_for_timestamp
    server_id = 1
    lower_case_table_names = 1
    character_set_server = utf8mb4
    safe_user_create
    max_connections = 3000
    max_user_connections=2980
    secure_file_priv=/data/mysql/tmp
    
    max_connect_errors = 100000
    interactive_timeout = 86400
    wait_timeout = 86400
    sync_binlog=100
    back_log=1024
    max_binlog_cache_size=2147483648
    max_binlog_size=524288000
    default_storage_engine = InnoDB
    log_slave_updates = 1
    
    #*********** Logs related settings ***********
    log_bin = /data/mysql/log/bin_log/mysql-bin
    binlog_format= mixed
    binlog_cache_size=32m
    max_binlog_cache_size=64m
    max_binlog_size=512m
    long_query_time = 1
    log_output = FILE
    log_error = /data/mysql/log/error_log/mysql-error.log
    slow_query_log = 1
    slow_query_log_file = /data/mysql/log/query_log/slow_statement.log
    log_queries_not_using_indexes=0
    log_slave_updates=ON
    log_slow_admin_statements=1
    general_log = 0
    general_log_file = /data/mysql/log/general_log/general_statement.log
    binlog_expire_logs_seconds = 1728000
    relay_log = /data/mysql/log/bin_log/relay-bin
    relay_log_index = /data/mysql/log/bin_log/relay-bin.index
    #****** MySQL Replication New Feature*********
    master_info_repository=TABLE
    relay-log-info-repository=TABLE
    relay-log-recovery
    #*********** INNODB Specific options ***********
    innodb_buffer_pool_size = 4096M
    transaction_isolation=REPEATABLE-READ
    innodb_buffer_pool_instances = 8
    innodb_file_per_table = 1
    innodb_data_home_dir = /data/mysql/log/innodb_ts
    innodb_data_file_path = ibdata1:2048M:autoextend
    innodb_thread_concurrency = 8
    innodb_log_buffer_size = 67108864
    innodb_log_file_size = 1048576000
    innodb_log_files_in_group = 4
    innodb_max_undo_log_size=4G
    innodb_undo_directory=/data/mysql/log/undo_space/
    
    
    innodb_log_group_home_dir = /data/mysql/log/innodb_log/
    innodb_adaptive_flushing=ON
    innodb_flush_log_at_trx_commit = 2
    innodb_max_dirty_pages_pct = 60
    innodb_open_files=60000
    innodb_purge_threads=1
    innodb_read_io_threads=4
    innodb_stats_on_metadata=OFF
    innodb_flush_method=O_DIRECT
    [mysql]
    no-auto-rehash
    default-character-set=utf8mb4
    net-buffer-length=64K
    unbuffered
    max-allowed-packet = 2G
    default-character-set = utf8mb4
    
    #some var for mysql8
    #log_error_verbosity=3
    #innodb_print_ddl_logs=1
    #binlog_expire_logs_seconds=259200
    #innodb_dedicate_server=0
    #
    #innodb_status_file=1
    #innodb_status_output=0
    #innodb_status_output_locks=0
    
    [mysqldump]
    quick
    max_allowed_packet=2G
    log_error=/data/mysql/log/error_log/mysql_dump_error.log
    net_buffer_length=8k
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104

    六、初始化MySQL并启动MySQL

    输入如下命令初始化MySQL数据。

    mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize --user=mysql
    
    • 1

    接下来,启动MySQL

    service mysqld start
    
    • 1

    七、登录MySQL并修改密码

    初始化数据时,MySQL会为root账户自动生成一个临时密码,这个临时密码保存在my.cnf文件log_error配置的文件中,我们在my.cnf中配置了如下参数。

    log_error = /data/mysql/log/error_log/mysql-error.log
    
    • 1

    所以,MySQL为root账户自动生成的临时密码保存在/data/mysql/log/error_log/mysql-error.log文件中。

    接下来,查看MySQL为root账户自动生成的临时密码,如下所示。

    vim /data/mysql/log/error_log/mysql-error.log
    
    • 1

    在mysql-error.log文件中,找到如下一行代码。

    2019-11-22T19:05:02.240204Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ujbbqC?A+38g
    
    • 1

    可以看到临时密码为:ujbbqC?A+38g

    接下来,使用root账户和这个临时密码登录MySQL服务器。

    [root@binghe ~]# mysql -uroot -pujbbqC?A+38g
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 8
    Server version: 8.0.18 binghe edition
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    此时,在MySQL命令行执行SQL语句报错,要求重置密码,如下所示。

    mysql> SHOW DATABASES;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql> use mysql;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    接下来,修改MySQL的root密码

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '@Binghe123456';
    Query OK, 0 rows affected (0.03 sec)
     
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.00 sec)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    退出MySQL,并使用root账户和修改后的密码登录MySQL,如下所示。

    mysql> exit
    Bye
    [root@binghe ~]# mysql -uroot -p@Binghe123456
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 8.0.18 binghe edition
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    此时,使用root账户和修改后的密码成功登录MySQL,说明root账户密码修改成功。

    接下来,再次在MySQL命令行执行SQL语句,如下所示。

    mysql> SHOW DATABASES;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.01 sec)
    
    mysql> USE mysql;
    Database changed
    mysql> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    可以看到,修改root账户密码后,再次登录MySQL,可以在命令行正确执行SQL语句。

    至此,源码编译MySQL8.x+升级gcc+升级cmake完美完成。

    八、遇到的问题和解决方案

    编译安装gcc报错

    编译安装gcc时报错,报错信息如下所示。

    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/xgcc -B/usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/ -xc -nostdinc /dev/null -S -o /dev/null -fself-test=../.././gcc/testsuite/selftests
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1plus: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
    make[3]: *** [s-selftest-c++] Error 1
    make[3]: *** Waiting for unfinished jobs....
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
    make[3]: *** [s-selftest-c] Error 1
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory
    /bin/sh ../.././gcc/../move-if-change tmp-macro_list macro_list
    echo timestamp > s-macro_list
    rm gcc.pod
    make[3]: Leaving directory `/usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc'
    make[2]: *** [all-stage1-gcc] Error 2
    make[2]: Leaving directory `/usr/local/src/gcc-9.2.0'
    make[1]: *** [stage1-bubble] Error 2
    make[1]: Leaving directory `/usr/local/src/gcc-9.2.0'
    make: *** [all] Error 2
    
    
    
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
    make[3]: *** [s-selftest-c] Error 1
    make[3]: *** Waiting for unfinished jobs....
    /usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc/cc1plus: error while loading shared libraries: libgmp.so.10: cannot open shared object file: No such file or directory
    /bin/sh ../.././gcc/../move-if-change tmp-macro_list macro_list
    make[3]: *** [s-selftest-c++] Error 1
    echo timestamp > s-macro_list
    rm gcc.pod
    make[3]: Leaving directory `/usr/local/src/gcc-9.2.0/host-x86_64-pc-linux-gnu/gcc'
    make[2]: *** [all-stage1-gcc] Error 2
    make[2]: Leaving directory `/usr/local/src/gcc-9.2.0'
    make[1]: *** [stage1-bubble] Error 2
    make[1]: Leaving directory `/usr/local/src/gcc-9.2.0'
    make: *** [all] Error 2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    解决方案如下:

    首先,配置系统环境变量,如下:

    vim /etc/profile
    
    MPC_HOME=/usr/local/mpc-1.1.0
    GMP_HOME=/usr/local/gmp-6.1.2
    MPFR_HOME=/usr/local/mpfr-4.0.2
    LD_LIBRARY_PATH=$MPC_LIB_HOME/lib:$GMP_HOME/lib:$MPFR_HOME/lib:$LD_LIBRARY_PATH
    export MPC_LIB_HOME GMP_HOME MPFR_HOME LD_LIBRARY_PATH
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    使系统环境变量生效,如下所示

    source /etc/profile
    
    • 1

    接下来,创建系统软链接,如下所示。

    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /lib/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/lib/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/local/lib64/libmpc.so.3
    ln -s /usr/local/mpc-1.1.0/lib/libmpc.so.3.1.0 /usr/local/lib/libmpc.so.3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    也就是说,大家严格按照本文编译安装MySQL 8.x就不会有这个问题。

    九、其他安装方式

    如果大家下载的MySQL源码包不是mysql-8.0.18.tar.gz,而是mysql-boost-8.0.18.tar.gz,如下图所示。

    img

    因为mysql-boost-8.0.18.tar.gz中自带了boost安装文件,在cmake时就不需要下载boost文件了。

    如果大家下载的是mysql-boost-8.0.18.tar.gz,则按照如下方式编译安装MySQL。

    cd /usr/local/src
    tar -zxvf mysql-boost-8.0.18.tar.gz
    cd mysql-8.0.18
    cmake3 -DCMAKE_INSTALL_PREFIX=/usr/local/mysql/ -DMYSQL_DATADIR=/data/mysql/data -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DEXTRA_CHARSETS=all -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 -DCOMPILATION_COMMENT="binghe edition"  -DWITH_BOOST=/usr/local/src/mysql-8.0.18/boost/boost_1_70_0 -DMYSQL_UNIX_ADDR=/data/mysql/run/mysql.sock -DMYSQL_TCP_PORT=3306 -DSYSCONFDIR=/data/mysql/conf -DWITH_READLINE=1 -DFORCE_INSOURCE_BUILD=1 -DWITH_SSL=system -DWITH_ZLIB=system   -DCMAKE_CXX_COMPILER=/usr/local/gcc-9.2.0/bin/g++ -DCMAKE_C_COMPILER=/usr/local/gcc-9.2.0/bin/gcc
    gmake -j $(nproc)
    gmake install -j $(nproc)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    与编译安装mysql-8.0.18.tar.gz源码包相比,编译安装mysql-boost-8.0.18.tar.gz时,使用cmake命令预编译时,去掉了参数-DDOWNLOAD_BOOST=1,并且将参数-DWITH_BOOST=/data/mysql/tmp,修改为-DWITH_BOOST=/usr/local/src/mysql-8.0.18/boost/boost_1_70_0。也就是说,在mysql-boost-8.0.18.tar.gz源码包中,boost安装文件存放在,解压后的mysql-8.0.18目录下的boost/boost_1_70_0目录下。

    至此,整个编译安装与测试过程完美结束。

    十、下载文件

    大家可以到链接:升级gcc与cmake所需的安装文件.rar 下载升级gcc与cmake所需的安装文件,到链接:MySQL 8.0.18源码安装包.rar 下载MySQL 8.0.18源码安装文件。

    好了,今天就到这儿吧,我是冰河,我们下期见~~

    写在最后

    如果你想进大厂,想升职加薪,或者对自己现有的工作比较迷茫,都可以私信我交流,希望我的一些经历能够帮助到大家~~

    推荐阅读:

    好了,今天就到这儿吧,小伙伴们点赞、收藏、评论,一键三连走起呀,我是冰河,我们下期见~~

  • 相关阅读:
    腾讯云短信申请
    Vue React大屏可视化进阶
    数学建模| 优化入门+多目标规划
    The Sandbox阐释对元宇宙平台的愿景
    微软的这个按钮又双叒叕变了位置?有时候还不见了……
    故障分析 | MySQL Router:服务器后端那么闲,为什么不让访问?
    mediasoup webrtc音视频会议搭建
    git进阶
    《机械原理》下 学后感
    Task01|GriModel统计分析(下)|方法论与一元数值检验|假设检验1
  • 原文地址:https://blog.csdn.net/l1028386804/article/details/126222536