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文件

cpp 复制代码
cd /etc/yum.repos.d 
vi scl.repo 
 
//scl.repo文件内容如下:
 
[scl] 
name=CentOS-7 - SCLo sclo 
baseurl=http://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ 
gpgcheck=0 
enabled=1 

使用 scl 软件集安装 gcc

cpp 复制代码
yum install devtoolset-11-gcc devtoolset-11-gcc-c++ 
source /opt/rh/devtoolset-11/enable 
gcc -v   //查看gcc版本
 
yum install epel* 
yum clean all 
yum makecache 
yum install cmake3 ncurses ncurses-devel bison openssl*

创建用户和组

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

javascript 复制代码
// 若待创建的用户名和组已存在,则删除,重新创建
sudo userdel mysql56
sudo groupdel mysql56

// 新的用户名为 mysql56
sudo adduser mysql56

// 输入上述命令后会提示为该用户设置密码

// 接下来会提示出入下列等,直接回车使用默认即可,然后输入 Y
Full Name []:
    ...

// 用户创建完成

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

javascript 复制代码
mkdir node3307

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

javascript 复制代码
mkdir mysql data logs tmp

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

javascript 复制代码
#!/bin/bash                           
                                      
rm -rf ./data/*                       
rm -rf ./logs/*                       
rm -rf ./tmp/*  
javascript 复制代码
#!/bin/bash


./clean.sh


/home/mysql56/node6308/mysql/scripts/mysql_install_db --basedir=/home/mysql56/node6308/mysql --datadir=/home/mysql56/node6308/data 
javascript 复制代码
#!/bin/bash



ps -ef | grep mysqld | grep -v grep | awk '{print $2;}' | xargs -I {} kill -9 {}
javascript 复制代码
#!/bin/bash




/home/mysql56/node6307/mysql/bin/mysqld_safe --defaults-file=/home/mysql56/node6307/my6307.cnf &

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

javascript 复制代码
chmod +x start.sh

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

javascript 复制代码
sudo chown -R mysql56:mysql56 -R /home/mysql56

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

5)修改 my80.cnf 文件权限

javascript 复制代码
cd /home/mysql56/node3307
chmod 0644 my3307.cnf

重要的事情说三遍:

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

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

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

解压 MySQL 源码

javascript 复制代码
tar zxvf mysql-5.6.22.tar.gz
cd mysql-5.6.22
mkdir build3307
cd build3307

编译和安装

javascript 复制代码
// MySQL 5.6、5.7 编译参数
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 ..

// 编译和安装
make -j`nproc`     // -j`nproc`自动获取当前可用的核数
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 文件

javascript 复制代码
# 下面所有的操作都不写入binlog
set session sql_log_bin = 0;

# 删除"s01"用户
delete from mysql.user where user="s01";

# 设置root用户密码
alter user 'root'@'%' identified by 'kingsoft.';

# 创建一个新的用户并设置密码
create user 's01'@'%' identified by 'kingsoft.';

# 把用户host权限改为'%',即允许'root'、's01'用户从任何主机连接
update mysql.user set host='%' where user='root';
update mysql.user set host='%' where user='s01';

# 上述对mysql.user表的更改操作记录在该表中,不会立即生效
# FLUSH PRIVILEGES命令的作用是告诉MySQL服务器重新加载mysql.user,从而使这些更改立即生效(即加载到缓存中)
# 如果不执行该操作,后面对'root'、's01'用户授权时,会出现找不到该用户问题
FLUSH PRIVILEGES;

# 对上述用户进行授权,允许'root'、's01'用户从任何主机连接
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 's01'@'%';

# 允许root用户管理分布式事务的恢复。
GRANT XA_RECOVER_ADMIN ON *.* TO root@'%';
FLUSH PRIVILEGES;

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

配置 my3307.cnf 文件

javascript 复制代码
[client]
user=mysql56
socket=/home/mysql56/node6307/tmp/mysql.sock

[mysqld]
user=mysql56
# init-file=/home/mysql56/init.file
core-file
skip-name-resolve                       = 1
default-storage-engine                  = InnoDB
basedir                                 = /home/mysql56/node6307/mysql
datadir                                 = /home/mysql56/node6307/data
tmpdir                                  = /home/mysql56/node6307/tmp
plugin-dir                              = /home/mysql56/node6307/mysql/lib/plugin
pid-file                                = /home/mysql56/node6307/tmp/mysql.pid
port                                    = 6307
socket                                  = /home/mysql56/node6307/tmp/mysql.sock
log-error=/home/mysql56/node6307/logs/mysqld.log

# mysql服务ID,保证整个集群环境中唯一,默认为1
server-id=666

# 是否只读,1代表只读,0代表读写
read-only=0

# 开启gtid
log-bin = /home/mysql56/node6307/logs/mysql-bin    # MySQL 5.6弃用Gtid时需添加(8.0无需添加)
log-slave-updates = 1    # MySQL 5.6弃用Gtid时需添加(8.0无需添加)
gtid-mode = ON
enforce-gtid-consistency = ON
# log-slave-updates=1


init-file=/home/mysql56/init.file

# 修改认证方式以适配proxysql
default_authentication_plugin=mysql_native_password

explicit_defaults_for_timestamp=1

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

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

初始化

javascript 复制代码
// 文件赋权限
sudo chown -R mysql56:mysql56 /home/mysql56/node6309/data  
sudo chmod -R 755 /home/mysql56/node6309/data

cd /home/mysql56/node6307

./initial.sh

连接 MySQL

javascript 复制代码
# 执行下述命令并使用初始密码进入 mysql
/home/mysql80/node3307/mysql/bin/mysql -h127.0.0.1 -uroot -P3307

# 修改密码
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或更早。
相关推荐
Peter_chq15 分钟前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
Yaml438 分钟前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
追风林1 小时前
mac 本地docker-mysql主从复制部署
mysql·macos·docker
一坨阿亮1 小时前
Linux 使用中的问题
linux·运维
dsywws2 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零3 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
Hsu_kk3 小时前
MySQL 批量删除海量数据的几种方法
数据库·mysql
编程学无止境3 小时前
第02章 MySQL环境搭建
数据库·mysql
knight-n3 小时前
MYSQL库的操作
数据库·mysql
小林熬夜学编程4 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法