Redhat7.3安装MySQL8.0.22——源码安装

一、MySQL安装包下载

  • 官网地址:https://dev.mysql.com/downloads/mysql/

  • 下载源码安装包:

在这里插入图片描述

注意事项:一定要下载含有Boost库文件的源码安装包,否则编译时会报错,找不到Boost目录!

  • 下载后,上传并md5校验安装包是否与上图官方提供的值一致,确保传输过程安装包无损害
[root@MyDB1 ~]# cd /usr/local/software/
[root@MyDB1 software]# md5sum mysql-boost-8.0.22.tar.gz 
2b2d93e8a3c1a29d875daf534ea87c81  mysql-boost-8.0.22.tar.gz
  • 解压安装包
[root@MyDB1 software]# tar -zxvf mysql-boost-8.0.22.tar.gz

二、MySQL卸载说明

  • 只有rpm安装方式是需要卸载旧版本的mysql,二进制安装和编译安装不需要,但是要注意端口冲突
  • rpm若不卸载旧版本,在安装时,它会提示你mysql已安装,此时是无法再次安装的,只有通过yum更新版本
  • 为了保证后续操作不会产生其他冲突,我们卸载原有的mysql

注:在卸载旧的MySQL之前,注意备份数据

[root@MyDB1 ~]# rpm -qa|grep mysql								#查看是否已安装mysql数据库
[root@MyDB1 ~]# rpm -qa|grep mysql|xargs rpm  -e --nodeps					#卸载mysql	
[root@MyDB1 ~]# rpm -qa|grep mariadb-libs|xargs rpm -e --nodeps				#卸载mariadb

三、安装依赖及编译软件

  • 安装之前需要配置好网络yum源
  • 安装依赖
[root@MyDB1 ~]# yum -y install ncurses-devel libaio-devel
  • 安装编译软件
[root@MyDB1 ~]# yum -y install cmake gcc gcc-c++
  • MySQL8版本需要cmake3来编译(遇到的问题,不再支持cmake低版本的编译)

在这里插入图片描述

  • 安装cmake3.5.1以上的版本

    【参考博客连接】:

https://blog.csdn.net/llwy1428/article/details/95473542?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

  • 安装升级过程
[root@MyDB1 ~]# cd /usr/local/software/uploads/
[root@MyDB1 uploads]# wget https://cmake.org/files/v3.14/cmake-3.14.5.tar.gz
[root@MyDB1 uploads]# yum -y remove cmake						#卸载旧的版本
[root@MyDB1 uploads]# tar -zxvf cmake-3.14.5.tar.gz
[root@MyDB1 uploads]# cd cmake-3.14.5/
[root@MyDB1 cmake-3.14.5]# ./configure --prefix=/usr/local/cmake
[root@MyDB1 cmake-3.14.5]# make && make install
[root@MyDB1 cmake-3.14.5]# ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
[root@MyDB1 cmake-3.14.5]# cmake --version
  • 升级成功!

在这里插入图片描述

四、创建用户和组

  • 新建组和用户
[root@MyDB1 ~]# groupadd -g 2000 mysql
[root@MyDB1 ~]# useradd -u 2000 -g mysql -c "MySQL Server" -s /sbin/nologin mysql
[root@MyDB1 ~]# cat /etc/group|grep mysql
mysql:x:2000:
[root@MyDB1 ~]# cat /etc/passwd|grep mysql
mysql:x:2000:2000:Mysql software:/home/mysql:/sbin/nologin

注:若组和用户已存在,则删除系统默认组和用户,再次创建!

  • 删除组和用户
[root@MyDB1 ~]# userdel mysql					#删除用户同时会删除相应的组

五、MySQL编译安装

  • 编译源码(cmake)
[root@MyDB1 software]# cd mysql-8.0.22/

#该目录执行下面命令,进行编译
cmake ../mysql-8.0.22/ -DCMAKE_INSTALL_PREFIX=/usr/local/software/mysql \
-DMYSQL_DATADIR=/usr/local/software/mysql/data\
-DMYSQL_UNIX_ADDR=/usr/local/software/mysql/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8\
-DDEFAULT_COLLATION=utf8_general_ci\
-DWITH_EXTRA_CHARSETS=all\
-DWITH_INNOBASE_STORAGE_ENGINE=1\
-DWITH_FEDERATED_STORAGE_ENGINE=1\
-DWITH_BLACKHOLE_STORAGE_ENGINE=1\
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1\
-DWITH_ZLIB=bundled\
-DWITH_SSL=bundled\
-DENABLED_LOCAL_INFILE=1\
-DWITH_EMBEDDED_SERVER=1\
-DENABLE_DOWNLOADS=1\
-DWITH_DEBUG=0 \
-DWITH_BOOST=boost \
-DFORCE_INSOURCE_BUILD=1

注:上面的安装路径根据实际情况修改!

  • 遇到的问题I:(上面参数已修改,没报错,跳过即可!)

在这里插入图片描述

