源码安装mysql 5.7.25版本

Cenos7…版本需要先卸载mariadb包

[root@localhost ~]# rpm -e --nodeps mariadb-libs

安装mysql的依赖包

[root@localhost ~]# yum -y install gcc gcc-c++ ncurses ncurses-devel cmake bison bison-devel

下载源码

https://dev.mysql.com/downloads/mysql/ 在mysql官网下载源码包,根据自己当前系统选择相对应的源码包,此处我选择的是通用Linux版本
源码安装mysql 5.7.25版本_第1张图片

源码安装mysql 5.7.25版本_第2张图片
源码安装mysql 5.7.25版本_第3张图片
下载这个源码包到哪里都可以,我用的是root用户,测试环境所以放在root的家目录,同时还得下载boots,如果不能下载,配置一个国外源就可以。

[root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.25.tar.gz
[root@localhost ~]# wget http://sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz

解压源码包

解压的时候用tar xf 可以自动识别是什么类型的解压包。如果解压出错,请删掉旧源码包,重新再下载一遍源码包,可能是网络的原因导致源码包没有完全下载,虽然也能解压出来但是编译的时候会出错。

[root@localhost ~]# tar xf mysql-boost-5.7.25.tar.gz
[root@localhost ~]# tar xf boost_1_59_0.tar.gz
[root@localhost ~]# cd mysql-5.7.25

添加启动 MySQL 服务的用户

[root@localhost mysql-8.0.15]# useradd -M -s /sbin/nologin mysql

// -M 不创建用户的家目录
// -s 指定一个不能登录的 shell

对安装目录进行授权

[root@localhost mysql-8.0.15]# mkdir -p /mysql/data
[root@localhost mysql-8.0.15]# mkdir /usr/local/mysql
[root@localhost mysql-8.0.15]# chown -R   mysql:mysql   /usr/local/mysql
[root@localhost mysql-8.0.15]# chown -R   mysql.mysql   /mysql/data
[root@localhost mysql-8.0.15]# chmod 750  /mysql/data

预编译

[root@localhost mysql-5.7.25]# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/mysql/data \
-DWITH_BOOST=../boost_1_59_0 \
-DSYSCONFDIR=/etc \
-DENABLED_LOCAL_INFILE=1 \
-DENABLE_DTRACE=0 \
-DDEFAULT_CHARSET=utf8mb4 \
-DDEFAULT_COLLATION=utf8mb4_general_ci \
-DWITH_EMBEDDED_SERVER=1

更多参数 https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html#option_cmake_enabled_local_infil

当你看到以下信息,则成功
在这里插入图片描述

编译

编译时间较长,请耐心等待,如果中途编译失败,需要删除cmake生成的预编译配置参数的缓存文件和make编译后生成的文件,再重新编译。编译很消耗系统资源,小内存可能编译通不过,最少 2 G 以上的内存。

[root@localhost mysql-5.7.25]# make -j  $(grep processor /proc/cpuinfo | wc -l) && make install

添加环境变量

[root@localhost mysql-5.7.25]# echo -e '\n\nexport PATH=/usr/local/mysql/bin:$PATH\n' >> /etc/profile && source /etc/profile

添加MySQL服务到systemd中

拷贝可执行文件到指定的目录下,并修改名字为mysql
[root@localhost mysql-5.7.25]# cp /usr/local/mysql/support-files/mysql.server   /etc/init.d/mysqld
授予可执行的权限
[root@localhost mysql-5.7.25]# chmod +x /etc/init.d/mysqld
设置为开机启动
[root@localhost mysql-5.7.25]# systemctl enable mysqld

设置配置文件

把以下配置文件写入mysql配置文件里。我是按照我的需求写的,有些配置文件不做详细解释,具体官网查询:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html 注意版本

[root@localhost mysql-5.7.25]# vim /etc/my.cnf
[client]
default-character-set=utf8mb4


[mysql]
default-character-set=utf8mb4

[mysqld]
################ basic settings ################
bind-address = 0.0.0.0
pid-file = /mysql/data/localhost.pid
user = mysql

character_set_server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 如果是 OFF (0),mysqld 在检查客户端连接时解析主机名。
# 如果是 ON (1),mysqld只使用 IP; 
skip_name_resolve = 1

max_allowed_packet = 16777216

# 允许的最大同时客户端连接数。默认情况下,这是151
max_connections = 2000

# 运行错误连接后尝试的次数,默认 100
max_connect_errors = 1000
explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728

# 交互式客户端连接后,没有任何操作的情况下,继续保持连接状态的秒数
interactive_timeout = 1800

# 服务器在关闭之前等待非交互式连接上的活动的秒数。
wait_timeout = 1800
read_buffer_size = 16777216
read_rnd_buffer_size = 33554432
sort_buffer_size = 33554432
key_buffer_size = 256M
transaction_isolation = READ-COMMITTED

############ log settings ############
log_error=/tmp/mysqld.log
expire_logs_days = 30
slow_query_log = 1
long_query_time = 2

# 在写入慢查询日志的语句中包含慢速管理语句
log_slow_admin_statements = 1

# 检查少于此行数的查询结果不会记录到慢查询日志中。
min_examined_row_limit = 100

########### innodb settings ##########
innodb_buffer_pool_size = 1G
innodb_sort_buffer_size = 27108864
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lock_wait_timeout = 5
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_thread_concurrency = 8
innodb_flush_neighbors = 1
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_file_per_table = ON
innodb_log_file_size = 500M
innodb_log_buffer_size = 20M
innodb_log_files_in_group = 3
innodb_flush_log_at_trx_commit=2

初始化数据库

[root@localhost mysql-5.7.25]# mysqld   --initialize   --user=mysql

会生成一个密码。一会儿得用。
源码安装mysql 5.7.25版本_第4张图片

–initialize-insecure 使用空密码。你应该在生产中及时修改密码。
或者使用 --initialize 这样的话,会为 root 用户生成一个随机的密码。
这个随机密码可能会被输出到初始化过程中,也有可能输出到错误日志中。

实现客户端和服务器端的自动加密传输

//5.7需要开启客户端加密连接,会创建一些证书相关的文件。
//这是5.7的新命令
[root@localhost mysql-5.7.25]# mysql_ssl_rsa_setup

启动服务

[root@localhost ~]# systemctl restart mysqld

服务起不来解决办法

源码安装mysql 5.7.25版本_第5张图片

[root@localhost data]# mkdir /mysql/data/localhost.pid

初始化什么都不显示,或者报错解决办法

[root@localhost etc]# rm -rf /etc/my.cnf
[root@localhost data]# rm -rf /mysql/data/*
[root@localhost data]# mysqld   --initialize   --user=mysql
再编写我上面的配置到my。cnf里
[root@localhost data]# vim /etc/my.cnf
[root@localhost data]# mkdir /mysql/data/localhost.pid
[root@localhost data]# systemctl restart mysqld

生活不易,路过各位大佬点个赞

你可能感兴趣的:(个人笔记,源码安装mysql)