当前位置: 首页 > news >正文

Anolis OS 8.8 CentOS8离线安装mysql-8.0.9

下载mysql安装包:
mysql下载地址

在Linux系统中,mysql的安装包除了要区分系统和cpu架构之外,还区分安装方式,下载不同的包,安装方式也完全不一样,安装完成后的效果也完全不一样。

我之前下载的包按照官方安装方式安装后,mysql的运行文件,配置文件,数据文件等等存储在不同的目录,这样对于经常离线操作的我来说,很不方便,迁移起来极为复杂,所以我在习惯上更倾向于安装完成后,是一整块文件夹,方便后期维护管理,这篇文章也是记录安装完成后一整块文件的方式。

下载界面
在这里插入图片描述
在这里插入图片描述
系统类型选择Linux - Generic,我之前选择的别的,安装完成后,mysql文件就是东一块西一块的,目录还不能自定义,注意根据自己系统情况下载。
在这里插入图片描述

特别注意:
如果系统已经安装过mysql了,一定要先清空系统上已经存在的mysql,不然后面在初始化、运行、登录的时候会出现各种错误,并且很不好解决!

除非已经存在的mysql也是一整块文件夹,存放在自定义的目录中,没有放在系统默认目录,这种就不影响。

卸载存在的mysql: 如果数据重要,卸载之前记得备份数据

停止mysql服务:

sudo systemctl stop mysqld

卸载mysql包:

sudo dnf remove mysql-server mysql-client

卸载mysql相关组件:

sudo dnf remove $(dnf list installed | grep mysql | awk '{print $1}')

删除MySQL配置文件:

sudo rm -f /etc/my.cnf /etc/mysql/my.cnf

删除MySQL数据目录:

sudo rm -rf /var/lib/mysql

删除MySQL日志文件:

sudo rm -rf /var/log/mysql

删除MySQL PID文件:

sudo rm -f /var/run/mysqld/mysqld.pid

删除MySQL套接字文件:

sudo rm -f /tmp/mysql.sock

删除MySQL临时目录:

sudo rm -rf /tmp/mysql

清理缓存文件:

sudo dnf clean all

安装:
安装包上传到服务器指定目录,上传方式就不说了,不同的软件方式都不一样,但方式大差不差,上传目录自定义,无所谓,图方便的话,直接上传到自己想安装的目录。

解压安装包:

tar -Jxvf mysql-8.0.39-linux-glibc2.28-x86_64.tar.xz

解压完成后,想改文件夹名称的可以自定义改一下,随便你怎么改,以我这里为例,我直接改成"mysql"名字。
在这里插入图片描述

这个包是免安装的,其实解压完成后,相当于就安装完成了,但是还需要配置一些东西。

进入mysql目录:

cd mysql

新建tmp、log、etc、data等目录:
tmp目录不是必须的,根据现场情况而定,根据项目程序而定,因为我遇到过类似的问题,如果没有这个文件夹,在程序与mysql交互期间,不定时会出现各种问题,具体啥问题抱歉我也忘了,只是当时找到解决方式就是在mysql根目录创建这个文件夹,并配置在my.cnf配置文件中,久而久之,这个习惯就保留下来了。

mkdir tmp
mkdir log
mkdir etc
mkdir data

在etc目录中创建my.cnf文件,并复制以下配置:
注意mysql目录根据自己实际情况做更改,用户也根据自己实际情况做更改。

