CentOS7通过tar.gz包安装mysql-5.7.25
1、准备工作
1> Centos7最小化安装是不自带MySQL的(因为收费了),但默认内部集成MariaDB,可以直接yum install -r mariadb-server方式。
2> 卸载自带的MariaDB
- 查看进程:
- 杀死进程:pkill -9 mysqld
- 查看是否已安装MariaDB:rpm -qa|grep mariadb
- 如果存在,强制卸载MariaDB:rpm -e --nodeps [mariadb包或相关模块]
- rpm -qa|grep mariadb检查是否卸载干净
3> 检查是否已安装mysql
rpm -qa|grep -i mysql
2、安装依赖libaio
Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。
1> 查看是否安装libaio
ps -aux|grep libaio
2> 若没有,yum安装即可
yum install -y libaio
yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel
3、准备mysql包
1> 自行下载mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
2> 解压自行下载mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
tar zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz -C /usr/local
3> 修改目录名称(个人习惯,可以不改)
[root@xqk ~]# cd /usr/local/
[root@xqk ~]# mv mysql-5.7.25-linux-glibc2.12-x86_64 mysql
4、新增mysql组,mysql用户(不存在的情况下)
1> 添加mysql组
[root@xqk ~]# groupadd mysql
2> 添加用户
[root@xqk ~]# useradd mysql -g mysql
5、安装mysql
[root@xqk local]# cd /usr/local/mysql/
[root@xqk mysql]# pwd
/usr/local/mysql
1> 修改当前目录为mysql用户拥有
[root@xqk mysql]# chown -R mysql:mysql ./
2> 初始化数据库,注意记录临时密码,后续登录使用,过程中请忽略Warning
[root@xqk mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
3> 创建RSA private key
[root@xqk mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data
4> 修改/usr/local/mysql/data目录拥有者为mysql用户
[root@xqk mysql]# chown -R mysql:mysql data
6、编辑my.cnf文件
tar包解压之后,support-files文件夹中并没有my.cnf文件,直接vim编辑,并添加一下内容:
[root@xqk support-files]# vim /etc/my.cnf
[mysqld]
port=3306
user=mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
server_id=1
#开启binlog日志
log_bin=mysql-bin
binlog_format=ROW
#不区分大小写
lower_case_table_names = 1
#不开启sql严格模式
sql_mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid
7、启动mysql服务
[root@xqk mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@xqk mysql]# vim /etc/init.d/mysqld
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
[root@xqk mysql]# /etc/init.d/mysqld start
Starting MySQL. [ OK ]
8、登录mysql,修改密码
1> 添加软连接
[root@xqk mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin
2> 登录mysql,(密码为前面初始化生成的临时密码)
[root@xqk mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.25 MySQL Community Server (GPL)
....
3> 修改密码
如果需要使用远程登录,则下方步骤中设置密码的语句要使用这条:alter user 'root'@'%' identified by '符合MySQL5.7安全策略的密码';。增加root用户指定可以任意IP登录,如果想限制只能让指定IP登录请把%替换成IP地址
如果不需要,则语句中的%改为lochlhost即可。
MySQL5.7起,遵循其密码安全策略,密码必须包含数字、字母,且不能少于一定位数,如果需要设置简易密码,比如为了自己测试,不想密码设置得那么复杂(设置root的密码为123456 或 111111)。【没有这个需求的,可忽略步骤1)、2)、3)、4)。直接使用alter user 'root'@'localhost' identified by '符合要求的密码';】
1)查看validate_password是否安装及其配置情况:
mysql> SHOW VARIABLES LIKE 'validate_password%';
Empty set (0.00 sec)
2)若是空的,则说明没有安装。需要安装:
mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
Query OK, 0 rows affected (0.00 sec)
3)验证是否安装成功:
mysql> SHOW VARIABLES LIKE 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | OFF |
| validate_password_dictionary_file | |
| 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 |
+--------------------------------------+--------+
7 rows in set (0.00 sec)
4)接着设置参数
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> set global validate_password_length=1;
Query OK, 0 rows affected (0.00 sec)
5)修改用户root登陆mysql的密码为 123456
mysql> alter user root@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
6)授权新用户
mysql> grant all privileges on *.* to 'xqk'@'%' with grant option;
Query OK, 0 rows affected (0.00 sec)
===举例说明====
GRANT ALL PRIVILEGES ON *.* TO 'choi'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
创建一个超级管理员,用户名为choi,密码为1234,只能在localhost登陆;可以给别人授权;
其中:
- ALL PRIVILEGES即代表所有权限;
- *.*:所有数据库对象。普通格式为db.table,比如test.*;
- 'choi'@'localhost':超级管理员,只能在本机访问。
- 用户账户包括user@host;
host:
%:从任意地址访问;
10.250.7.%:只能从指定网段访问;
192.168.1.2:只能从某个IP访问;
- WITH GRANT OPTION:是否允许用户继续授权(注意,这个用户能够授权只能是该用户的权限子集)
- 注意,在授权操作之后,使用flush privileges命令刷新权限;
eg:给普通用户xqk,授予查询和添加权限
GRANT select,insert ON *.* TO 'xqk'@'%';
flush privileges;
7)刷新权限
mysql> flush privileges;
mysql> show grants for current_user();
+---------------------------------------------------------------------+
| Grants for root@localhost |
+---------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION |
| GRANT PROXY ON ''@'' TO 'root'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------+
2 rows in set (0.00 sec)
Question 1:MySQL5.7允许远程用户登录设置时报错
mysql> alter user root@'%' identified by '123456';
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
处理方法:直接创建一个用户,因为新版MySQL用户权限标示是 user 和 host 组成的二元组,上述语句需要确保该二元组存在
mysql> create user 'root'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
Question 2:忘记管理员密码或想重新设置密码
1> vi /etc/my.cnf,在[mysqld]的段中加上一句:skip-grant-tables
2> 重新启动mysqld,/etc/init.d/mysqld restart或用service mysqld restart
3> 进入mysql,选择数据库mysql> use mysql
4> MySQL 5.7的数据库没有了password字段,得用authentication_string字段
mysql> update mysql.user set authentication_string=password('重设的符合条件的密码') where user='root';
5> 刷新权限
mysql> flush privileges;
skip-grant-tables选项会让MySQL服务器跳过验证步骤,允许所有用户以匿名的方式,无需做密码验证直接登陆MySQL服务器,并且拥有所有的操作权限。
6> 修改完记得删除或屏蔽skip-grant-tables