MySQL-5.7.19 在阿里云 CentOS-7.0 上的安装

工具准备

查看系统是否安装了yum工具:

[root@wangbo srv]# rpm -qa | grep yum
yum-metadata-parser-1.1.4-10.el7.x86_64
yum-3.4.3-161.el7.centos.noarch
yum-plugin-fastestmirror-1.1.31-50.el7.noarch

表示已经安装了,如果没有安装,可以参考:https://jingyan.baidu.com/article/ce09321bbde1de2bff858f9a.html

rpm和yum命令参考:https://www.cnblogs.com/qingjiaowoxiaoxioashou/p/7059701.html

首先检查下是否安装了服务

[root@wangbo srv]# yum list installed | grep mysql

或者

[root@wangbo srv]# rpm -qa | grep mysql

没有显示就表示没有安装,如果安装了可以删除,如下所示:

下载安装源文件

安装在 /srv/mysql/ 文件夹下。

[root@wangbo srv]# mkdir mysql
[root@wangbo srv]# cd mysql
[root@wangbo mysql]# 

下载并安装MySQL官方的 Yum Repository

[root@wangbo mysql]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

文件是红色的,需要修改文件权限,修改完会看到文件变绿色了。

[root@wangbo mysql]# chmod 755 mysql57-community-release-el7-10.noarch.rpm

开始安装mysql源文件

[root@wangbo mysql]# yum install -y mysql57-community-release-el7-10.noarch.rpm

接下来会显示安装过程,最后显示Complete! 的时候就表示安装好了。

检查mysql源是否安装成功

[root@wangbo mysql]# yum repolist enabled | grep "mysql.*-community.*"

看到上图所示表示安装成功。 

安装mysql数据库

开始安装数据库服务

[root@wangbo mysql]# yum install -y mysql-community-server

接下来会显示安装过程。最后显示Complete! 的时候就表示安装好了。

启动MySQL数据库

[root@wangbo mysql]# systemctl start mysqld

查看数据库状态

[root@wangbo mysql]# systemctl status mysqld

数据库设置

设置开机启动

[root@wangbo mysql]# systemctl enable mysqld

通知systemd重载配置文件,如果是在启动mysql服务之前设置的,则不需要这一步了。

[root@wangbo mysql]# systemctl daemon-reload

修改密码策略

mysql共有以下几种密码策略:

策略检查规则
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

在 /etc/my.cnf 文件添加validate_password_policy配置,指定密码策略

[root@wangbo mysql]# vi /etc/my.cnf

按 i 进入编辑状态

# 选择0(LOW),1(MEDIUM),2(STRONG)其中一种,选择2需要提供密码字典文件
validate_password_policy=0

如果不需要密码策略,添加 my.cnf 文件中添加如下配置禁用即可:

validate_password = off

我们这里选择禁用密码策略,按 ESC,然后 :wq! 保存退出。

重新启动mysql服务使配置生效:

[root@wangbo mysql]# systemctl restart mysqld

修改root用户默认密码

mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改:

[root@wangbo mysql]# grep 'temporary password' /var/log/mysqld.log
2019-03-29T09:43:27.569868Z 1 [Note] A temporary password is generated for root@localhost: h<zuy>K-I6RD

用该密码登录数据库,红框中输入上面查询到的默认密码 h<zuy>K-I6RD

[root@wangbo mysql]# mysql -u root -p

使用SQL修改密码

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'xxxxxxxx';

如果提示下面内容,表示修改成功

Query OK, 0 rows affected (0.00 sec)

如果密码太简单则会报一个错误,这就涉及到密码策略的修改了。所以我们这一步应该放在修改密码策略之后做。

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

查看密码策略,只有修改完密码才能执行SQL,不然会报一个错误。

mysql> show variables like '%password%';

如果没有修改完密码,会报以下错误,提示必须先修改密码。

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

如果修改完密码了,则会显示查询结果。

添加远程登录用户

