mysql8.0.16安装,使用二进制压缩包,安装mysql8.0.16

MySQL二进制压缩包安装

注意:

1、关于mysql.sock看最下方关于【配置mysql开机启动】>【方式二】> 【注意事项】中的解释

2、本教程没有使用默认的mysql.sock路径,采用【配置mysql开机启动】>【方式二】> 【注意事项】中的【解决2】

依赖安装以及卸载冲突

# 根据自己环境情况判断是否执行该命令
yum update -y


# 移除MariaDB
# 搜索
rpm -qa|grep mariadb
# 移除,文件名对应上面搜索出来的名字
rpm -e --nodeps {文件名}
# 验证(不显示名字,及卸载成功)
rpm -qa|grep mariadb


# 依赖安装
yum install -y libaio

下载、解压、移动mysql

#下载
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz

# 解压
tar -xvf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz

# 给包重命名为mysql 并把目录放到 /usr/local/  下面(最后面是/就是原本的文件名,如果不是就是自定义名字)
mv mysql-8.0.16-linux-glibc2.12-x86_64 /usr/local/mysql
   
   

# (参考--有的系统不一定能用)  
# 这条命令是,直接包含了上方两条命令的,如果出现无法执行可能是tar版本过低导致的(含义:加压到指定位置并命令为mysql)
tar -xvf mysql-8.0.16-linux-glibc2.12-x86_64.tar.xz -C /usr/local --transform=s:mysql-8.0.16-linux-glibc2.12-x86_64:mysql

创建用户组和用户

# 创建名为mysql的用户组
groupadd mysql
# 创建一个名为mysql的用户,并将其附加到已经存在的mysql组中
useradd -g mysql mysql

mysql所需目录创建

# 在/usr/local/mysql的目录下创建data目录
mkdir /usr/local/mysql/data
# 赋权限给相关目录
chmod -R 777 /usr/local/mysql/
chmod -R 777 /usr/local/mysql/data/  # 如果你的mysql数据目录在mysql文件夹下,那就不用执行这个
# 将mysql目录的权限授给mysql用户和mysql组;
chown -R mysql:mysql /usr/local/mysql/

# 创建日志目录
mkdir -p /var/log/mysql
# 赋权限给日志目录
chmod -R 755 /var/log/mysql/
# 将mysql的日志目录的权限授给mysql用户和mysql组;
chown -R mysql:mysql /var/log/mysql/


## 如果使用默认的mysql.sock路径,下面不需要执行 ##

# 创建mysql.sock所需要的文件夹:默认是/tmp/mysql.sock,只有mysql启动的时候才能看见这个文件
mkdir -p /var/lib/mysql
# 赋权限mysql.sock所需文件夹
chmod 755 /var/lib/mysql
# 将mysql的mysql.sock的文件夹权限授给mysql用户和mysql组;
chown mysql:mysql /var/lib/mysql

my.cnf配置文件

# 新建mysql配置文件 my.cnf
vim /etc/my.cnf

#如果使用默认的mysql.sock路径需要去掉 socket=/var/lib/mysql/mysql.sock 配置
--------------------------------------------------my.cnf配置文件--------------------------------------------------
# [mysqld] 部分是 MySQL 服务器的配置
[mysqld]
# 设置MySQL服务器监听的端口
port=3306
# 设置服务器的默认时区
default_time_zone='+08:00'
# 设置MySQL的安装目录
basedir=/usr/local/mysql
# 设置MySQL数据库的数据存放目录
datadir=/usr/local/mysql/data
# 指定mysql.sock存放路径(默认:/tmp/mysql.sock)
socket=/var/lib/mysql/mysql.sock
# 是否忽略大小写  1 不区分大小写  0 区分大小写
lower_case_table_names=1
# 允许的最大连接数
max_connections=10000
# 允许连接失败的次数,防止恶意连接尝试
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4(推荐,支持全Unicode字符集)
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用mysql_native_password插件进行用户认证
default_authentication_plugin=mysql_native_password
# SQL模式设置,去掉了ONLY_FULL_GROUP_BY
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

# InnoDB相关配置
# InnoDB缓冲池大小,根据你的内存大小进行调整  
innodb_buffer_pool_size=128M
# InnoDB重做日志文件大小
innodb_log_file_size=50M
# InnoDB日志缓冲区大小
innodb_log_buffer_size=16M
# 提交事务时是否将日志写入磁盘
# 0:每秒将日志缓冲区的内容写入日志文件,并且每秒刷新一次日志文件到磁盘。在事务提交时,不执行任何 I/O 操作。
# 1(默认值):在每次事务提交时,将日志缓冲区的内容写入日志文件,并刷新到磁盘。
# 2:在每次事务提交时,将日志缓冲区的内容写入日志文件,但每秒只刷新一次日志文件到磁盘。
innodb_flush_log_at_trx_commit=1

