Ubuntu18中MySQL的安装

一、背景说明

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/mysq

ll |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账户。文章还详细介绍了在安装过程中遇到的问题以及相关的处理方法。

 
 
 
 
 


相关链接:

 
 
 
 
 


参考资料:

  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如何查看所有用户和用户组信息

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值