默认只允许root帐户在本地登录,如果要在其它机器上连接mysql,必须修改root允许远程连接,或者添加一个允许远程连接的帐户,为了安全起见,我添加一个新的帐户:

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

提示添加成功

Query OK, 0 rows affected, 1 warning (0.00 sec)

配置默认编码

这一步一般不需要,默认的就是utf-8。

查看数据库默认编码如下所示:

mysql> show variables like '%character%';

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

[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'

重新启动mysql服务使配置生效:

systemctl restart mysqld

阿里云设置

开启服务器端口

接下来我用Navicate For MySQL 连接数据库,报了10038的连接错误,是远程服务器3306端口未开放。

所以登录阿里云后台管理,找到安全组规则,添加一个安全组规则,

新建数据库

使用Navicate连接上数据库后,新建一个数据库

注意排序规则的选择:

utf8_unicode_ci和utf8_general_ci对中、英文来说没有实质的差别。

utf8_general_ci 校对速度快,但准确度稍差。

utf8_unicode_ci 准确度高,但校对速度稍慢。

如果你的应用有德语、法语或者俄语,请一定使用utf8_unicode_ci。一般用utf8_general_ci就够了。

附:

ci是 case insensitive, 即 "大小写不敏感", a 和 A 会在字符判断中会被当做一样的;

bin 是二进制, a 和 A 会别区别对待。

例如你运行:

SELECT * FROM table WHERE txt = 'a'

那么在utf8_bin中你就找不到 txt = 'A' 的那一行, 而 utf8_general_ci 则可以。

utf8_general_ci 不区分大小写,这个你在注册用户名和邮箱的时候就要使用。

utf8_general_cs 区分大小写,如果用户名和邮箱用这个 就会照成不良后果。

utf8_bin 字符串每个字符串用二进制数据编译存储。 区分大小写,而且可以存二进制的内容。

错误记录

mysql设置sql_mode

安装好后,我用Navicate连接上了数据库,但是每次执行SQL一直报一个错误,执行结果却是正确的。

错误如下:

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

参考博客地址:https://www.cnblogs.com/skymyyang/p/7551646.html

解决办法:

(1)直接通过SQL语句进行设置。

#查看数据库版本和sql_mode
select VERSION(),@@sql_mode;
#将ONLY_FULL_GROUP_BY设置为空
SET sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

这样设置后我发现重新连接后又恢复了,所以还是直接修改配置文件吧。

(2)修改 my.cnf 配置文件

首先查询出数据库的sql_mode

select VERSION(),@@sql_mode;
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

在sql_mode 中去掉only_full_group_by ,将下列内容加入,然后保存配置文件后重启数据库,解决问题!

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

具体操作

在 /etc/my.cnf 文件添加 sql_mode 配置

[root@wangbo mysql]# vi /etc/my.cnf

按 i 进入编辑状态,添加下列内容

sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'

按 ESC,然后 :wq! 保存退出。

重新启动mysql服务使配置生效:

[root@wangbo mysql]# systemctl restart mysqld

使用Navicate连接报1130错误

错误:ERROR 1130: Host '192.168.1.3' is not allowed to connect to thisMySQL serve

错误1130:主机192.168.1.3”不允许连接到thismysql服务

原因:被连接的数据不允许使用 192.168.1.3访问,只允许是用 localhost;

解决办法:

可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改"mysql" 数据库里的 "user" 表里的 "host"项,从"localhost"改称"%"

 1、启用 cmd 

输入 : mysql -u -root -p 

若是提示 ‘mysql’不是内部或外部命令,也不是可运行的程序.那需要配置环境变量  在配置 path 变量添加 “……mysq/MYSQL Server5.7in”

总体运行语句:

mysql -u root -p

mysql>use mysql;

mysql>select 'host' from user where user='root';

mysql>update user set host = '%' where user ='root';

mysql>flush privileges;

mysql>select 'host'   from user where user='root';

运行完毕后再次连接测试,若还不行重启mysql服务,或是直接重启电脑。

原文地址:https://www.cnblogs.com/wbxk/p/8450577.html