[client]
port = 3306#设置socke文件所在目录,必须和mysqld下socket配置一致
socket =  /tmp/mysql.sock[mysqld]
#Mysql服务的唯一编号 每个mysql服务Id需唯一
server-id = 1#服务端口号 默认3306
port = 3306#用户
user = user#允许访问的IP网段
bind-address = 0.0.0.0#设置socke文件所在目录,必须和client下socket配置一致
socket =  /tmp/mysql.sock# MySQL X 插件配置
mysqlx-bind-address = ::
mysqlx_socket = /home/user/project/serv/mysql/mysqlx.sock#mysql安装根目录
basedir = /home/user/project/serv/mysql#mysql数据文件所在位置
datadir = /home/user/project/serv/mysql/data#pid
pid-file = /home/user/project/serv/mysql/mysql.pid#设置临时目录
tmpdir = /home/user/project/serv/mysql/tmp#错误日志
log_error=/home/user/project/serv/mysql/log/mysql.log#共享库
plugin-dir = /home/user/project/serv/mysql/lib/plugin#用来存放一些特定类型的数据文件的目录
#secure-file-priv = /home/user/project/serv/mysql/mysql-files#设置认证插件
authentication_policy=mysql_native_password#设置sqlmode(根据需求自定义)
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION#跳过密码登录
#skip-grant-tables#主要用于MyISAM存储引擎,如果多台服务器连接一个数据库则建议注释下面内容
skip-external-locking#只能用IP地址检查客户端的登录,不用主机名
skip_name_resolve = 1#数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'#是否对sql语句大小写敏感,1表示不敏感
lower_case_table_names = 0#用于指定 MySQL 错误消息文件的位置
#lc-messages-dir = /home/user/project/serv/mysql/share/mysql-8.0#最大连接数
max_connections = 2048#最大错误连接数
max_connect_errors = 1000#TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
explicit_defaults_for_timestamp = true#SQL数据包发送的大小,如果有BLOB对象建议修改成1G
max_allowed_packet = 128M#MySQL连接闲置超过一定时间后(单位:秒)将会被强行关闭
#MySQL默认的wait_timeout  值为8个小时, interactive_timeout参数需要同时配置才能生效
interactive_timeout = 1800
wait_timeout = 1800#内部内存临时表的最大值 ,设置成128M。
#比如大数据量的group by ,order by时可能用到临时表,
#超过了这个值将写入磁盘,系统IO压力增大
tmp_table_size = 134217728
max_heap_table_size = 134217728#mysql binlog日志文件保存的过期时间,过期后自动删除(3天)
binlog_expire_logs_seconds = 259200

授权:
如果有tmp目录,就要给这个目录最高权限。
而bin目录是给bin目录里面的东西最高权限,所以两个命令不一样。
其他的目录与文件就不需要给权限了,默认权限就行,特别是etc配置文件,我有次自作主张改了它的权限,mysql反而运行不了了。

