• Centos MySQL 源码安装(5.6)


    mysql-boost-8.0.31.tar.gz 源码下载

    下载地址:https://dev.mysql.com 

    源码安装要求

    cmake、Boost C++库、ncurses库、OpenSSL库 //需要cmake3,gcc-5.3以上

    源码搭建 mysql 环境

    编辑scl.repo文件

    1. cd /etc/yum.repos.d
    2. vi scl.repo
    3. //scl.repo文件内容如下:
    4. [scl]
    5. name=CentOS-7 - SCLo sclo
    6. baseurl=http://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/
    7. gpgcheck=0
    8. enabled=1

    使用 scl 软件集安装 gcc

    1. yum install devtoolset-11-gcc devtoolset-11-gcc-c++
    2. source /opt/rh/devtoolset-11/enable
    3. gcc -v //查看gcc版本
    4. yum install epel*
    5. yum clean all
    6. yum makecache
    7. yum install cmake3 ncurses ncurses-devel bison openssl*

    创建用户和组

    1)在 /home 目录下创建一个新的普通用户

    1. // 若待创建的用户名和组已存在,则删除,重新创建
    2. sudo userdel mysql56
    3. sudo groupdel mysql56
    4. // 新的用户名为 mysql56
    5. sudo adduser mysql56
    6. // 输入上述命令后会提示为该用户设置密码
    7. // 接下来会提示出入下列等,直接回车使用默认即可,然后输入 Y
    8. Full Name []:
    9. ...
    10. // 用户创建完成

    2)进入 mysql56 用户并创建如下文件及文件夹

    mkdir node3307

    3)进入 node3307 创建如下文件夹

    mkdir mysql data logs tmp

    说明:clean.sh initial.sh start.sh stop.sh 为 mysql 初始化、启动、停止、清理缓存等脚本文件,可根据需要考虑是否创建,脚本文件内容如下:

    • clean.sh 脚本内容如下:
    1. #!/bin/bash
    2. rm -rf ./data/*
    3. rm -rf ./logs/*
    4. rm -rf ./tmp/*
    • initial.sh 脚本内容如下:
    1. #!/bin/bash
    2. ./clean.sh
    3. /home/mysql56/node6308/mysql/scripts/mysql_install_db --basedir=/home/mysql56/node6308/mysql --datadir=/home/mysql56/node6308/data
    • stop.sh 脚本内容如下:
    1. #!/bin/bash
    2. ps -ef | grep mysqld | grep -v grep | awk '{print $2;}' | xargs -I {} kill -9 {}
    • start.sh 脚本内容如下:
    1. #!/bin/bash
    2. /home/mysql56/node6307/mysql/bin/mysqld_safe --defaults-file=/home/mysql56/node6307/my6307.cnf &

    注意:.sh 脚本文件在执行前需要赋予权限。

    chmod +x start.sh

    4)执行如下命令修改 data、logs、tmp 文件的用户名和组名

    sudo chown -R mysql56:mysql56 -R /home/mysql56

    说明:该命令会把 mysql80 下的所有文件及文件夹的用户名和组名修改为 mysql80。

    5)修改 my80.cnf 文件权限

    1. cd /home/mysql56/node3307
    2. chmod 0644 my3307.cnf

    重要的事情说三遍:

    上述创建用户和组的流程非常重要!

    上述创建用户和组的流程非常重要!

    上述创建用户和组的流程非常重要!

    解压 MySQL 源码

    1. tar zxvf mysql-5.6.22.tar.gz
    2. cd mysql-5.6.22
    3. mkdir build3307
    4. cd build3307

    编译和安装

    1. // MySQL 5.6、5.7 编译参数
    2. cmake3 -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DCMAKE_INSTALL_PREFIX=/home/mysql56/node6309/mysql -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DDOWNLOAD_BOOST=1 -DWITH_DEBUG=1 -DWITH_BOOST=/usr/local/all_boost -DWITH_INNOBASE_STORAGE_ENGINE=1 -DCMAKE_C_FLAGS="-Wno-unused-variable -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-nonnull-compare -Wno-int-in-bool-context -Wno-bool-compare -Wno-aligned-new -Wno-logical-not-parentheses -Wno-parentheses -Wno-pointer-compare" -DCMAKE_CXX_FLAGS="-Wno-unused-variable -Wno-unused-parameter -Wno-implicit-fallthrough -Wno-nonnull-compare -Wno-int-in-bool-context -Wno-c++11-compat -Wno-bool-compare -Wno-aligned-new -Wno-logical-not-parentheses -Wno-parentheses -Wno-pointer-compare" -DWITH_EMBEDDED_SERVER:BOOL=OFF -DBUILD_TESTING:BOOL=OFF -DWITH_UNIT_TESTS:BOOL=OFF -DHYPERSCAN_ROOT=/data/hyperscan ..
    3. // 编译和安装
    4. make -j`nproc` // -j`nproc`自动获取当前可用的核数
    5. make install

    注1:5.6 不支持C++ 11及更高版本,所以在编译 MySQL 5.6 时,需将编译器配置改为: C++98 或 C++03 标准。即在CMakeLists.txt文件中增加一行:set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98")。如果不添加,则会报如下错误:

    注2:MySQL 5.6不支持C++ 11及更高版本原因分析:

    1. 宏定义与 C++ 关键字冲突:在 MySQL 5.6.22 的源代码中,univ.i 文件定义了一个宏 byte 为 unsigned char。然而,在 C++11 及其后续版本中,std::byte 是一个内置类型,用于表示原始字节。因此,当您的编译环境设置为 C++11 或更高版本时,这会导致冲突。
    2. 枚举类(enum class)与宏定义冲突:在 C++11 中引入了 enum class,它是一个强类型枚举。然而,由于您之前定义的 byte 宏,编译器在尝试解析 std::byte 类型的枚举时可能会遇到麻烦,因为它实际上试图将 byte 解释为宏展开,而不是 std::byte 类型。

    扩展:

    1. MySQL 数据库中字符集与排序规则的默认配置:

            1) MySQL8.0(utf8mb4, utf8mb4_0900_ai_ci)

            2)MySQL5.6,MySQL5.7(latin1, latin1_swedish_ci)

    1. 在 MySQL5.6,MySQL5.7 中选择字符集为 utf8mb4 时,默认的排序规则是 utf8mb4_general_ci,而且可选择的排序规则中没有 utf8mb4_0900_ai_ci

     配置 init-file 文件

    1. # 下面所有的操作都不写入binlog
    2. set session sql_log_bin = 0;
    3. # 删除"s01"用户
    4. delete from mysql.user where user="s01";
    5. # 设置root用户密码
    6. alter user 'root'@'%' identified by 'kingsoft.';
    7. # 创建一个新的用户并设置密码
    8. create user 's01'@'%' identified by 'kingsoft.';
    9. # 把用户host权限改为'%',即允许'root''s01'用户从任何主机连接
    10. update mysql.user set host='%' where user='root';
    11. update mysql.user set host='%' where user='s01';
    12. # 上述对mysql.user表的更改操作记录在该表中,不会立即生效
    13. # FLUSH PRIVILEGES命令的作用是告诉MySQL服务器重新加载mysql.user,从而使这些更改立即生效(即加载到缓存中)
    14. # 如果不执行该操作,后面对'root''s01'用户授权时,会出现找不到该用户问题
    15. FLUSH PRIVILEGES;
    16. # 对上述用户进行授权,允许'root''s01'用户从任何主机连接
    17. GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
    18. GRANT ALL PRIVILEGES ON *.* TO 's01'@'%';
    19. # 允许root用户管理分布式事务的恢复。
    20. GRANT XA_RECOVER_ADMIN ON *.* TO root@'%';
    21. FLUSH PRIVILEGES;

    注:该配置文件放在 mysql80 用户下面就可以!

    配置 my3307.cnf 文件

    1. [client]
    2. user=mysql56
    3. socket=/home/mysql56/node6307/tmp/mysql.sock
    4. [mysqld]
    5. user=mysql56
    6. # init-file=/home/mysql56/init.file
    7. core-file
    8. skip-name-resolve = 1
    9. default-storage-engine = InnoDB
    10. basedir = /home/mysql56/node6307/mysql
    11. datadir = /home/mysql56/node6307/data
    12. tmpdir = /home/mysql56/node6307/tmp
    13. plugin-dir = /home/mysql56/node6307/mysql/lib/plugin
    14. pid-file = /home/mysql56/node6307/tmp/mysql.pid
    15. port = 6307
    16. socket = /home/mysql56/node6307/tmp/mysql.sock
    17. log-error=/home/mysql56/node6307/logs/mysqld.log
    18. # mysql服务ID,保证整个集群环境中唯一,默认为1
    19. server-id=666
    20. # 是否只读,1代表只读,0代表读写
    21. read-only=0
    22. # 开启gtid
    23. log-bin = /home/mysql56/node6307/logs/mysql-bin # MySQL 5.6弃用Gtid时需添加(8.0无需添加)
    24. log-slave-updates = 1 # MySQL 5.6弃用Gtid时需添加(8.0无需添加)
    25. gtid-mode = ON
    26. enforce-gtid-consistency = ON
    27. # log-slave-updates=1
    28. init-file=/home/mysql56/init.file
    29. # 修改认证方式以适配proxysql
    30. default_authentication_plugin=mysql_native_password
    31. explicit_defaults_for_timestamp=1

    注1:my3307.cnf文件中的/home/mysql80/node3307/mysql为mysql安装路径,根据自己情况进行更改;

    注2:mysql3307.cnf放在对应实例下面,如:/home/mysql80/node3307;

    初始化

    1. // 文件赋权限
    2. sudo chown -R mysql56:mysql56 /home/mysql56/node6309/data
    3. sudo chmod -R 755 /home/mysql56/node6309/data
    4. cd /home/mysql56/node6307
    5. ./initial.sh

    连接 MySQL

    1. # 执行下述命令并使用初始密码进入 mysql
    2. /home/mysql80/node3307/mysql/bin/mysql -h127.0.0.1 -uroot -P3307
    3. # 修改密码
    4. SET PASSWORD FOR 'root'@'127.0.0.1' = PASSWORD('kingsoft.');

    注:上述安装过程为无密码安装,因此连接时,无需输入密码。

    至此,CentOS 7 系统下,源码搭建 MySQL 8.0.31 完成!

    附录


    1. GCC 6.1及之前版本:从GCC 6.1开始,默认使用的C++标准是C++14。这意味着在GCC 6.1及之前的版本中,如果不特别指定,GCC会默认使用C++14的规范进行编译。
    2. GCC 9及以后版本:从GCC 9开始,GCC已经支持C++17,但此时默认标准仍然是C++14。不过,GCC 9及之后的版本已经对C++17提供了完整的支持。
    3. GCC 11:GCC 11将默认前端语言更改为C++17,意味着从GCC 11开始,如果不特别指定,GCC会默认使用C++17的规范进行编译。这一变化反映了GCC对C++17的成熟支持和广泛采用。
    4. 其他版本:
      1. 对于GCC 7和GCC 8,默认标准仍然是C++14,但它们同样支持C++17的编译(虽然不是默认)。
      2. 对于GCC 4.x系列,默认标准通常是C++11或更早。
  • 相关阅读:
    kubectl get nodes报错:The connection to the server localhost:8080
    Gateway基本配置
    ​市场翘首以待本周三美国的通胀报告 美元指数先跌为敬
    C++:类与对象(3)
    React-Context实现水印功能
    哈希传递原理
    基于SSM的邮箱客户端的设计与实现
    12万条中法常见词语对照ACCESS数据库
    qt使用mysql数据库
    采用QT进行OpenGL开发(三)着色器编程
  • 原文地址:https://blog.csdn.net/weixin_47156401/article/details/139868160