# 日志配置
# 错误日志文件路径
log_error=/var/log/mysql/error.log
# 开启慢查询日志
slow_query_log=1
# 慢查询日志文件路径
slow_query_log_file=/var/log/mysql/mysql-slow.log
# 慢查询阈值,超过此时间的查询将被记录
long_query_time=2
# 记录未使用索引的查询
log_queries_not_using_indexes=1

# 线程缓存--线程缓存中保持的线程数量
thread_cache_size=8
# 表缓存--打开表的缓存数量
table_open_cache=2000


# [mysql] 部分是MySQL客户端工具的默认配置
[mysql]
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4

# [client] 部分是所有客户端程序(包括mysql, mysqladmin等)的默认配置
[client]
# 设置MySQL客户端连接服务端时默认使用的端口
port=3306
# 设置MySQL客户端默认字符集
default-character-set=utf8mb4
# 指定mysql.sock存放路径(默认:/tmp/mysql.sock)
socket=/var/lib/mysql/mysql.sock
--------------------------------------------------my.cnf配置文件--------------------------------------------------
# 特别注意,这个是所有用户都可读写,由于mysql的安全机制,这种权限可能会被忽视掉,导致配置文件my.cnf不生效
chmod -R 777 /etc/my.cnf
# 建议用这个,用户可读写,其他用户不可写
chmod 644 /etc/my.cnf

初始化

注意:如果在my.cnf中配置了日志(log_error=/var/log/mysql/error.log),执行时是没有信息打印的需要使用 cat /var/log/mysql/error.log 命令查看打印信息

# 进入mysql 安装目录下(初始话mysql):
cd /usr/local/mysql/bin
# 安装MySQL(随机生成密码,每次生成都不一样)
./mysqld --initialize --console         # 推荐
# 或者
./mysqld --initialize --console --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data


# 如果在my.cnf中配置了日志(log_error=/var/log/mysql/error.log),执行时是没有信息打印的需要使用 cat /var/log/mysql/error.log 命令查看打印信息
cat /var/log/mysql/error.log


### 解释 ###
# 1、--user=mysql:这个选项指定了运行 mysqld 进程的用户。在 Linux 系统上,通常推荐使用特定的系统用户(如 mysql)来运行 MySQL 服务器,以增强安全性。
# 2、--basedir=/usr/local/mysql:这个选项指定了 MySQL 安装的基本目录。MySQL 服务器会使用这个目录来查找它需要的文件,如库文件、配置文件等。
# 3、--datadir=/usr/local/mysql/data:这个选项指定了 MySQL 数据的存放目录。当您初始化 MySQL 数据目录时,这个目录会被清空(如果它已存在),并且所有的系统表、用户权限和其他数据都会被创建在这个目录中。
# 4、如果您不指定这些选项,MySQL 会使用默认的值。默认的 datadir 通常是在 basedir 下的 data 子目录中,而默认的 user 和 basedir 则取决于您的安装方式和系统配置。
# 5、如果您只是想在默认设置下快速初始化 MySQL 数据目录,并且您知道当前目录是 MySQL 的 bin 目录,那么 ./mysqld --initialize --console 是可以的。但是,为了清晰和明确,以及为了处理更复杂的系统配置,推荐您使用带有 --user、--basedir 和 --datadir 选项的完整命令。



# 如果初始化后,后续出现问题,想再次从初始化的操作
1、删除mysql数据目录下的内容,这里我是将data目录放在了 /usr/local/mysql/data
2、然后在执行初始化命令就行

image-20210815222150492

启动mysql

## 因为初始话后,会生成一些文件这些文件的用户和权限不同意,然后这里重新赋予权限
# 赋权限给相关目录
chmod -R 777 /usr/local/mysql/
# 将mysql目录的权限授给mysql用户和mysql组;
chown -R mysql:mysql /usr/local/mysql/
# 赋权限给日志目录
chmod -R 755 /var/log/mysql/
# 将mysql的日志目录的权限授给mysql用户和mysql组;
chown -R mysql:mysql /var/log/mysql/



# 这里是用的是脚本启动mysql(最根本的还是用的/usr/local/mysql/bin中的)
# 进入到support-files
cd /usr/local/mysql/support-files
# 启动mysql
./mysql.server start
# 状态
./mysql.server status
# 停止
./mysql.server stop
# 查看mysql进程
ps -e|grep mysql

