一、卸载mariadb
1、检查Linux是否安装了mariadb数据库
mariadb数据库是mysql的分支,为避免安装mysql时产生冲突,需提前卸载mariadb
yum list installed | grep mariadb
无结果说明未安装,否无需要全部删除
2、全部卸载
yum -y remove mariadb*
3、检查mariadb是否全部卸载
yum list installed | grep mariadb
二、卸载之前安装的mysql
rpm -qa|grep -i mysql
无结果,说明之前未安装
1、查找是否存在mysql文件夹
find / -name *mysql*
2、检查之前安装的mysql目录并删除mysql文件和库
如果存在mysql文件夹,则需要进行删除
rm -rf /文件夹名
3、卸载后手动删除/etc/my.cnf
rm -rf /etc/my.cnf
三、安装并配置MySQL
1、将下载好的MySQL上传到Linux系统
云盘连接放这里了,有需要的小伙伴可以自取
链接:https://pan.baidu.com/s/1NEQ7E5hE7tpXP_-3Ff1p4Q
提取码:5k0q
2、解压mysql
tar -xf mysql-8.0.30-el7-x86_64.tar.gz
3、重命名文件夹
mv mysql-8.0.30-el7-x86_64 /usr/local/mysql8.0.30
这里的mv指令,实现了移动和重命名的功能,如果/usr/local没有目标目录,则会自动创建
4、创建用户组及用户和密码
groupadd mysql
useradd -g mysql mysql
为什么要创建mysql分组: 我们在编译安装的时候创建一个mysql组和一个mysql用户,并把datadir和安装目录属主改为mysql,在MySQL启动的时候,单进程mysqld,该进程的属主就是mysql,这样就保证了mysql服务的独立性,即便mysql服务被黑掉,得到了mysql用户权限,也不会影响整个系统的安全
5、授权用户
chown -R mysql:mysql mysql-8.0.30/
这里的-R参数意思是将mysql-8.0.30目录下所有的文件的所有者都更改为mysql
6、切换到bin目录下,初始化基本信息得到临时密码
cd /usr/local/mysql-8.0.30/bin
在/usr/local/mysql-8.0.30目录下创建data文件夹并将所有者改为mysql
mkdir data
chown -R mysql:mysql data
chmod 777 data/
./mysqld --user=mysql --basedir=/usr/local/mysql-8.0.30 --datadir=/usr/local/mysql-8.0.30/data/ --initialize
执行成功后,会得到一个临时密码,如下图所示
7、编辑配置文件/etc/my.cnf
vim /etc/my.cnf
[mysql]
#MySQL 提示符配置
#用户名@主机名+数据库名
#prompt="\\u@\\h [\\d]>"
#用户名@主机名+mysql版本号+数据库名
prompt=\\u@\\h \\v [\\d]>\\_
#用户名@主机名+当前时间+mysql版本号+数据库名
#prompt="(\\u@\\h) \\R:\\m:\\s \\v [\\d] \n>"
[mysqld]
#mysql安装根目录
basedir = /usr/local/mysql-8.0.30/
#mysql数据文件所在位置
datadir = /usr/local/mysql/mysql-8.0.30/data/
#设置socke文件所在目录
socket = /tmp/mysql.sock
#数据库默认字符集, 主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
character-set-server = utf8mb4
#数据库字符集对应一些排序等规则,注意要和character-set-server对应
collation-server = utf8mb4_general_ci
#设置client连接mysql时的字符集,防止乱码
init_connect='SET NAMES utf8mb4'
8、添加mysql服务到系统
cp -a /usr/local/mysql-8.0.30/support-files/mysql.server /etc/init.d/mysql
添加mysql到服务及设置为开机自动启动
chkconfig --add mysql #添加服务mysql
chkconfig mysql on #设置mysql服务为自启动
chkconfig --list #检查是否设置开机启动成功
-a 参数表示权限等属性一致复制
/etc/init.d下存放的是一些服务的启动脚本,添加后可以使用service mysql start来对服务进行启动1、init.d 目录中存放的是一系列系统服务的管理(启动与停止)脚本。
2、用service命令可执行init.d目录中相应服务的脚本。
例:执行命令“service resin start”,可启动/etc/init.d/resin脚本
3、/etc/init.d是指向/etc/rc.d/init.d的软连接
10、启动mysql及查看状态
service mysql start
service mysql status
在启动的过程中,如果报错Starting MySQL… ERROR! The server quit without updating PID file (/usr/local/mysql-8.0.30/data//localhost.localdomain.pid),则需要查看配置文件中所用到的文件的(如tmp)权限;具体原因可查看localhost.localdomain.err文件中进行查看
11、将mysql指令添加到指令系统并登录
在根目录下如果直接输入mysql -uroot -p,则会提示未找到指令,需要到mysql安装目录下的bin目录中执行,但是每次都这样就比较麻烦,所以可以把mysql指令添加到系统,这样就可以实现在任意目录下执行该指令
ln -s /usr/local/mysql-8.0.30/bin/mysql /usr/bin/
mysql -uroot -p
Enter password: #输入之前生成的随机密码
12、修改root密码
登录成功后,可以执行如下指令,进行修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
flush privileges;
如果忘记密码或者密码不生效都可进行如下操作(这种情况只有在忘记root密码 不得已重启数据库的情况下使用的。现网环境慎用,需要重启数据库,并且安全性也比较难以保证)
[root@localhost /]# mysql -uroot -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
service mysql stop # 停止mysql服务
service mysql start --skip-grant-tables # 启动mysql并关闭验证功能
mysql -uroot -p #输入该指令后,连续输入两次回车
此时如果直接去进行修改密令则会报错
root@localhost 8.0.30 [mysql]> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
这是因为我们在启动的时候跳跃权限表的限制(直接翻译的,深层原因笔者也不知道,欢迎知道的大佬补充)
需要先执行flush privileges,然后再执行修改密码的指令就可以了,修改完立刻生效的话,需要在执行下flush privileges指令
13、退出mysql
exit
三、Linux虚拟机防火墙开放3306端口
1、查看3306端口开放状态并打开
firewall-cmd --list-ports
firewall-cmd --zone=public --add-port=3306/tcp --permanent ···
2、防火墙重载
systemctl restart firewalld
或
firewall-cmd --reload
3、检验是否开放成功
firewall-cmd --list-ports
四、登录MySQL
mysql安装好,服务启动后,直接用连接工具连接,一般会报错
改表法。可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从"localhost"改称"%"
mysql -u root -p
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;
mysql>flush privileges;
再次连接就可以了
总结:至此,mysql在linux服务器上就安装好了,小伙伴有补充的地方欢迎在评论区留言补充
版权声明:本文为CSDN博主「程序前行者」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_62808124/article/details/126436925