问题说明:不再支持“在源代码目录下构建”。因为对于统一个源代码可以有多个构建版本,建议在源码外构建

解决方案:强制在源码内构建,在cmake时加上图中提示的参数

-DFORCE_INSOURCE_BUILD=1
  • 构建安装(make)
[root@MyDB1 mysql-8.0.22]# make && make install

注:耐心等待中…耐心没了

终于完事了!安装成功!

在这里插入图片描述

六、MySQL初始化

  • 赋权
[root@MyDB1 ~]# chown -R mysql:mysql /usr/local/software/mysql
  • 初始化之前先编辑好配置文件
[root@MyDB1 ~]# vi /etc/my.cnf
[root@MyDB1 ~]# cat /etc/my.cnf


内容如下:(其他的根据实际需求配置)
[mysqld]
basedir = /usr/local/software/mysql
datadir = /usr/local/software/mysql/data
log_error = /usr/local/software/mysql/mysql-error.log
port = 3306
socket = /usr/local/software/mysql/mysqld.sock
pid_file = /usr/local/software/mysql/mysqld.pid

character-set-server=utf8
lower_case_table_names=1
max_connections=1000
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'


[mysql]
default-character-set=utf8

[client]
default-character-set=utf8
  • 初始化开始
[root@MyDB1 ~]# /usr/local/software/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/software/mysql --datadir=/usr/local/software/mysql/data
  • 初始化过程,输出日志文件中有root用户的临时密码

在这里插入图片描述

  • 初始化之后的目录结构

在这里插入图片描述

七、MySQL启动服务

  • 方式1——init.d:
    • 启动服务
    [root@MyDB1 ~]# cp /usr/local/software/mysql/support-files/mysql.server /etc/init.d/mysqld
    [root@MyDB1 ~]# /etc/init.d/mysqld start
    
    • 验证服务
    [root@MyDB1 ~]# ps -ef|grep mysql
    

    在这里插入图片描述

    • 解释说明

      图中有两个进程,一个主进程,一个守护进程。当mysql意外停止时,守护进程会自动重启mysql服务

    • 演示demo

    [root@MyDB1 ~]# kill -9 75341						#直接杀死进程
    

    在这里插入图片描述

  • 方式2——systemctl:
    • 编辑启动配置文件
    [root@MyDB1 subsys]# vi /etc/systemd/system/mysqld.service
    
    
    内容如下:(缺点:当kill掉时,无法自动启动恢复)
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    Documentation=https://www.freedesktop.org/software/systemd/man/systemd.unit.html
    After=network.target
    After=syslog.target
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    LimitNOFILE = 5000
    ExecStart=/usr/local/software/mysql/bin/mysqld --defaults-file=/etc/my.cnf
    
    • 启动服务
    [root@MyDB1 ~]# systemctl start mysqld.service
    [root@MyDB1 ~]# systemctl status mysqld.service
    

八、安全效率优化

  • 启动权限限制
[root@MyDB1 ~]# cd /usr/local/software/mysql/bin/
[root@MyDB1 bin]# chmod 700 mysqld mysqld_safe 
[root@MyDB1 bin]# ll mysqld mysqld_safe 
-rwx------. 1 mysql mysql 441010738 Sep 24 03:42 mysqld
-rwx------. 1 mysql mysql     29157 Sep 24 03:18 mysqld_safe

注:现在只要root用户才能够启动停止MySQL服务!

  • 服务随系统启动
systemctl enable mysqld.service
systemctl list-unit-files|grep mysql

九、配置环境变量

[root@MyDB1 ~]# vi /etc/profile

追加内容如下:
MYSQL_HOME=/usr/local/software/mysql
export PATH=.:$PATH:$MYSQL_HOME/bin

[root@MyDB1 ~]# source /etc/profile						#重新加载,生效!

十、修改root初始密码

  • 创建socket链接
[root@MyDB1 ~]# ln -s /usr/local/software/mysql/mysqld.sock /tmp/mysql.sock
  • 使用临时密码登录
[root@MyDB1 ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.22

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

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> 

注:当临时密码含有特使符号时,可能命令行输入会产生歧义。此时,交互时输入密码即可!

  • 修改root密码
mysql> alter user root@'localhost' identified by 'MyDB12@com';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

注:MySQL8密码必须符合一定复杂度,否则无法修改;退出当前会话后,重启登录生效!

十一、配置mysql远程登录

  • 关闭防火墙或开放MySQL端口
  • 查看允许访问MySQL的用户和地址
mysql> select user,host from mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
  • 遇到的问题
mysql> grant all privileges on *.* to root@'%' identified by 'MyDB12@com';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use
 near 'identified by 'MyDB12@com'' at line 1

注:该错误并不是语法错误,是因为mysql该版本不支持直接创建用户和赋权,而需要分别实现

  • 创建远程登录用户
mysql> create user 'root'@'%' identified by 'MyDB12@com';
Query OK, 0 rows affected (0.01 sec)
  • 赋权
mysql> grant all privileges on *.* to 'root'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值