目录
- mysql安装与基本配置(centos 7.3)
- 修改 MySQL默认字符集和引擎
- MySQL创建用户与授权
一,MySQL安装与基本配置(centos 7.3)
安装参考网址:https://www.cnblogs.com/jorzy/p/8455519.html
-
1. 查看系统中是否已安装 MySQL 服务:以下提供两种方式
rpm -qa | grep mysql
yum list installed | grep mysql
-
2、如果已安装则删除 MySQL 及其依赖的包
yum -y remove mysql-libs.x86_64
-
3、下载 mysql57-community-release-el7-8.noarch.rpm 的 YUM 源
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
-
4、安装 mysql57-community-release-el7-8.noarch.rpm
pm -ivh mysql57-community-release-el7-8.noarch.rpm
安装完后,得到如下两个包:
mysql-community.repo
mysql-community-source.repo
-
5、安装 MySQL,出现提示的话,一路 Y 到底
yum install mysql-server
-
6、安装mysql所需的库和包含文件
yum -y install mysql-devel
-
7、获取mysql初始密码
service mysqld start
grep "password" /var/log/mysqld.log
-
8、mysql管理常用命令
systemctl status mysqld
systemctl start mysqld
systemctl stop mysqld
-
9、开机启动
systemctl enable mysqld
systemctl daemon-reload
-
10、Mysql安装成功后,默认的root用户密码为空,可以直接登录
mysql -uroot -p
mysqladmin -u root password "1" # 给root用户配置密码:1
mysql -uroot -p1 # 配置完密码后必须使用密码登录
二, 修改MySQL默认字符集和引擎
1. 安装完MySQL使用外键关联创建表失败,原因是默认引擎不对
2. 向MySQL插入中文发现显示乱码,原因是默认字符集不对
show variables like \'character%\'; #查看MySQL默认字符集
3. 解决方法是修改MySQL配置文件 vim /etc/my.cnf
vim /etc/my.cnf #下面的内容都是自己添加的内容
[mysqld]
default-storage-engine=INNODB
default_character_set=utf8
character_set_server=utf8
[mysqld_safe]
default-character-set = utf8
[client]
default-character-set = utf8
[mysql.server]
default-character-set = utf8
[mysql]
default-character-set = utf8
vim /etc/my.cnf
4. 面试题:你的数据库用什么存储引擎?区别是
1. 常见的有MyISAM和InnoDB。
2. InnoDB: 支持外键约束,支持事务。对索引都是单独处理的,无需引用索引。
3. MyISAM: 不支持外键约束,不支持事务,对数据大批量导入时,它会边插入数据边建索引。
所以为了提高执行效率,应该先禁用索引,在完全导入后再开启索引
三, MySQL创建用户与授权
1、创建用户
1. 命令 : CREATE USER \'username\'@\'host\' IDENTIFIED BY \'password\';
1、username: 你将创建的用户名
2、host: 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
3、password: 该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
2、例子
1、CREATE USER \'tom\'@\'localhost\' IDENTIFIED BY \'123456\'; #允许tom从localhost登录
2、CREATE USER \'jack\'@\'1.1.1.100\' IDENTIFIED BY \'123456\'; #允许jack从1.1.1.100主机登录
3、CREATE USER \'fly\'@\'%\' IDENTIFIED BY \'123456\'; #允许fly从任意主机登录
4、mysql -h 1.1.1.3 -P 3306 -u jack -p123456 # jack从1.1.1.100登录MySQL
5、update mysql.user set authentication_string=PASSWORD(\'Chnsys@2016\') where user=\'opwf\'; # 修改用户密码
2、授权
1. 命令 : GRANT privileges ON databasename.tablename TO \'username\'@\'host\'
1、privileges: 用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
2、databasename: 数据库名
3、tablename: 表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*
2.例子
1、GRANT SELECT, INSERT ON testdb.student TO \'tom\'@\'%\'; # 授权tom对testdb数据库有查询和插入权限
2、GRANT ALL ON *.* TO \'jack\'@\'%\'; # 授权jack对所有数据库、所有表所有权限
3、查看权限
1、show grants for \'tom\'@\'localhost\'; # 查看用户tom在主机1.1.1.100上的权限
2、show grants for root; # 查看root用户所有权限
4、撤销权限
1、REVOKE all ON *.* FROM \'tom\'@\'%\'; # 撤销tom对所有数据库、所有表、的所有权限
mysql创建与授权常用操作
# 1、创建用户
create user \'mup\'@\'%\' identified by \'mup_yiducloud\';
# 2、授予mup用户授予对mup数据库的操作权限
GRANT ALL ON mup.* TO \'mup\'@\'%\';
flush privileges;
select host,user from mysql.user;
# 3、删除用户
Delete FROM mysql.user Where User=\'mup\' and Host=”localhost”;
Delete FROM mysql.user Where User=\'mup\';
# 4、修改root密码
update mysql.user set authentication_string=password(\'mysqlRootPwd\') where user=\'root\' and Host = \'localhost\';
四,mysql常见报错
*1、ERROR 1819 (HY000): Your password does not satisfy the current policy requirements *
# mysql -u root -p #登录
# mysql>set global validate_password_policy=0; #密码强度设为最低等级
# mysql>set global validate_password_length=4; #密码允许最小长度为4
# mysql>flush privileges; #更新授权表,生效
2、ERROR 1044 (42000): Access denied for user \'root\'@\'localhost\' to database \'bsp\'
参考地址:https://blog.csdn.net/slovyz/article/details/52182283
-
- 报错原因
1. 其实应该可以说基本上都是因为my.cnf 文件里面有skip-name-resolve参数这个参数导致这不能解析hostname或其它方式的登录;
2. 所以登录任何用户,匹配的时候不走root@\'localhost\',或者127.0.0.1或者::1而是 一个劲的走root@\'%\';
- 2、解决方法
#1、查看一下每种方式下的root用户是否有grant权限
mysql> select Grant_priv from user where Host=\'127.0.0.1\';
+------------+
| Grant_priv |
+------------+
| N |
+------------+
row in set (0.00 sec)
mysql> select Grant_priv from user where Host=\'localhost\';
+------------+
| Grant_priv |
+------------+
| N |
+------------+
row in set (0.01 sec)
#2、在不重启MySQL服务的情况下,只需要在登录的时候加上-h参数
(a). /usr/local/mysql/bin/mysql -uroot -p123456 -h localhost
(b). /usr/local/mysql/bin/mysql -uroot -p123456 -h127.0.0.1
#3、更改用户权限让其拥有grant权限
mysql> update user set Grant_priv=\'Y\' where Host=\'127.0.0.1\';
mysql> update user set Grant_priv=\'Y\' where Host=\'localhost\';
mysql> flush privileges;
#4、退出重新用root登录,然后再操作
*3、ERROR 1045 (28000): Access denied for user \'opwf\'@\'localhost\' (using password: YES) *
参考地址:https://www.cnblogs.com/bk7788/p/6388562.html
-
- 报错原因
1. 大意就是你有一个用户名为空的账户,mysql会先匹配它,然后就一直提示你密码错误,删掉这个匿名用户,然后执行 FLUSH PRIVILEGES;
DELETE FROM mysql.user WHERE user=\'\';
FLUSH PRIVILEGES