Centos7 安装 MySQL

备注:因CentOS已经使用MariaDB替代了MySQL,如直接输入“yum install mysql-server”则安装MariaDB。

下载Mysql || 如何安装

安装MysQL 使用rmp包


  1. 先切到/tmp目录
1
$  cd /tmp

image

  1. 打开Mysql官网下载地址,在页面中找到对应版本的下载地址(本例中为mysql57-community-release-el7-11.noarch.rpm)

自己玩所以就用的官网最新版本,不太确认是否因为版本问题造成后续的麻烦;建议将对应版本文件名及MD5值记录或者截屏
image

  1. wget下载该rpm包 按回车键确定下载
    1
    $ wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm

注意:mysql57-community-release-el7-11.noarch.rpm为上一步版本文件名。

image

  1. 下载完毕后生成MD5值并确保同官方网站上的MD5值(参考第3步)相同。 注意:建议运行此命令以确保文件无损坏。
1
$ md5sum mysql57-community-release-el7-11.noarch.rpm
  1. 既然我们已经验证文件没有损坏或更改,我们将安装该软件包并按回车键进行安装YUM源RPM安装包。
1
$ sudo mysql57-community-release-el7-11.noarch.rpm

image

  1. 这增加了两个新的MySQL yum存储库,我们现在可以使用它们来安装MySQL服务器:
1
$ sudo yum install mysql-server

注意:因上一步已添加新的YUM存储库,故可直接安装

  1. 输入“y”开始下载并安装MySQL
  2. 由于我们刚刚添加了软件包,因此我们也会提示我们接受其GPG密钥。按下y以下载并完成安装。

image

  1. 提示已经安装完毕。

image


启动MySQL


1
2
3
4
5
6
7
##输入systemctl start mysqld即可启动MySQL服务
[root@jdu4e00u53f7 tmp]#sudo systemctl start mysqld

##systemctl 不显示所有服务管理命令的结果,所以为了确保我们成功,我们将使用以下命令:
##输入systemctl status mysqld即可查看当前MySQL服务状态

[root@jdu4e00u53f7 tmp]#sudo systemctl status mysqld

image

1
2
3
4
5
6

##由于MySQL默认开机自动启动,如需取消开机自动启动则输入
[root@jdu4e00u53f7 tmp]# systemctl enable mysqld

##同样,可设置为开机自动启动MySQL服务
[root@jdu4e00u53f7 tmp]# systemctl enable mysqld

配置MySQL

在安装过程中,会为MySQL root用户生成临时密码 在/var/log/mysqld.log文件中会自动生成一个随机的密码:(第一次获取临时密码,登录后必须更换密码)

1
2
3
4
##查看MySQL root用户临时密码(第一次获取临时密码,登录后必须更换密码) localhost: 后面部分
[root@jdu4e00u53f7 tmp]# grep 'temporary password' /var/log/mysqld.log

2017-09-26T03:29:57.476851Z 1 [Note] A temporary password is generated for root@localhost: fh;g2(lF(SC3
配置MySQL详细

MySQL包含一个安全脚本,用于更改远程root登录和示例用户等一些不太安全的默认选项。

使用此命令运行安全脚本。

1
2
3
4
5
6
$ sudo mysql_secure_installation

Output
The existing password for the user account root has expired. Please set a new password.

New password:

这将提示您输入默认的root密码。输入后,您将需要更改它。

输入一个包含至少一个大写字母,一个小写字母,一个数字和一个特殊字符的新12个字符的密码。出现提示时重新输入。

您将收到有关新密码强度的反馈,然后会立即提示您再次更改密码。既然你做了,你可以自信地说No:

1
2
Estimated strength of the password: 100
Change the password for root ? (Press y|Y for Yes, any other key for No) :

在我们拒绝再次更改密码的提示后,我们将按Y,然后按下ENTER所有后续问题以删除匿名用户,禁止远程root登录,删除测试数据库并访问它,并重新加载权限表。

现在我们已经确保安装,让我们测试一下。

第二种,直接使用默认密码
登录

1
2
3
4
5
6
7
8
[root@jdu4e00u53f7 tmp]# mysql -uroot -p
Enter password:(密码,不显示)

--成功登录后---
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14
Server version: 5.7.19 MySQL Community Server (GPL)
........

用该密码登录到服务端后,必须马上修改密码,不然会报如下错误:

1
2
mysql> select user();
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

修改密码

1
2
3
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'Lin747496'; 
或者
mysql> set password for 'root'@'localhost'=password('Lin74749');
注意:mysql5.7默认安装了密码安全检查插件(validate_password),默认密码检查策略要求密码必须包含:大小写字母、数字和特殊符号,并且长度不能少于8位。否则会提示
1
mysql>  ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

image

修改密码策略

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。

有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。

1
2
3
首先,修改validate_password_policy参数的值
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)

当然,前提是validate_password插件必须已经安装,MySQL5.7是默认安装的。

那么如何验证validate_password插件是否安装呢?可通过查看以下参数,如果没有安装,则输出将为空。

1
2
3
4
5
6
7
8
9
10
11
12
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_dictionary_file | |
| validate_password_length | 6 |
| validate_password_mixed_case_count | 2 |
| validate_password_number_count | 1 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 1 |
+--------------------------------------+-------+
rows in set (0.00 sec)

通过msyql环境变量可以查看密码策略的相关信息:

1
mysql> show variables like '%password%';


MySQL 额外的设置 CSDN资料

添加远程登录用户

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
##默认只需默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户


mysql> GRANT ALL PRIVILEGES ON *.* TO 'Lin'@'%' IDENTIFIED BY 'Lin747496' WITH GRANT OPTION;

##或者更改本地root账号
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Lin747496' WITH GRANT OPTION;

mysql> flush privileges;


##第一句中”%”表示任何主机都可以远程登录到该服务器上访问。如果要限制只有某台机器可以访问,将其换成相应的IP即可,如:
##GRANT ALL PRIVILEGES ON . TO root@”123.456.789.01” IDENTIFIED BY “Lin7474**”;
##第二句表示从mysql数据库的grant表中重新加载权限数据。因为MySQL把权限都放在了cache中,所以在做完更改后需要重新加载

##1.具体生产环境根据自己的配置需要再进行配置。
##2.阿里云云服务器如果MySQL配置了远程访问还是无法访问,可能是阿里云默认是不开放3306端口的。可以去阿里云的控制台修改网络配置

修改字符集编码 UTF-8

查看当前的字符编码

1
mysql>  show variables like 'char%'

检测是否都是utf-8(filesystem除外),如果不是就得改,例如这个character_set_server一般是拉丁编码

修改编码

修改/etc/my.cnf配置文件,在[mysqld]下添加编码配置

1
2
3
4
5
6
7
8
9
10
11
//停数据库
systemctl stop mysqld

//进入 my.cnf 文件,一般是在etc路径下
vim /etc/my.cnf
//加入要修改的字符集 修改完:wq退出
在[mysqld]下追加:
character-set-server=utf8

//重启数据库
systemctl start mysqld


1
2
3
4
5
6
7
8
9
10
11
##启动 MySQL 服务:
service mysqld start

##关闭 MySQL 服务:
service mysqld stop

##重启 MySQL 服务:
service mysqld restart

##查看 MySQL 的状态:
service mysqld status