centos7中的MySQL安装
一、MySQL5.7.17安装脚本
#! /bin/bash
cd /root
mkdir mysql_tar
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-server-5.7.17-1.el7.x86_64.rpm
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-client-5.7.17-1.el7.x86_64.rpm
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-common-5.7.17-1.el7.x86_64.rpm
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-community-libs-5.7.17-1.el7.x86_64.rpm
# 删除centos7系统自带的数据库
rpm -qa | grep mariadb | xargs rpm -e --nodeps
# 删除已有的MySQL
rpm -qa | grep mysql | xargs rpm -e --nodeps
rpm -ivh mysql-community-common-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.17-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.17-1.el7.x86_64.rpm
# 安装后查询安装的MySQL版本
mysqladmin --version
# 启动数据库
systemctl start mysqld
echo '安装完毕!!!'
注意
- 先检查自己的电脑上有没有这两个依赖;如果没有,在下载后再执行脚本!!
yum install libaio -y
yum install net-tools -y
二、登录安装的MySQL5.7
-
由于MySQL5.7.4之前的版本中默认是没有密码的,登录后直接回车就可以进入数据库,从而在里 面进行设置密码等操作。其后版本对密码等安全相关操作进行了一些改变,在安装过程中,会在安 装日志中生成一个临时密码。
-
获取数据库临时密码:grep ‘temporary password’ /var/log/mysqld.log
-
更改密码:初始化密码只是提供给你登录到内部,而我们进入到内部必须修改密码,否则无法对数据库操作。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';
三、修改密码策略
# 查看密码策略
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF | 是否验证用户名
| validate_password_dictionary_file | | 密码策略文件,策略为STRONG才需要
| validate_password_length | 8 | 密码长度
| validate_password_mixed_case_count | 1 | 大小写字符长度,至少一个
| validate_password_number_count | 1 | 数字至少一个
| validate_password_policy | MEDIUM | 密码策略
| validate_password_special_char_count | 1 | 特殊字符至少一个
+--------------------------------------+--------+
# 修改密码策略
mysql> set global validate_password_policy=0; # 关闭策略
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=4; # 密码长度最短为4位
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_mixed_case_count=0; # 大小写字母数可以为0
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_special_char_count=0; # 特殊字符数可以为0
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_number_count=0; # 数字位数可以为0
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like 'validate_password%';
+--------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| validate_password_length | 4 |
| validate_password_mixed_case_count | 0 |
| validate_password_number_count | 0 |
| validate_password_policy | LOW |
| validate_password_special_char_count | 0 |
+--------------------------------------+-------+
四、创建用户并授权
1、基本创建用户
-
创建本地用户:仅允许本机连接到MySQL服务器
CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码';
-
创建远程用户:指定允许从特定IP地址连接到MySQL服务器
CREATE USER '用户名'@'119.28.68.52' IDENTIFIED BY '密码';
-
创建用户并指定允许访问的IP地址范围
CREATE USER '用户名'@'192.168.1.%' IDENTIFIED BY '密码';
-
创建允许任何主机连接的用户:
CREATE USER '用户名'@'%' IDENTIFIED BY '密码';
2、用户账户权限设置
ALL PRIVILEGES
: 授予用户帐户的所有权限CREATE
: 允许用户帐户创建数据库和表DROP
: 允许用户帐户删除数据库和表DELETE
: 允许用户帐户从特定表中删除行INSERT
: 允许用户帐户将行插入特定表SELECT
: 允许用户帐户读取数据库UPDATE
: 允许用户帐户更新表行
3、授权给用户
- 对特定数据库上的用户帐户授予所有权限:
GRANT ALL PRIVILEGES ON database_name.* TO 'database_user'@'localhost';
- 为所有数据库上的用户帐户授予所有权限:
GRANT ALL PRIVILEGES ON *.* TO 'database_user'@'localhost';
- 通过数据库中的特定表格对用户帐户的所有权限:
GRANT ALL PRIVILEGES ON database_name.table_name TO 'database_user'@'localhost';
- 通过特定数据库为用户帐户授予多个权限:
GRANT SELECT, INSERT, DELETE ON database_name.* TO database_user@'localhost';
4、显示用户权限
-
使用
SHOW GRANTS
语句显示特定用户帐户的权限:SHOW GRANTS FOR '用户名'@'localhost';
-
使用
SHOW GRANTS
语句显示所有用户帐户的权限:SHOW GRANTS
5、撤销用户权限
-
撤销用户在特定数据库上的所有权限:
REVOKE ALL PRIVILEGES ON database_name.* FROM 'database_user'@'localhost';
-
撤销用户在所有数据库上的所有权限:
REVOKE ALL PRIVILEGES ON *.* FROM 'database_user'@'localhost';
6、删除用户
-
删除用户:
DROP USER '用户名'@'localhost';
五、my.cnf配置文件
1. 文件结构和语法
my.cnf
文件使用 INI 文件格式,采用键值对(key=value)的方式来表示配置选项。- 文件中的配置选项通常被分组到不同的节(section)中,每个节以方括号
[]
标识,例如[mysqld]
表示 MySQL 服务器的配置选项。
2. 常见节和配置选项
以下是常见的节和配置选项,可以在 my.cnf
文件中进行设置:
(1)[mysqld]
节
- MySQL 服务器的全局配置选项,影响整个 MySQL 服务器的行为。
常见的配置选项包括:
datadir
:指定 MySQL 数据文件的存储路径。port
:指定 MySQL 服务器监听的端口号。socket
:指定 MySQL 服务器的套接字文件路径。character-set-server
:指定服务器的默认字符集。collation-server
:指定服务器的默认校对规则。
(2)[mysql]
节
- MySQL 客户端的配置选项,影响连接到 MySQL 服务器的客户端行为。
常见的配置选项包括:
default-character-set
:指定客户端的默认字符集。
(3)[client]
节
- MySQL 客户端的配置选项,影响连接到 MySQL 服务器的客户端行为,类似于
[mysql]
节。
(4)[mysqldump]
节
- MySQL 数据库备份工具
mysqldump
的配置选项,影响使用mysqldump
工具备份数据库时的行为。
(5)[mysqladmin]
节
- MySQL 管理工具
mysqladmin
的配置选项,影响使用mysqladmin
工具管理 MySQL 服务器时的行为。
3. 添加注释
- 在
my.cnf
文件中,可以使用#
符号添加注释,注释可以解释配置选项的含义和用法。
六、忘记mysql密码解决方法
只限于MySQL5.7
1、先更改my.cnf的配置文件,并重启mysql
- 在my.cnf文件中的[mysqld] 下加入下面一行,其余不做改变。
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
skip-grant-tables
[root@localhost ~]# systemctl restart mysqld
2、登录MySQL,此时不需要输入密码,直接回车即可
mysql -uroot -p
3、切换到mysql数据库,查询user表的结构,这里有需要的字段。
- 在MySQL5.7版本中mysql数据库下已经没有password这个字段了,password字段改成了 authentication_string字段。
4、修改mysql的root密码并退出mysql
mysql> update user
-> set authentication_string=password('ABCabc123!')
-> where user='root' and host='localhost';
Query OK, 0 rows affected, 1 warning (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 1
mysql> \q
5、再次修改my.cnf配置文件,将第一步添加的语句注释或删除,然后重启 mysql。
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#skip-grant-tables
[root@localhost ~]# systemctl restart mysqld
6、用新密码登录mysql
ffected, 1 warning (0.00 sec)
Rows matched: 0 Changed: 0 Warnings: 1
mysql> \q
### 5、再次修改my.cnf配置文件,将第一步添加的语句注释或删除,然后重启 mysql。
~~~shell
[root@localhost ~]# vim /etc/my.cnf
[mysqld]
#skip-grant-tables
[root@localhost ~]# systemctl restart mysqld