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版本
下载这个源码包到哪里都可以,我用的是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
当你看到以下信息,则成功
编译
编译时间较长,请耐心等待,如果中途编译失败,需要删除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
会生成一个密码。一会儿得用。
–initialize-insecure 使用空密码。你应该在生产中及时修改密码。
或者使用 --initialize 这样的话,会为 root 用户生成一个随机的密码。
这个随机密码可能会被输出到初始化过程中,也有可能输出到错误日志中。
实现客户端和服务器端的自动加密传输
//5.7需要开启客户端加密连接,会创建一些证书相关的文件。
//这是5.7的新命令
[root@localhost mysql-5.7.25]# mysql_ssl_rsa_setup
启动服务
[root@localhost ~]# systemctl restart mysqld
服务起不来解决办法
[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
生活不易,路过各位大佬点个赞