sudo chmod 777 /home/user/project/serv/mysql/tmp
sudo chmod 777 /home/user/project/serv/mysql/bin/*

初始化数据库:
然后我看很多教程说要创建一个mysql用户,刚开始接触linux部署mysql时,让我进入了一个误区,以为在linux上面安装mysql,必须创建名称叫mysql的用户才行,后来才慢慢知道,只要除root用户外,另外有一个普通用户就行,叫啥名字都行,就比如我这里用户名是user,那我就不需要再去创建mysql用户,这个用户其实就是系统用户,注意并不是mysql软件的用户。

mysqld --initialize --user=普通系统用户的名称

初始化完成后,界面会输出临时密码,记录好这个密码,后面会用。

准备工作完成,到这里可以测试运行一下:

/home/user/project/serv/mysql/bin/mysqld --defaults-file=/home/user/project/serv/mysql/etc/my.cnf

如果运行失败,大概率是配置文件有问题,小概率是其他原因,这个原因就多了,各种各样,这个就不细说了,每个人遇到的情况不一样,只能遇到问题时再去排查。

命令登录mysql:

mysql -uroot -p

输入刚才的密码,然后回车登录:

修改mysql密码:

alter user root@localhost identified by '新密码';

进入mysql数据库:

use mysql;

设置远程连接:
意思是任何ip都能远程访问mysql的root用户,这里的root就是mysql的用户了,不是系统用户。

update user set host='%' where user='root';

刷新权限:

flush privileges;

退出mysql登录:

quit;

到这里,可以用navicat等类似工具远程访问试试,注意开通3306端口,能连接成功,mysql算是安装完成了一大半,为什么说一大半,是因为像mysql这种关系库,在linux系统中,一般是安装成系统服务,当系统重启或开机时,会自动启动mysql,而刚刚我们是手动命令运行的,所以接下来要把mysql安装成系统服务,也很简单。

把程序安装成系统服务,我记得是有三种方式,我就记录我最常用的一种,另外两种我也忘了,懒得去找了,安装系统服务之前,记得先关闭刚刚启动的mysql。

创建"mysql.service"文件,并复制以下内容到此文件,注意根据自己实际情况更改目录和用户:

[Unit]
Description=MySQL server
After=syslog.target network.target[Service]
#这个设置适用于那些在启动时会fork一个子进程,然后父进程立即退出的服务。
Type=forking#mysql只能用普通用户运行,用root用户运行有问题,且用户组配置必须是root
User=user
Group=root#设置为0也意味着systemd将不再能够强制终止或重启长时间无响应的服务
TimeoutSec=0#当这个选项被设置为true时,它指示systemd在服务启动时应用权限更改,但在服务运行过程中不维持这些权限。
PermissionsStartOnly=true#on-failure意味着当服务的退出状态表明它遭遇了一个错误或异常情况时,systemd将尝试重启该服务。
Restart=on-failure#这个延迟可以用来避免过于频繁的重启循环,即所谓的“restart storm”。在本例中,systemd将在尝试重启服务前等待3秒。
RestartSec=3#1被添加到这个列表中,意味着如果服务以状态码1退出,systemd将不会重启该服务,即使它认为这是一个失败状态。
RestartPreventExitStatus=1#如果设置为true,service将获得一个独立的临时文件存储区域,与其他服务和系统进程隔离。这有助于增强安全性,防止服务之间可能的干扰。但是,如果设置为false(如所示),则服务将使用系统共享的/tmp和/var/tmp目录,这可能会降低安全性,但也可能在某些情况下提供更好的性能或资源利用。
PrivateTmp=false#运行命令
ExecStart=/home/user/project/serv/mysql/bin/mysqld --defaults-file=/home/user/project/serv/mysql/etc/my.cnf --daemonize[Install]
WantedBy=multi-user.target

复制mysql.service文件到/usr/lib/systemd/system目录:

sudo cp mysql.service /usr/lib/systemd/system

设置mysql服务为开机自启:

sudo systemctl daemon-reload
sudo systemctl enable mysql
sudo systemctl start mysql

最后一步,重启服务器测试mysql是否开机自启:

sudo reboot

系统重启后,用navicat等软件远程连接一下,能正常连接基本就没啥问题了。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Docker简介在Centos和Ubuntu环境下安装Docker
  • 医疗监测数据检测系统源码分享
  • Chrome和Chromium浏览器有什么不同?
  • 鸿蒙之Hello Word 遇坑总结 mac系统 不能预览 提示 Only files in a module can be previewed 解决办法
  • 第十一周:机器学习笔记
  • arcgisPro地理配准
  • 【鸿蒙OH-v5.0源码分析之 Linux Kernel 部分】007 - 一号内核线程 kernel_init线程 工作流程分析
  • SQL Server数据库简单的事务日志备份恢复
  • 系统 IO
  • 数据库管理-第241期 KingBaseES V9 on RHEL8(20240912)
  • Docker镜像文件、容器、卷和网络存放位置
  • AcWing算法基础课-789数的范围-Java题解
  • ASPICE评估全流程解析:汽车软件开发组织能力的系统化评估
  • 文件格式转换:EXCEL和CSV文件格式互相转换
  • 进程启动和进程终止
  • CEF与代理
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  • Idea+maven+scala构建包并在spark on yarn 运行
  • Javascript编码规范
  • JAVA并发编程--1.基础概念
  • mysql外键的使用
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • PHP 小技巧
  • Spring-boot 启动时碰到的错误
  • underscore源码剖析之整体架构
  • windows下如何用phpstorm同步测试服务器
  • 第13期 DApp 榜单 :来,吃我这波安利
  • 番外篇1:在Windows环境下安装JDK
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 利用jquery编写加法运算验证码
  • 微信开源mars源码分析1—上层samples分析
  • 一个JAVA程序员成长之路分享
  • 由插件封装引出的一丢丢思考
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (分布式缓存)Redis持久化
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (六)软件测试分工
  • .NET Core 2.1路线图
  • .net core Swagger 过滤部分Api
  • .net core 源码_ASP.NET Core之Identity源码学习
  • .NET 某和OA办公系统全局绕过漏洞分析
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .Net下C#针对Excel开发控件汇总(ClosedXML,EPPlus,NPOI)
  • @RequestMapping-占位符映射
  • @Valid和@NotNull字段校验使用
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [C#]扩展方法
  • [ccc3.0][数字钥匙] UWB配置和使用(二)
  • [Delphi]一个功能完备的国密SM4类(TSM4)[20230329更新]
  • [EFI]NUC11电脑 Hackintosh 黑苹果efi引导文件
  • [Git].gitignore失效的原因