image-20210815222732614

启动mysql遇到的问题(解决)

# 如果 ./mysql.server start 启动报错
Starting MySQL.Logging to '/usr/local/mysql/data/10-9-178-26.err'.
ERROR! The server quit without updating PID file (/usr/local/mysql/data/10-9-178-26.pid).

# 应该是没有给data赋权限,重新赋权限就能启动成功
chmod -R 777 /usr/local/mysql/data/

image-20210815222811107

配置环境变量

# 方式一
# 创建软连接(实现可直接命令行执行mysql)
ln -s /usr/local/mysql/bin/mysql /usr/bin


# 方式二
# 编辑profile(实现可直接命令行执行mysql)
vim /etc/profile
# 内容
MYSQL_HOME=/usr/local/mysql
PATH=$PATH:$MYSQL_HOME/bin
export PATH
export MYSQL_HOME
# 重新加载配置文件
source /etc/profile


# 验证(确定是否不用进入特定目录就可以使用mysql,密码是:‘./mysqld --initialize --console’执行后生成的密码)
mysql -uroot -p

关闭防火墙/放行端口

注意:

1、测试的情况下建议关闭防火墙

2、正式使用的话,放行端口

# 查看防火墙状态
systemctl status firewalld
# 关闭防火墙(临时关闭防火墙-立马生效,但是重启后失效)
systemctl stop firewalld
# 关闭防火墙(永久关闭-需要重启才会失效)
systemctl disable firewalld
# 查看防火墙某个端口是否开放(测试用)
firewall-cmd --query-port=3306/tcp      


firewall-cmd --query-port=80/tcp                                   # 查看防火墙某个端口是否开放
firewall-cmd --zone=public --add-port=80/tcp --permanent           # 开放防火墙端口80
firewall-cmd --zone=public --remove-port=80/tcp --permanent        # 关闭80端口
firewall-cmd --reload                                              # 配置立即生效
firewall-cmd --zone=public --add-port=8121-8124/tcp --permanent    # 开放一段端口
firewall-cmd --zone=public --list-ports                            # 查看开放的端口列表

重置密码赋予权限

# 进入mysql命令行程序
mysql -uroot -p

# 重置密码(如果配置文件中制定了插件,就不用写 WITH mysql_native_password 了)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'meishibiexuejava';
# 授权(全部数据库权限)
grant all privileges on *.* TO 'root'@'localhost'; 
# 刷新权限
flush privileges;

# 创建用户
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'meishibiexuejava';
# 授权(全部数据库权限)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
# 刷新权限
FLUSH PRIVILEGES;


#### 参考 ###

# 查看MySQL中root用户关联的不同主机(host)条目
SELECT Host FROM mysql.user WHERE User = 'root';
# 修改密码(指定了插件)
alter user 'root'@'%' identified WITH mysql_native_password by 'meishibiexuejava';

mysql -uroot -p登录报错

# 登录报错
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory

# 解决办法:
ln -s /usr/lib64/libtinfo.so.6.1 /usr/lib64/libtinfo.so.5

image-20210815233224128

配置mysql开机自启

方式一

mysql.server(/usr/local/mysql/support-files) 复制到/etc/init.d下面
cp support-files/mysql.server /etc/init.d/mysqld

# 通过chkconfig将mysql服务添加到开机启动的列表里面就可以了
chkconfig --add mysqld

# 列出开机启动项 chkconfig 所知道的所有的服务的情况
chkconfig --list

方式二(推荐)

注意事项
1、如果使用Systemd的方式启动mysql,就需要注意mysql.sock的存储位置
2、mysql.sock默认位置:/tmp/mysql.sock
3、但是我在下面的Systemd服务配置中使用了PrivateTmp=true,这样样就会影响到默认的路径,

# 问题:
1、出现mysql -uroot -p,数据密码后提示:在 `/tmp` 目录下找不到 `mysql.sock` 文件
2、就算添加-S参数也不行

# 解决:
#【解决1】(看完这里就不用往下看了)
但是如果不使用PrivateTmp=true,改为PrivateTmp=false或者去掉就不会影响
    1、也不用在my.cnf中添加socket=/var/lib/mysql/mysql.sock
    2、不用创建/var/lib/mysql目录
    3、不用在Systemd服务配置中的ExecStart添加一个”--socket“参数在指定mysql.sock路径

