cmake、Boost C++库、ncurses库、OpenSSL库 //需要cmake3,gcc-5.3以上
- 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
- 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 目录下创建一个新的普通用户
- // 若待创建的用户名和组已存在,则删除,重新创建
- sudo userdel mysql56
- sudo groupdel mysql56
-
- // 新的用户名为 mysql56
- sudo adduser mysql56
-
- // 输入上述命令后会提示为该用户设置密码
-
- // 接下来会提示出入下列等,直接回车使用默认即可,然后输入 Y
- Full Name []:
- ...
-
- // 用户创建完成
2)进入 mysql56 用户并创建如下文件及文件夹
mkdir node3307
3)进入 node3307 创建如下文件夹
mkdir mysql data logs tmp
说明:clean.sh initial.sh start.sh stop.sh 为 mysql 初始化、启动、停止、清理缓存等脚本文件,可根据需要考虑是否创建,脚本文件内容如下:
- #!/bin/bash
-
- rm -rf ./data/*
- rm -rf ./logs/*
- rm -rf ./tmp/*
- #!/bin/bash
-
-
- ./clean.sh
-
-
- /home/mysql56/node6308/mysql/scripts/mysql_install_db --basedir=/home/mysql56/node6308/mysql --datadir=/home/mysql56/node6308/data
- #!/bin/bash
-
-
-
- ps -ef | grep mysqld | grep -v grep | awk '{print $2;}' | xargs -I {} kill -9 {}
- #!/bin/bash
-
-
-
-
- /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 文件权限
- cd /home/mysql56/node3307
- chmod 0644 my3307.cnf
重要的事情说三遍:
上述创建用户和组的流程非常重要!
上述创建用户和组的流程非常重要!
上述创建用户和组的流程非常重要!
- tar zxvf mysql-5.6.22.tar.gz
- cd mysql-5.6.22
- mkdir build3307
- cd build3307
- // 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及更高版本原因分析:
扩展:
- MySQL 数据库中字符集与排序规则的默认配置:
1) MySQL8.0(utf8mb4, utf8mb4_0900_ai_ci)
2)MySQL5.6,MySQL5.7(latin1, latin1_swedish_ci)
- 在 MySQL5.6,MySQL5.7 中选择字符集为 utf8mb4 时,默认的排序规则是 utf8mb4_general_ci,而且可选择的排序规则中没有 utf8mb4_0900_ai_ci
- # 下面所有的操作都不写入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 用户下面就可以!
- [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;
- // 文件赋权限
- sudo chown -R mysql56:mysql56 /home/mysql56/node6309/data
- sudo chmod -R 755 /home/mysql56/node6309/data
-
- cd /home/mysql56/node6307
-
- ./initial.sh
- # 执行下述命令并使用初始密码进入 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 完成!