CentOS中默认安装有MariaDB,在安装MySQL时会覆盖MariaDB。 这里采用Yum管理好了各种rpm包的依赖,能够从指定的服务器自动下载RPM包并且安装,所以在安装完成后必须要卸掉,否则会自动更新。
注释:原来安装的话,先卸载,再安装:如下命令:
一,rpm -qa|grep mysql
二,yum remove MySQL-client-5.6.17-1.el6.i686
所有的操作都是切换到root用户下进行
1、安装MySQL官方的Yum Repository
[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
2:、下载rpm包
[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
3、安装MySQL服务
[root@localhost ~]# yum -y install mysql-community-server
执行安装服务的时间比较长,耐心等待,中间有一次询问y/n?输入y回车
4、启动mysql服务:
[root@localhost ~]# systemctl start mysqld.service
5、其他命令:
重启:systemctl restart mysqld.service
停止:systemctl stop mysqld.service
查看状态:systemctl status mysqld.service
最后两行出现:代表启动成功。
Starting MySQL Server...
Started MySQL Server.
1、登录用户:
[root@localhost ~]# mysql -u root -p
首次登录需要输入生成的初始密码,登陆后必须要修改这个密码。
初始密码默认是/var/log/mysqld.log,找到下面这行,临时密码是:h.zdWmt/l0M3。
2018-08-22T07:06:29.387527Z 1 [Note] A temporary password is generated for root@localhost: h.zdWmt/l0M3
注意:只有启动过一次mysql才可以查看临时密码。
2、重新设置密码:
重新设置密码之前,需要根据自己需求设置密码的复杂度和长度时,要登录数据库后设置如下参数。
validate_password_policy代表密码策略,默认是1:符合长度,且必须含有数字,小写或大写字母,特殊字符。设置为0判断密码的标准就基于密码的长度了。一定要先修改两个参数再修改密码
mysql> set global validate_password_policy=0;
validate_password_length代表密码长度,最小值为4
mysql> set global validate_password_length=4;
通过命令查看设置参数的情况:
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 |
+--------------------------------------+-------+
6 rows in set (0.00 sec)
注意:以上两行设置都是临时设置,重启数据库后需要重新设置,再创建新密码。
设置新密码:
修改密码为root,之后就可以使用该密码登录了
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'mima'; //代码用户为root的密码是mima.
3、退出数据库:
exit
注意:
1、使用grant all privileges on来更改用户对应某些库的远程权限
语法模板:
grant all privileges on 库名.表名 to '用户名'@'IP地址' identified by '密码' with grant option;
具体含义:
库名:要远程访问的数据库名称,所有的数据库使用“*”
表名:要远程访问的数据库下的表的名称,所有的表使用“*”
用户名:要赋给远程访问权限的用户名称
IP地址:可以远程访问的电脑的IP地址,所有的地址使用“%”
密码:要赋给远程访问权限的用户对应使用的密码
实例:
以下语句代表:所有的地址都可以使用root用户,密码为lxh远程访问所有的数据库(远程软件登录时一定要设置下面这句)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'lxh' WITH GRANT OPTION;
以下语句代表: IP为172.16.52.225的电脑可以使用lxh用户,密码为lxh远程访问数据库testdb的所有表
GRANT ALL PRIVILEGES ON testdb.* TO 'lxh'@'172.16.52.225' IDENTIFIED BY 'lxh' WITH GRANT OPTION;
注意:
需要注意mysql的配置文件中的bindaddress 的参数和skip-networking 配置
bindaddress : 设定哪些ip地址被配置,使得mysql服务器只回应哪些ip地址的请求),最好注释掉该参数或设置成为127.0.0.1以外的值
skip-networking : 如果设置了该参数项,将导致所有TCP/IP端口没有被监听,也就是说出了本机,其他客户端都无法用网络连接到本mysql服务器,所以应该注释掉该参数
2、设置参数
设置数据库编码方式:
打开: /etc/my.cnf,滚动到文件底部复制并粘贴
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
注意:
采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci
在运行sql语句时,出现以下问题:
[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
原因:
MySQL 5.7.5及以上功能依赖检测功能。如果启用了ONLY_FULL_GROUP_BY SQL模式(默认情况下),MySQL将拒绝选择列表,HAVING条件或ORDER BY列表的查询引用在GROUP BY子句中既未命名的非集合列,也不在功能上依赖于它们。(5.7.5之前,MySQL没有检测到功能依赖关系,默认情况下不启用ONLY_FULL_GROUP_BY。有关5.7.5之前的行为的说明,请参见“MySQL 5.6参考手册”)。
解决办法:
打开: /etc/my.cnf
滚动到文件底部复制并粘贴
[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
到文件的底部
保存并退出输入模式
systemctl restart mysqld.service
重启MySQL。
以下对数据库的操作完全可以利用管理软件完成,比如在Navicat上进行操作,对数据库进行用户和权限管理。
1、创建用户:以root用户登录到数据库进行用户创建
命令:
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
例如:
CREATE USER 'test_admin'@'localhost' IDENTIFIED BY 'admin@123_S';
CREATE USER 'test_admin2'@'%' IDENTIFIED BY '';
note:
username——将要创建的用户名;
host——指定该用户在哪个主机上可以登录,"localhost"指该用户只能在本地登录,不能在另外一台机器上远程登录,如果想远程登录,将"localhost"改为"%",表示在任何一台电脑上都可以登录;也可以指定某台机器可以远程登录;
password——该用户的登录密码,密码可以为空,若为空则该用户可以不需要密码登录服务器。
2、授权:以root用户登录到数据库进行授权
命令:
GRANT privileges ON databasename.tablename TO 'username'@'host'
note:
privileges——用户的操作权限,如SELECT等。如果授予所有权限则使用ALL。
databasename——数据库名称。tablename——表名。如果要给该用户授予对所有数据库和表的相应操作权限则可用*表示,例如*.*
例如:
GRANT SELECT ON test_db.* TO 'test_admin2'@'%';
flush privileges;
note:必须执行flush privileges;
3、撤销用户权限
命令:
REVOKE privilege ON databasename.tablename FROM 'username'@'host';
例如:
REVOKE SELECT ON test_db.* FROM 'test_min'@'%';
4、删除账户及权限:
命令:
drop user 'username'@'host';
5、查看用户的授权
命令:
SHOW GRANTS FOR 'username'@'host'
例如:
mysql> SHOW GRANTS FOR 'test_admin'@'%' ;
+----------------------------------------------------------------+
| Grants for test_admin@% |
+----------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'test_admin'@'%' |
| GRANT ALL PRIVILEGES ON `test_manage_db`.* TO 'test_admin'@'%' |
+----------------------------------------------------------------+
2 rows in set (0.00 sec)
mysql>