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.7\bin”
总体运行语句:
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服务,或是直接重启电脑。