## 本文安装流程使用的是这个
#【解决2】
但是如果使用PrivateTmp=true,
	1、需要手动创建/var/lib/mysql目录,并配置相应的权限。
	2、my.cnf配置文件中[mysqld]下需要添加 socket=/var/lib/mysql/mysql.sock,来指定mysql.sock路径
	3、Systemd服务配置中的ExecStart需要添加一个”--socket“参数在指定mysql.sock路径
# 结果
如此处理后:mysql -uroot -p -S /var/lib/mysql/mysql.sock 执行输入密码即可进入
操作步骤

注意:PIDFile指向的pid文件,它是在data文件夹下的,不同主机名字不一样,格式一般都是主机名+.pid

# 创建systemd服务文件mysqld.service
vim /etc/systemd/system/mysqld.service

## 如果使用默认的mysql.sock路径,需要去掉--socket=/var/lib/mysql/mysql.sock
# 内容(这个文件中不能有中文注释)
--------------------------------------------------mysqld.service--------------------------------------------------
[Unit]
Description=MySQL Community Server
After=network.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --socket=/var/lib/mysql/mysql.sock --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/master.pid
ExecStop=/usr/local/mysql/bin/mysqladmin -u root shutdown
Restart=on-failure
PrivateTmp=true
PIDFile=/usr/local/mysql/data/master.pid
--------------------------------------------------mysqld.service--------------------------------------------------

# 重新加载systemd配置
systemctl daemon-reload
# 启动MySQL服务
systemctl start mysqld
# 设置MySQL服务为开机启动。
systemctl enable mysqld
# 查看mysql进程
ps -e|grep mysql


#### 参考(mysqld.service) ###

# [Unit]
1、Description=MySQL Community Server: 服务的简短描述,这里描述为“MySQL Community Server”。
2、After=network.target: 这意味着在启动MySQL服务之前,需要先启动network.target。这确保了网络可用后,MySQL才开始启动。
# [Install]  
3、WantedBy=multi-user.target: 这表示在多用户模式下(即非单用户模式),MySQL服务应该被启动。
# [Service]
1、User=mysql: 指定运行MySQL服务的用户为mysql。
2、Group=mysql: 指定运行MySQL服务的用户组为mysql。
3、ExecStart=/usr/local/mysql/bin/mysqld --datadir=/usr/local/mysql/data: 用于定义如何启动 MySQL 服务
			3.1:/usr/local/mysql/bin/mysqld:Systemd会调用这个文件来启动 MySQL服务。
			3.2:--socket=/var/lib/mysql/mysql.sock:指定套接字文件路径,MySQL 通过这个套接字文件与本地客户端通信。通过设置这个参数,你可以确保 MySQL 使用你所指定的路径来创建套接字文件,而不是默认的路径(如 /tmp/mysql.sock),
			3.3:--datadir=/usr/local/mysql/data:指定了数据目录的路径。
4、ExecStop=/usr/local/mysql/bin/mysqladmin -u root shutdown: 指定停止MySQL服务的命令。这里使用了mysqladmin工具来执行shutdown命令,以root用户身份停止MySQL服务。注意,出于安全考虑,通常不建议在命令中直接包含密码。
5、Restart=on-failure: 如果MySQL服务意外退出(即返回非零退出状态),systemd将自动重启它。
6、PrivateTmp=true: 这将为服务创建一个私有的/tmp和/var/tmp目录,这意味着服务不能访问主系统的/tmp和/var/tmp目录,这增加了安全性。
7、PIDFile=/usr/local/mysql/data/mysql.pid: 指定MySQL服务的PID文件路径,这样systemd可以跟踪MySQL的进程ID。(主要指定自己的MySQL,数据目录下的 ‘文件名.pid’ 文件)


#### 参考(mysql服务命令) ###

#本次生效-关机失效
systemctl start mysqld        # 开启服务
systemctl stop mysqld         # 关闭服务
systemctl restart mysqld      # 重启服务
systemctl status mysqld       # 查看服务

#下次开机生效
systemctl enable mysqld        # 打开自启
systemctl disable mysqld       # 关闭自启
systemctl is-enabled mysqld    # 服务名查看服务是否自启
mysql 客户端工具使用指定的mysql.sock路径
使用命令行参数 -S
# 每次执行 mysql 客户端时,都可以使用 -S 或 --socket 参数来指定mysql.sock路径  
mysql -uroot -p -S /var/lib/mysql/mysql.sock
修改 MySQL 客户端配置文件(推荐–本文配置已添加该配置)
[client]  
# 指定mysql.sock存放路径(默认:/tmp/mysql.sock) 
socket=/var/lib/mysql/mysql.sock

# 添加配置后可直接使用该命令,不用添加-S参数
mysql -uroot -p
  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值