FAIRYFAR-INTERNAL
 
  FAIRYFAR-INTERNAL  |  SITEMAP  |  ABOUT-ME  |  HOME  
Linux源码编译安装MySQL8

本文在CentOS 7上测试通过。

一、准备

关于boost库

官网源码有带boost库的源码和不带boost库的源码两种,因此有两种安装方式,其实都是一样的,仅仅是不带boost库源码的需要单独安装boost。

下载MySQL源码包

在下载页面选择“Source Code”,并下载 mysql-boost-8.0.27.tar.gz

下载页面:https://dev.mysql.com/downloads/mysql/

准备依赖库

依赖库需要yum自行安装。

snippet.bash
yum install ncurses-devel bison openssl openssl-devel

因为,具体环境不同,可能需要的库远远多于上述提及的库。

在后面的cmake阶段,如果缺少库,或者版本不满足要求,需要逐项解决。例如,cmake需要安装cmake3、gcc需要高于7.1等。

关于编译安装条件,可以查询官方手册:https://dev.mysql.com/doc/refman/8.0/en/source-installation.html

二、编译

准备目录

snippet.bash
mkdir /home/yz/mysql/my_bin  # 安装目录
mkdir /home/yz/mysql/my_data # 数据目录

解压并编译

snippet.bash
[yz@localhost mysql]$ tar -xf mysql-boost-8.0.27.tar.gz
[yz@localhost mysql-8.0.27]$ cmake .  \
-DCMAKE_INSTALL_PREFIX=/home/yz/mysql/my_bin/  \  # 安装目录
-DMYSQL_DATADIR=/home/yz/mysql/my_data/  \  # 数据目录
-DSYSCONFDIR=/etc  \ # 配置文件目录
-DMYSQL_TCP_PORT=3306  \
-DWITH_BOOST=/home/yz/mysql/mysql-8.0.27/boost  \ # boost库目录,我们下载的源码有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  \
-DCMAKE_BUILD_TYPE=Debug  # 编译Debug版本,如果是生产环境,建议去掉此编译参数。

如果缺少依赖库,此步骤将会报错,根据提示解决依赖。

解决依赖后,重新编译,通常会报错,建议增加以下编译参数:

-DFORCE_INSOURCE_BUILD=1  # 强制build

cmake成功后,可以make了:

make
make install

三、初始化数据库

snippet.bash
[yz@localhost mysql]$ cd my_bin/bin/
[yz@localhost bin]$ pwd
/home/yz/mysql/my_bin/bin
[yz@localhost bin]$ ./mysqld --initialize-insecure --user=mysql --basedir=/home/yz/mysql/my_bin/ --datadir=/home/yz/mysql/my_data/

四、配置

MySQL配置文件分多级,这里仅配置 ~/.my.cnf

snippet.ini
[client]
port=3306
socket=/home/yz/mysql/my_log/mysql.sock
 
[mysqld]
port=3306
socket=/home/yz/mysql/my_log/mysql.sock
basedir=/home/yz/mysql/my_bin
datadir=/home/yz/mysql/my_data
pid-file=/home/yz/mysql/my_log/mysql.pid
log-error=/home/yz/mysql/my_log/logs/error.log
#设置隔离级别的参数 = 读提交,不允许脏读,但允许不可重复读
transaction_isolation = READ-COMMITTED
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
#表名存储为给定的大小和比较是区分大小写的
lower_case_table_names = 0
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
 
default_authentication_plugin = mysql_native_password
 
#非交互式连接超时时间,默认的连接mysql api程序,jdbc连接数据库等
wait_timeout=600
#交互式连接超时时间(mysql工具、mysqldump等)
interactive_timeout=240
 
default_storage_engine = innodb  #表示永久表(permanent tables)的默认存储引擎
max_connections = 4000           #设置最大连接(用户)数
max_connect_errors = 1000        #负责阻止过多尝试失败的客户端以防止暴力破解密码的情况
table_open_cache = 1024          #设置table高速缓存的数量
max_allowed_packet = 128M        #服务器端和客户端在一次传送数据包的过程当中最大允许的数据包大小
open_files_limit = 65535         #mysqld进程能使用的最大文件描述(FD)符数量
server-id=1
enforce_gtid_consistency=on      #启动临时表功能
log-slave-updates=1              #主从同步的设置
log-bin=master-bin
log-bin-index = master-bin.index
relay-log = relay-log
relay-log-index = relay-log.index
binlog_format=row   #日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改
skip-name-resolve
log-slave-updates=1
#禁止SQL线程在执行完一个relay-log后自动将其删除
relay_log_purge = 0
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /home/yz/mysql/my_log/logs/mysql-slow.log

五、启停

设置环境变量

snippet.bash
[yz@localhost ~]$ vim ~/.bash_profile
PATH=/home/yz/mysql/my_bin/bin:$PATH:$HOME/.local/bin:$HOME/bin

启动

snippet.bash
[yz@localhost ~]$ source ~/.bash_profile
[yz@localhost ~]$ mysqld_safe --defaults-file=~/.my.cnf --gdb &

停止

snippet.bash
[yz@localhost ~]$ source ~/.bash_profile
[yz@localhost ~]$ mysqladmin shutdown -uroot

六、客户端登录

snippet.bash
[yz@localhost ~]$ mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.27-debug Source distribution
 
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
 
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>


打赏作者以资鼓励: