centos7安装mysql

前言

今天我来给大家介绍在linux环境中如果安装mysql,我的操作系统是centos7.5,所有下面我所有操作步骤都在centos7.5环境下完成的。

检查系统是否安装mysql

1
# rpm -qa | grep mysql

如果返回空值,说明没有安装
从最新版本的linux系统开始,默认的是 Mariadb而不是mysql!

查看是否有wget命令
在命令行中输入:

1
# wget

如果出现 未找到命令,再执行下面命令:

1
# yum -y install wget

安装MySQL的 Yum Repository

在mysql官方找rmp文件

到这里找到对应系统的版本,https://dev.mysql.com/downloads/repo/yum/
点击Download,到了下载页面有两个大的按钮,在两个按钮下找到
No thanks, just start my download.右键复制链接地址。
黏贴后就是https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

下载rpm文件并安装

1
# wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
1
# rpm -Uvh mysql80-community-release-el7-1.noarch.rpm

接下来就可以正式安装mysql了,但是呢?如果直接安装默认的是8.0版本的,我在这里演需要安装5.7版本.如果需要的就是8.0版本可以跳过下一步

修改安装默认为mysql5.7版本
修改配置

1
# vi /etc/yum.repos.d/mysql-community.repo

这里我用的是mysql5.7的所以把5.7的enabled=1,把8.0的enabled=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# Enable to use MySQL 5.7
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/7/$basearch/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

修改好保存退出

安装mysql
执行:

1
yum -y install mysql mysql-server mysql-devel

这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb

MySQL数据库设置

首先启动MySQL

1
# systemctl start  mysqld.service

查看MySQL运行状态:

1
# systemctl status mysqld.service

输出:

1
2
3
4
5
6
7
8
9
10
mysqld.service - MySQL Server
Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
Active: active (running) since Wed 2019-12-11 09:31:06 CST; 10s ago
Docs: man:mysqld(8)
http://dev.mysql.com/doc/refman/en/using-systemd.html
Process: 2712 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid $MYSQLD_OPTS (code=exited, status=0/SUCCESS)
Process: 2662 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
Main PID: 2715 (mysqld)
CGroup: /system.slice/mysqld.service
└─2715 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

补上一个命令
重新启动mysql服务:

1
# systemctl restart  mysqld.service

找出mysql的登录密码
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

1
# grep "password" /var/log/mysqld.log

输出:

1
2019-12-11T01:31:02.794484Z 1 [Note] A temporary password is generated for root@localhost: bpi+UkOPe7d/

root@localhost: 后面的bpi+UkOPe7d/就是密码了。

进入数据库修改密码
如下命令进入数据库:

1
# mysql -uroot -p

输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库。
修改密码:

1
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

这里有个问题,新密码设置的时候如果设置的过于简单会报错:

1
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关,
修改密码规则(需要先给默认账户改好密码后执行才生效):

1
2
mysql> set global validate_password_policy=0;
mysql> set global validate_password_length=1;

此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。
退出mysql:

1
mysql>exit;

再登录试试修改密码是否成功:登录Mysql:输入mysql -u帐号 -p密码 这是登陆

1
# mysql -uroot -p123456

但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:

1
# yum -y mysql80-community-release.noarch

此时才算真的完成了。

检查mysql端口是否开启

1
# firewall-cmd --query-port=3306/tcp

查看3306端口是否开启,yes表示开启,no表示未开启。还有一种情况,防火墙没有打开如下:

1
FirewallD is not running

看需要双方开启防火墙
启动防火墙:

1
# systemctl start firewalld

开机启用:

1
# systemctl enable firewalld

永久开启3306端口:

1
# firewall-cmd --zone=public --add-port=3306/tcp --permanent

重新载入

1
# firewall-cmd --reload

mysql权限与远程连接

创建用户
以root用户登录到数据库进行用户创建命令:

1
CREATE USER 'username'@'host' IDENTIFIED BY 'password';

username——将要创建的用户名;
host——指定该用户在哪个主机上可以登录,”localhost”指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录,将”localhost”改为”%”,表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录;
password——该用户的登录密码,密码可以为空,若为空则该用户可以不需要密码登录服务器。

例如:

1
CREATE USER 'test_admin'@'localhost' IDENTIFIED BY 'admin@123_S';

授权
以root用户登录到数据库进行授权

1
2
GRANT privileges ON databasename.tablename TO 'username'@'host'
flush privileges;

privileges——用户的操作权限,如SELECT等。如果授予所有权限则使用ALL。
databasename——数据库名称。tablename——表名。如果要给该用户授予对所有数据库和表的相应操作权限则可用表示,例如.*
flush privileges;表示刷新权限

例如:

1
2
GRANT ALL PRIVILEGES ON *.* TO 'test_amin'@'%' IDENTIFIED BY 'admin@123_S' WITH GRANT OPTION;
flush privileges;

撤销用户权限
命令:

1
REVOKE privilege ON databasename.tablename FROM 'username'@'host';

例如:

1
REVOKE SELECT ON *.* FROM 'test_amin'@'%';

删除账户及权限
命令:

1
drop user 'username'@'host';

查看用户的授权
命令:

1
SHOW GRANTS FOR 'username'@'host';
-------------本文结束感谢您的阅读-------------