Ubuntu18中MySQL的安装

文章目录

    • 一、背景说明
    • 二、安装步骤
      • 2.1、安装包的获取
      • 2.2、解压并移动
      • 2.3、创建用户和用户组
      • 2.4、给数据目录赋权限
      • 2.5、配置my.conf
      • 2.6、初始化MySQL
      • 2.7、启动MySQL服务
      • 2.8、修改root用户密码
      • 2.9、创建外网访问用户
      • 2.10、设置开机启动
    • 三、问题
      • 3.1、如何查看用户组和用户?
      • 3.2、如何查看环境变量?
      • 3.3、如何退出sudo模式?
      • 3.4、初始化时报错:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
      • 3.5、MySQL中如何修改root用户的密码?
      • 3.6、MySQL的root用户忘记密码怎么办?
      • 3.7、Linux如何查看执行过的命令?
      • 3.8、MySQL启动报错:[Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
      • 3.9、启动失败:...mysql-bin.index' not found (OS errno 13 - Permission denied)
    • 四、总结

一、背景说明

MySQL是一款使用非常广泛的关系型数据库,今天的文章就讲一讲如何在Ubuntu系统中安装MySQL的server端, 利用其存储相关的应用数据,为应用的开发、测试和部署提供有力的支撑。

操作系统版本:Ubuntu 18.04.4 LTS
MySQL版本:8.0.37

二、安装步骤

下面就详细讲解下如何在 Linux 系统中安装 MySQL 数据库。

2.1、安装包的获取

MySQL的下载地址:

https://downloads.mysql.com/archives/community/

在这里插入图片描述

我选择的版本:

MySQL版本:8.0.37
操作系统类型: Linux-Generic

最终的安装包名:mysql-8.0.37-linux-glibc2.17-x86_64-minimal.tar.xz
是其中的 最小化安装版本

将安装包通过下面的命令上传到服务器:

# 进入软件目录(这是我自己创建的目录,根据实际情况进入你习惯存放安装包的目录)
cd ~/software
# 上传安装包
sudo rz -b

2.2、解压并移动

安装包的格式是 .tar.xz,所以使用如下命令进行解压:

# 推荐解压命令
sudo tar -Jxf mysql-8.0.37-linux-glibc2.17-x86_64-minimal.tar.xz# 移动并重命名
sudo mv mysql-8.0.37-linux-glibc2.17-x86_64-minimal /usr/local/mysql8.0.37

2.3、创建用户和用户组

这一步的作用类似于windows系统中用户和用户组的创建。

# 创建用户组,用户组的名称为mysql
sudo groupadd mysql# 创建用户,并绑定到mysql用户组
sudo useradd -r -g mysql mysql

2.4、给数据目录赋权限

MySQL的数据目录,是用于存放数据库数据的。我们打算将其存放于 /data 目录:

# 创建数据目录
cd / && sudo mkdir -p /data/mysql8_data/

在给目录赋权限前,看一下目录的权限信息
在这里插入图片描述
从上图可以看出权限信息:

drwxr-xr-x root root

给目录赋权限:

# 调整目录的所有者
sudo chown mysql:mysql -R /data/mysql8_data# 调整目录的权限
sudo chmod 750 /data/mysql8_data/ -R

调整后的目录权限信息:
在这里插入图片描述

为了能在终端直接通过命令 mysql 登录数据库,需要将路径 /usr/local/mysql8.0.37/bin 加到环境变量中:

#MYSQL_HOME
export MYSQL_HOME=/usr/local/mysql8.0.37
export PATH=$PATH:$MYSQL_HOME/bin

该环境变量建议存放在/etc/profile(系统级环境变量)文件中。

2.5、配置my.conf

my.conf是MySQL的配置文件。其用于初始化MySQL数据库。

默认读取配置文件的顺序如下:

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

默认在 /etc/ 目录中是不存在该文件的。所以需要创建:

# 创建my.cnf文件
sudo touch /etc/my.cnf
# 编辑my.cnf文件
sudo vim /etc/my.cnf

在编辑模式下,向文件中追加如下内容:

[mysqld]
#主库和从库需要不一致
server-id=47#同步的数据库
binlog-do-db=xboot#不需要同步的数据库
binlog-ignore-db=mysql
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql8.0.37# 设置mysql数据库的数据的存放目录
datadir=/data/mysql8_data/mysql
log-bin=/data/mysql8_data/mysql/mysql-bin
innodb_data_home_dir=/data/mysql8_data/mysql
innodb_log_group_home_dir =/data/mysql8_data/mysql#设置mysql数据库的日志及进程数据的存放目录
log-error =/data/mysql8_data/mysql/mysql.log
pid-file =/data/mysql8_data/mysql/mysql.pid# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
#mysql_native_password
default_authentication_plugin=mysql_native_password[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8

2.6、初始化MySQL

该操作需要进入安装目录

# 进入安装目录
cd /usr/local/mysql8.0.37/bin# 初始化:./mysqld --参数=参数值 --initialize
./mysql --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql8.0.37 --datadir=/data/mysql8_data/mysql --user=mysql  -initialize## 报错信息
# ./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

在执行初始化时,报了如下错误:

./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决方法见问题3.4

初始化后,查看mysql.log文件:

# 获得sudo权限
sudo -s
# 查看日志文件
cat /data/mysql8_data/mysql/mysql.log

日志内容如下:
在这里插入图片描述

2.7、启动MySQL服务

测试启动MySQL服务器:

sudo /usr/local/mysql8.0.37/support-files/mysql.server start

输出如下:

ps -aux|grep mysql
root     27448  0.0  0.0   4636  1820 pts/0    S    01:45   0:00 /bin/sh /usr/local/mysql8.0.37/bin/mysqld_safe --datadir=/data/mysql8_data/mysql --pid-file=/data/mysql8_data/mysql/mysql.pid
mysql    27733  7.4 19.0 1781332 389248 pts/0  Sl   01:45   0:00 /usr/local/mysql8.0.37/bin/mysqld --basedir=/usr/local/mysql8.0.37 --datadir=/data/mysql8_data/mysql --plugin-dir=/usr/local/mysql8.0.37/lib/plugin --user=mysql --log-error=/data/mysql8_data/mysql/mysql.log --pid-file=/data/mysql8_data/mysql/mysql.pid --port=3306
ubuntu   27846  0.0  0.0  13776  1088 pts/0    S+   01:45   0:00 grep --color=auto mysql

或是使用命令:

ps -ef|grep mysql

可通过如下命令关闭MySQL服务:

sudo /usr/local/mysql8.0.37/support-files/mysql.server stop

2.8、修改root用户密码

登录mysql,修改 root 用户的密码:

# 登录root用户
# 提示输入密码,临时密码可以从 /data/mysql8_data/mysql/mysql.log获得
sudo mysql -u root -p# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';# 生效修改
flush privileges;

2.9、创建外网访问用户

使用mysql命令登录后,执行下面的脚本:

CREATE USER '你的用户名'@'%' IDENTIFIED BY '你的密码';
GRANT ALL ON *.* TO '你的用户名';
flush privileges;

开放服务器的3306端口
然后使用Navicat进行连接测试!!!

2.10、设置开机启动

添加软连接:

# /etc/init.d 中的文件是随系统启动的
sudo ln -s /usr/local/mysql8.0.37/support-files/mysql.server /etc/init.d/mysql
# 设置开机启动
sudo systemctl enable mysql.service

输出如下:

sudo systemctl enable  mysql.service
# 输出
mysql.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mysql

三、问题

3.1、如何查看用户组和用户?

答:
(1)查询用户

查看所有的用户信息:

# 查看所有的用户信息
cat /etc/passwd

查询指定的用户信息:

cat /etc/passwd|grep 用户名

(2)查询用户组

查看所有的用户组:

# 查看所有的用户组
cat /etc/group

查询指定的用户组:

cat /etc/group|grep 用户名

(3)查询当前登录用户

# 查询当前登录用户(即英文句子who am i)
whoami
## 输出
ubuntu# 查看和当前登录用户同用户组的用户
groups
## groups的输出
ubuntu adm cdrom sudo dip plugdev lpadmin sambashare# 查看指定用户所在的用户组
groups ubuntu## 输出信息分为三块
## 第一部分:冒号前是查询的用户
## 第二部分:冒号后第一个单词是用户所在的用户组
## 第三部分:用户组后是同组的所有用户
ubuntu : ubuntu adm cdrom sudo dip plugdev lpadmin sambashare

3.2、如何查看环境变量?

答:查看当前用户的所有环境变量:

printenv
# or
env

查看指定环境变量:

# 如查看PATH环境变量
echo $PATH

3.3、如何退出sudo模式?

答:
sudo -s 进入root权限,退出使用 exit

sudo -i 进入root权限,退出使用 logout

3.4、初始化时报错:./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

答:
报错原因:
没有插件:libaio

解决方法
安装libaio:

# 注意包名:libaio1
sudo apt install libaio1

3.5、MySQL中如何修改root用户的密码?

答:
知道临时密码:

# 登录root用户
sudo mysql -u root -p# 提示输入密码,临时密码可以从 /data/mysql8_data/mysql/mysql.log获得# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '$新密码';# 生效修改
flush privileges;

3.6、MySQL的root用户忘记密码怎么办?

不知道临时密码(或是忘记密码):

# 关闭MySQL服务
systemctl stop mysql.service# 获得root权限
sudo -s# 打开MySQL的bin目录
cd /usr/local/mysql8.0.37/bin# 跳过权限验证,启动MySQL(需要强制使用root用户启动)
./mysqld --defaults-file=/etc/my.cnf --console --skip-grant-tables --user=root

如果启动MySQL时报了如下错误,请查看 问题3.8 的解决方法:

Please read “Security” section of the manual to find out how to run mysqld as root!

查看mysql是否启动:
在这里插入图片描述

修改root的密码:

# 执行mysql命令,使用无密码登录
./mysql# 执行修改密码脚本前,先执行flush privileges命令,否则会报:
# ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
flush privileges;# 修改root密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '12345678';# 生效修改
flush privileges;# 退出mysql登录
exit;

杀死进程并重启服务:

# kill进程
sudo kill 6871;sudo systemctl start mysql.service

3.7、Linux如何查看执行过的命令?

答:
Linux 中可以通过 history 命令查看最近执行过的命令的历史记录。
可以直接输入:

history

输出如下结果:

...
951  2024-07-24 01:16:55 sudo ./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql8.0.37 --datadir=/data/mysql8_data/mysql --user=mysql  --initialize
...

可以看出上面的结果很多,想要从中找到需要的结果其实还是比较困难的。
如果我只记得一些关键词,那么如何查询到需要的命令历史呢?

以上面的关键词 --initialize 为例,我可能只记得其中的 --init ,可以尝试搭配 grep 对结果进行过滤:

history|grep '--init'

输出结果如下:

Usage: grep [OPTION]... PATTERN [FILE]...
Try 'grep --help' for more information.

之所以报这个错,是因为 grep 默认使用的是基本正则表达式的模式。而 - 是正则表达式的关键字。在这里插入图片描述
所以可以使用下面的命令进行替换:

history|grep "\-\-init"

查询结果如下:
在这里插入图片描述

3.8、MySQL启动报错:[Server] Fatal error: Please read “Security” section of the manual to find out how to run mysqld as root!

详细报错信息:

2024-07-27T03:10:13.411141Z 0 [Warning] [MY-010918] [Server] 'default_authentication_plugin' is deprecated and will be removed in a future release. Please use authentication_policy instead.
2024-07-27T03:10:13.411164Z 0 [System] [MY-010116] [Server] /usr/local/mysql8.0.37/bin/mysqld (mysqld 8.0.37) starting as process 23363
2024-07-27T03:10:13.413916Z 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 a future release. Please consider using UTF8MB4 in order to be unambiguous.
2024-07-27T03:10:13.414682Z 0 [ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2024-07-27T03:10:13.414766Z 0 [ERROR] [MY-010119] [Server] Aborting
2024-07-27T03:10:13.414991Z 0 [System] [MY-010910] [Server] /usr/local/mysql8.0.37/bin/mysqld: Shutdown complete (mysqld 8.0.37)  MySQL Community Server - GPL.

报错原因:

mysql出于安全考虑,默认拒绝用root账号启动mysql服务。

解决方法

强制使用root用户启动:

./mysqld --shared-memory --skip-grant-tables --user=root

3.9、启动失败:…mysql-bin.index’ not found (OS errno 13 - Permission denied)

在这里插入图片描述
问题定位:
打开到目录

cd /data/mysql8_data/mysqll |grep index

在这里插入图片描述
删除index文件:

rm -r mysql-bin.index# 重新启动mysql => 能正常启动
sudo /usr/local/mysql8.0.37/support-files/mysql.server start#需要重新设置开机启动,否则reboot后mysql服务是不启动的
sudo systemctl enable mysql.service

 

四、总结

本文主要讲解了在Ubuntu18 中如何安装MySQL数据库。全文真实详细记录了整个安装过程,涵盖安装包的获取、相关用户和用户组的创建、核心配置文件my.conf的内容有哪些、MySQL的初始化工作如何做以及如何设置MySQL服务随开机启动。

为了对外提供服务,还需要创建必要的MySQL账户。文章还详细介绍了在安装过程中遇到的问题以及相关的处理方法。

 
 
 
 
 


相关链接:

  • [MySQL实践] MySQL中的用户创建与授权

 
 
 
 
 


参考资料:

  1. Linux 安装mysql8详细教程

  2. linux下如何安装mysql

  3. ubuntu安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1

  4. Fatal error: Please read “Security” section of the manual to find out how to run mysqld as r

  5. linux查看、添加、删除环境变量【★★★】

  6. Linux如何查看所有用户和用户组信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3269560.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【C++刷题】优选算法——队列+宽搜

N 叉树的层序遍历 vector<vector<int>> levelOrder(Node* root) {vector<vector<int>> ret;if (root nullptr) return ret;queue<Node*> q;q.push(root);ret.push_back({root->val});int size 1;while (!q.empty()) {vector<int> v…

深入解读 Java 中的 `StringUtils.isNotBlank` 与 `StringUtils.isNotEmpty`

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[2435024119@qq.com] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? 专栏导…

Windows Server搭建局域网NTP时间服务器与客户端通实现

1.服务器环境&#xff1a; win11更改注册表 winR输入regedit win11更改注册表 winR输入regedit 2.HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Config&#xff0c;找到Config目录&#xff0c;双击Config目录下的AnnounceFlags&#xff0c;设为5。 3.HKEY_L…

简单几步,教你使用scikit-learn做分类和回归预测

经常听到初学python的小伙伴在抱怨&#xff0c;python安装第三方库太慢&#xff0c;很容易失败报错&#xff0c;如果安装pandas、tensorflow这种体积大的库&#xff0c;简直龟速。 为什么pip会很慢&#xff1f; 先来了解下pip&#xff0c;pip是一个非常流行的python包管理工具…

C语言数组练习--扫雷

一.游戏规则 扫雷的基本规则&#xff1a; 点击方格&#xff0c;如果是地雷&#xff0c;游戏失败&#xff1b;找到所有方格而不踩到地雷则游戏胜利。左键翻开方格&#xff0c;右键标记地雷。双击左键&#xff08;或者左右键一起点&#xff09;可以看到数字的可点击范围。数字表示…

Temu卖家必读:测评补单策略,提升销量与转化率!

拼多多旗下的跨境电商平台Temu&#xff0c;凭借其独特的广告和低价策略&#xff0c;迅速在美国市场站稳脚跟&#xff0c;并在欧美市场取得初步成功后&#xff0c;马不停蹄地迈向了更广阔的海外市场。去年七月&#xff0c;Temu正式进军亚洲市场&#xff0c;日本与韩国成为其首批…

redis:清除缓存的最简单命令示例

清除redis缓存命令(执行命令列表见截图) 1.打开cmd窗口&#xff0c;并cd进入redis所在目录 2.登录redis redis-cli 3.查询指定队列当前的记录数 llen 队列名称 4.清除指定队列所有记录 ltrim 队列名称 1 0 5.再次查询&#xff0c;确认队列的记录数是否已清除

MySQL练习(5)

作业要求&#xff1a; 实现过程&#xff1a; 一、触发器 &#xff08;1&#xff09;建立两个表&#xff1a;goods&#xff08;商品表&#xff09;、orders&#xff08;订单表&#xff09; &#xff08;2&#xff09;在商品表中导入商品记录 &#xff08;3&#xff09;建立触发…

Milvus × RAG助力快看多业务应用

快看介绍 快看漫画创办于2014年&#xff0c;集漫画阅读、创作互动、线下漫画沉浸体验、周边衍生品购买等体验于一体&#xff0c;是年轻人的一站式漫画生活方式平台。截止到2023年底&#xff0c;快看总用户超过3.8亿&#xff0c;在中国漫画市场渗透率超过50%。经过9年的创作者生…

Linux:文件管理(文件信息、文件类型、访问权限、文件压缩和解压、文件查找)

文件管理 (1)查看文件信息 查看文件的权限&#xff08;读写和执行&#xff09;、文件所属用户和文件所属组、文件大小、文件创建时间、文件名称等 ls -lahF l表示文件属性&#xff1b;F表示目录后面添加/&#xff1b;a表示显示隐藏的文件&#xff1b;h表示以友好的方式显示文件…

GLSL教程 第4章:编写第一个片段着色器

目录 4.1 片段着色器的作用 4.2 片段输出和颜色 4.3 编写第一个片段着色器的步骤 4.4 实际应用和调试 小结 在本章中&#xff0c;我们将学习如何编写一个基本的片段着色器。片段着色器是图形管线中的关键阶段&#xff0c;负责处理图形渲染中的每个像素&#xff08;即片段&…

【图论】Bellman-Ford

算法-Bellman-Ford 前置知识 图论 思路 Bellman-Ford 是一种单源最短路算法&#xff0c;可以得到一个不含有负环的图上由一个点出发的最短路&#xff08;即单源最短路&#xff09;。 我们记录 d d d 数组为距离数组。 每次我们遍历每一条边 ( u , v , w ) (u,v,w) (u,v,w)&…

【Java基础系列】RBAC:介绍与原理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

为什么多数大数据治理项目都是失败的?Gartner调查失败率超过90%

引言&#xff1a;随着数据规模的爆发式增长、数据价值的凸显以及数据治理的必要性。在政策的推动、市场需求的拉动以及技术进步的支撑下&#xff0c;大数据治理正成为推动企业数字化转型、提升数据价值的重要手段。企业希望通过大数据治理提升数据利用率和数据价值&#xff0c;…

0719_驱动2 编写编译linux内核模块

一、编写linux内核模块 linux内核模块三要素&#xff1a; 入口&#xff1a;执行insmod 安装命令操作 出口&#xff1a; 执行rmmod 卸载命令操作 许可证&#xff1a;遵循GPL协议&#xff0c;开源&#xff0c;指定入口地址&#xff0c;出口地址 #include <linux/init.h> #i…

Nginx中WebSocket配置说明

查看 laravel 的 swool扩展文档时遇到不懂的&#xff0c;问了文心一言 https://gitee.com/resourcesplus/laravel-s/#%E5%90%AF%E7%94%A8websocket%E6%9C%8D%E5%8A%A1%E5%99%A8 nginx语法中 upstream 和 proxy_pass 用法

【秋招突围】2024届秋招笔试-美团笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新 美团 春秋招笔试题**汇总~ 👏 感谢大家的订阅➕ 和 喜欢💗 01.LYA 的音乐播放列表 问题描述 LYA 有一个包含 n n n 首歌曲的音乐播放列表,歌曲编号从 1 1

springboot使用Gateway做网关并且配置全局拦截器

一、为什么要用网关 统一入口&#xff1a; 作用&#xff1a;作为所有客户端请求的统一入口。说明&#xff1a;所有客户端请求都通过网关进行路由&#xff0c;网关负责将请求转发到后端的微服务 路由转发&#xff1a; 作用&#xff1a;根据请求的URL、方法等信息将请求路由到…

uniapp中出现图片过小会与盒子偏离

结论&#xff1a;在image的父盒子中加上display: flex&#xff0c;原因不清楚 出问题的代码和图片如下&#xff1a; <template><view style" background-color: greenyellow; height: 10rpx;width: 10rpx;"><image :src"imgSrc.seatnull" …

《破解验证码:用Requests和Selenium实现模拟登录的终极指南》

两种模拟登录方式(图形验证码) 超级鹰 打码平台&#xff0c;用于识别验证码 requests模拟登录 from chaojiying import Chaojiying_Client import requests from requests import Session from lxml import etree #获取图片信息 def get_pic_info(img_name):chaojiying Ch…