文章目录
- 一、背景说明
- 二、安装步骤
- 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数据库。
默认读取配置文件的顺序如下:
- /etc/my.cnf
- /etc/mysql/my.cnf
- /usr/local/mysql/etc/my.cnf
- ~/.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中的用户创建与授权
参考资料:
-
Linux 安装mysql8详细教程
-
linux下如何安装mysql
-
ubuntu安装mysql遇到的坑----解决Mysql报错缺少libaio.so.1
-
Fatal error: Please read “Security” section of the manual to find out how to run mysqld as r
-
linux查看、添加、删除环境变量【★★★】
-
Linux如何查看所有用户和用户组信息