1.进入官网下载源码包
官网链接:mysql官网安装包下载
版本:MySQL8.2.0
操作系统:Linux-通用
2. 上传源码到家目录下,上传到虚拟机上
[root@ddecs bin]# ls -l /root/|grep mini
-rw-r--r-- 1 root root 61125672 Jan 30 14:30 mysql-8.2.0-linux-glibc2.17-x86_64-minimal.tar.xz
二进制安装步骤
2.1提前下载依赖工具软件
[root@ddecs bin]# yum install -y cmake ncurses-devel gcc gcc-c++ vim lsof bzip2 openssl-devel ncurses-compat-libs net-tools
2.2 解压二进制安装包
[root@ddecs ~]# tar xf mysql-8.2.0-linux-glibc2.17-x86_64-minimal.tar.xz
2.3 移动MySQL解压后的文件到/usr/local下改名为mysql,/usr/loca/mysql是MySQL的安装目录
2.4 新建组和用户 mysql
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
-r 指定新建用户为系统用户,只用作负责登录
-g 指定新建用户的组为mysql
-s 指定新建用户的shell 为/bin/false 无法ssh登录-确保安全
2.4 关闭firewalld防火墙,并且设置开机不启动
service firewalld stop
systemctl disable firewalld
2.5 临时关闭selinux
setenforce 0
永久关闭selinux
sed -i "/^SELINUX=/ s/enforcing/disabled/" /etc/selinux/config
2.6 新建存放数据目录并修改权限
mkdir /data/mysql -p
修改/data/mysql 目录的权限归mysql用户和mysql组所有,这样mysql用户启动的mysql进程可以对这个文件夹进行读写
chown mysql. /data/mysql
只允许mysql这个用户和mysql组可以访问
chmod 750 /data/mysql
2.7 初始化mysql
cd /usr/local/mysql/bin
[root@ddecs bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/ & >passwd.txt
初始化的目的:建立起mysql启动所需要的文件和库,存放在/data/mysql下
--initialize 初始化
--user 指定启动用户
--basedir 指定安装目录
--datadir 指定mysql数据目录
&>将输出重定项到passwd.txt文件里,方便后续使用awk截取获得密码
[1] 116748
[root@ddecs bin]# ./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
[1]+ Exit 127 ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/
报错提示缺少依赖组件
[root@ddecs bin]# yum install -y libaio
再次初始化成功
2.8 让mysql支持ssl方式登录的设置
[root@ddecs bin]# ./mysql_ssl_rsa_setup --datadir=/data/mysql/
修改PATH变量加入mysql bin 目录的路径
临时
[root@ddecs bin]# export PATH=/usr/local/mysql/bin/:$PATH
设置开机启动
[root@ddecs bin]# echo "export PATH=/usr/local/mysql/bin/:$PATH" >> /root/.bashrc
2.9 复制support-files里的mysql.server文件到/etc/init.d/目录下叫mysqld,并修改datadir目录的值
[root@ddecs bin]# cp ../support-files/mysql.server /etc/init.d/mysqld
[root@ddecs bin]# sed -i "70c datadir=/data/mysql" /etc/init.d/mysqld
生成/etc/my.cnf配置文件
[root@ddecs bin]# cat >/etc/my.cnf <<EOF
> [mysqld_safe]
>
> [client]
> socket=/data/mysql/mysql.sock
>
> [mysqld]
> socket=/data/mysql/mysql.sock
> port = 3306
> open_files_limit = 512M
> character-set-server=utf8
>
> [mysql]
> auto-rehash
> prompt=\\u@\\d \\R:\\m myslq>
> EOF
修改内核的open file 的数量,设置开启启动配置生效
[root@ddecs bin]# ulimit -n 1000000
[root@ddecs bin]# echo "* soft nofile 65535" >> /etc/security/limits.conf
[root@ddecs bin]# echo "* hard nofile 65535" >> /etc/security/limits.conf
启动mysqld进程,并将mysqld添加到linux系统的服务管理名单里
[root@ddecs bin]# service mysqld start
Starting MySQL.Logging to '/data/mysql/ddecs.err'.
/usr/local/mysql/bin/mysqld_safe: line 686: ulimit: 512M: invalid number
.. SUCCESS!
[root@ddecs bin]# system enable mysqld
-bash: system: command not found
[root@ddecs bin]# systemctl enable mysqld
mysqld.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig mysqld on
查看实例端口服务已启动
初始化msyql报错
[root@ddecs bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/ & >passwd.txt
[root@ddecs bin]# ls -l /data/mysql/
[1] 117318
[root@ddecs bin]# 2024-01-30T07:29:33.461265Z 0 [System] [MY-015017] [Server] MySQL Server Initialization - start.
2024-01-30T07:29:33.461398Z 0 [Warning] [MY-010140] [Server] Could not increase number of max_open_files to more than 1000000 (request: 536870912)
2024-01-30T07:29:33.463438Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.2.0) initializing of server in progress as process 117318
2024-01-30T07:29:33.470648Z 0 [Warning] [MY-013242] [Server] --character-set-server: 'utf8' is currently an alias for the character set UTF8MB3, but will be an alias for UTF8MB4 in afuture release. Please consider using UTF8MB4 in order to be unambiguous.
2024-01-30T07:29:33.470720Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2024-01-30T07:29:33.470731Z 0 [ERROR] [MY-013236] [Server] The designated data directory /data/mysql/ is unusable. You can remove all files that the server added to it.
2024-01-30T07:29:33.470811Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-01-30T07:29:33.471056Z 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.2.0) MySQL Community Server - GPL.
2024-01-30T07:29:33.471457Z 0 [System] [MY-015018] [Server] MySQL Server Initialization - end.
^C
[1]+ Exit 1 ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql/
total 32
-rw------- 1 root root 1679 Jan 30 15:00 ca-key.pem
-rw-r--r-- 1 root root 1103 Jan 30 15:00 ca.pem
-rw-r--r-- 1 root root 1103 Jan 30 15:00 client-cert.pem
-rw------- 1 root root 1675 Jan 30 15:00 client-key.pem
-rw------- 1 root root 1679 Jan 30 15:00 private_key.pem
-rw-r--r-- 1 root root 451 Jan 30 15:00 public_key.pem
-rw-r--r-- 1 root root 1103 Jan 30 15:00 server-cert.pem
-rw------- 1 root root 1679 Jan 30 15:00 server-key.pem
[root@ddecs bin]# rm -ef /data/mysql/*
拓展一:
如果初始密码未获取到,可以修改my.cnf文件,再mysqld模块下添加skip-grant-tables参数,免密登录,把root密码置为空后,重启mysql,依旧可以免密登录,登录到数据库后修改root登录密码,刷新权限,重新登录即可