Linux中安装MySQL
1. 卸载系统自带的mariadb
我这里使用的是Centos7, 所以系统会自带Mariadb,需要先卸载掉,当然后面在安装mysql的过程中也会有提示
-
查询已安装的 Mariadb 安装包:
rpm -qa | grep mariadb
-
将所有的都卸载
yum -y remove xxx
我这里只有一个,如果有多个需要全部删除
2. 下载mysql安装包 (https://www.mysql.com/downloads/)
选择开源免费的社区版进行下载:
选择操作系统:
这里没有centos版本,选择红帽就好
我这里是Centos 7.9, x86架构:
下载第一个rpm捆绑包,
捆绑包中会包含以下内容,就不用自己一个一个下载了
-
mysql-community-server数据库服务器和相关工具
-
mysql-community-clientMySQL客户端应用程序和工具
-
mysql-community-libsMySQL数据库客户端应用程序的共享库
-
mysql-community-common服务器和客户端库的通用文件
-
mysql-community-libs-compat以前的MySQL安装的共享兼容性库
3.正式进行安装
- 在 /opt 目录下新建mysql文件夹, 将下载的安装包推送到该目录下
- 在 /opt/mysql目录下解压安装包:
gzip mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar # 会将.tar文件变成 .tar.gz文件
tar -zxvf mysql-8.0.32-1.el7.x86_64.rpm-bundle.tar.gz # 解压
-
前置检查
由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以需要给 /tmp 目录较大的权限。
chmod -R 777 /tmp
检查依赖:
rpm -qa|grep libaio
如果没有的话需要执行
yum install -y libaio-devel.x86_64
进行安装rpm -qa|grep net-tools
如果没有的话需要执行
yum install net-tools
进行安装 -
开始安装
依次执行以下命令,注意一定要按顺序,因为会有依赖关系
rpm -ivh mysql-community-common-8.0.32-1.el7.x86_64.rpm rpm -ivh mysql-community-client-plugins-8.0.32-1.el7.x86_64.rpm rpm -ivh mysql-community-libs-8.0.32-1.el7.x86_64.rpm rpm -ivh mysql-community-client-8.0.32-1.el7.x86_64.rpm rpm -ivh mysql-community-icu-data-files-8.0.32-1.el7.x86_64.rpm rpm -ivh mysql-community-server-8.0.32-1.el7.x86_64.rpm
4.验证mysql是否安装成功:
mysql --version //查看版本
rpm -qa | grep -i mysql
5.服务的初始化
为了保证数据库目录与文件的所有者为 mysql 登录用户,如果你是以 root 身份运行 mysql 服务,需要执行下面的命令初始化:
mysqld --initialize --user=mysql
说明: --initialize 选项默认以“安全”模式来初始化,则会为 root 用户生成一个密码并将 该密码标记为过期 ,登录后你需要设置一个新的密码。生成的临时密码 会在日志中记录一份。
查看密码:
cat /var/log/mysqld.log
6.启动mysql服务
systemctl start mysqld.service # 启动mysql服务
systemctl status mysqld.service # 查看mysql服务的状态
默认情况下mysql服务是开机自启的
如不是enabled可以运行如下命令设置开机自启动
systemctl enable mysqld.service
7.登录mysql
用前面我们查看的密码进行登录
mysql -uroot -p
输入密码
8.重置密码
执行了一个命令提示我们要修改密码(因为初始化密码默认是过期的,所以查看数据库会报错)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxx';
重新登录一下mysql即可
9.Windows远程连接
这里使用的windows客户端软件是SQLYog
测试连接失败, 这是由于Mysql配置了不支持远程连接
- 到远程Linux主机中查看3306端口是否开放
-
到远程Linux主机中设置防火墙 (Linux中防火墙的基本使用:https://www.cnblogs.com/junlin623/p/17062973.html) 放行3306端口的数据
firewall-cmd --zone=public --add-port=3306/tcp --permanent #放行3306端口 systemctl restart firewalld.service #重启防火墙 firewall-cmd --reload #重新载入配置
- Linux中不允许远程主机通过root用户登录问题
可以看到root用户对应的主机是localhost也就是自身主机
Host列指定了允许用户登录所使用的IP,比如User=root Host=192.168.1.1, 意思就是说root用户只能通过192.168.1.1的客户端去访问; User=root Host=localhost,表示只能通过本机客户端去访问。而 %是个通配符 ,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果 Host=% ,表示所有IP都有连接权限。
注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置。
我们需要将mysql数据库user表中的root用户这个记录对应的主机进行修改
update user set host='%' where user='root';
修改成功:
刷新一下权限:
flush privileges;
此时出现了新的报错:
这个问题只会在mysql 8.0版本中出现, 原因是MySQL8.0对密码进行了加密
远程Linux主机下登录数据库,执行:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; --这里的密码随便设置
sqlyog中重新连接成功: