在CentOS 7上通过tar.gz包安装MySQL 5.7.26(非yum或rpm)

目录

预热

0、准备工作

-----00 取得一个干净的MySQL安装环境

-----01 安装依赖libaio

-----02 下载、解压MySQL包

-----03 添加mysql组、mysql用户

1、安装 MySQL

2、配置 my.cnf

3、添加开机启动

4、登录MySQL、并修改用户密码

FAQ

环境

  • 宿主机:Windows 10 64bit
  • 虚拟机:VMware pro 12
    • CentOS 7.5 64bit
  • SecureCRT 7.3

预热
Linux(CentOS 7.5)有很多种安装软件(程序)的方式,本文用的是:使用含有软件的源代码的压缩包xxx.tar.gz),解压后手动编译。

yum、rpm安装的区别:

  • 用的rpm安装的每次安装都是Linux盘中最新的那个版本,导致每次版本不统一。没法处理依赖关系。rpm包不是跨平台的,所以得看清楚选择。
  • yum安装是最简单的,自动管理依赖。用python写的

本文既不通过rpm,也不通过yum安装mysql。
参考大佬Linux下rpm、yum区别

通过包名可看出MySQL包的区别:

  • tar.gz包:可以安装指定版本的mysql【源程序 方式】
  • repo包:用yum安装
  • rpm包:rpm安装

参考:源程序、RPM包命名规范

0、准备工作

Centos7最小化安装是不自带MySQL的(因为收费了),但默认内部集成MariaDB,建议不喜欢折腾的同学直接yum install -r mariadb-server方式。

00 取得一个干净的MySQL安装环境

对自带的MariaDB相关操作:查看、卸载、检查

  • 查看进程、杀死进程:ps -f | grep mysqldpkill -9 mysqld
  • 查看是否已安装MariaDB、或一些MariaDB相关的模块:rpm -qa | grep mariadb
  • 强制卸载MariaDB:rpm -e --nodeps [mariadb包或相关模块]
  • 再次检查卸载干净,若已看不到相关mariadb打印了即可:rpm -qa | grep mariadb

检查是否安装过MySQL:

  • rpm -qa | grep -i mysql
  • 若安装过,则卸载:rpm -e 相关软件包名

01 安装依赖libaio

libaio是Linux下的一个异步非阻塞接口,它提供了以异步非阻塞方式来读写文件的方式,读写效率比较高。

先查看是否已经安装libaio:

  • ps aux | grep libaio
  • ps -ef | grep libaio

没有的话,就安装:

  • yum install -y libaio
  • yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel

02 下载、解压MySQL包

当前(20190606)MySQL官网-下载显示的MySQL Community Server----5.7.26—Linux-Generic(glibc 2.12)(x86,64-bit)的tar.gz包,但官网下载太慢。下方通过镜像下载。

1)下载

[root@master bigdata]# pwd
/opt/bigdata
[root@master bigdata]# curl -# -O https://mirrors.tuna.tsinghua.edu.cn/mysql/downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
######################################################################## 100.0%

2)解压

[root@master bigdata]# tar zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
...

3)移动到指定目录,并重命名

[root@master bigdata]# cp -r mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql

03 添加系统mysql组、mysql用户

这是为了方便管理。

添加系统mysql组
[root@master bigdata]# groupadd mysql
添加mysql用户
[root@master bigdata]# useradd -r -g mysql mysql
如有已有就略过此步。

groups 查看当前登录用户的组内成员
groups xxx 查看xxx用户所在的组,以及组内成员
cat /etc/passwd 查看所有的用户信息
删除某用户组和用户,步骤:

  • 重启Linux reboot
  • 重启后,用这种方式登录:su - root 理由参考
  • 删除用户 userdel -r 用户名,同时删除用户home目录
  • 删除用户组 groupdel 用户组名

参考
linux如何查看所有的用户和组信息
linux下查看所有用户及所有用户组

1、安装 MySQL

切到mysql目录

[root@master bigdata]# cd /usr/local/mysql
[root@master mysql]# pwd
/usr/local/mysql

在修改之前,/usr/local/mysql文件夹拥有者是root。修改后,ll查看。虽然拥有者变成了mysql,但还是root在操作

修改当前目录拥有者为mysql用户
[root@master mysql]#chown -R mysql:mysql ./

初始化数据库,注意临时密码。并忽略Warning。

[root@master mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
2019-06-05T15:06:02.946784Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2019-06-05T15:06:03.158200Z 0 [Warning] InnoDB: New log files created, LSN=45790
2019-06-05T15:06:03.187773Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2019-06-05T15:06:03.245728Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 6f8d3cf8-87a3-11e9-a03d-000c29130b71.
2019-06-05T15:06:03.247798Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2019-06-05T15:06:03.249795Z 1 [Note] A temporary password is generated for root@localhost: JZ/op,Qiw2ss
[root@master mysql]# echo $?  # 输出0代表 上一步成功
0

创建RSA private key

[root@master mysql]# bin/mysql_ssl_rsa_setup --datadir=/usr/local/mysql/data

此时,ll data,发现有些文件拥有者不是mysql,而是root。所以:修改/usr/local/mysql/data目录拥有者为mysql用户

[root@master mysql]# ll data
...
[root@master mysql]# chown -R mysql:mysql data

2、配置 my.cnf

MySQL 5.7.26解压后的support-files文件夹下没有my_default.cnf文件,也就没例子来参考,所以新建my.cnf文件。

[root@master mysql]# vi /etc/my.cnf
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
socket=/tmp/mysql.sock
#不区分大小写 
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

3、添加开机启动

[root@master mysql]#  cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
[root@master mysql]#  vi /etc/init.d/mysqld # 添加路径(等号前面已写好了,只需添加后面)
...
...
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
....
[root@master mysql]# service mysqld start
Starting MySQL. SUCCESS!
[root@master mysql]# chkconfig --add mysqld #加入开机起动

这样操作后,就不必每次进去系统后,手动启动MySQL了。

4 登录MySQL、并修改用户密码

添加软连接

[root@master mysql]# ln -s /usr/local/mysql/bin/mysql /usr/bin

进入MySQL

[root@master mysql]# mysql -uroot -p
Enter password: 使用上面初始化时的密码
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.26 MySQL Community Server (GPL)
....

修改MySQL用户密码(在此就是修改root用户的密码):

如果需要使用远程登录,则下方步骤中设置密码的语句要使用这条:alter user 'root'@'%' identified by '符合MySQL5.7安全策略的密码';。增加root用户指定可以任意IP登录,如果想限制只能让指定IP登录请把%替换成IP地址
如果不需要,则语句中的%改为lochlhost即可。

MySQL 5.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)

修改用户root登陆mysql的密码为 111111

mysql> alter user root@'localhost' identified by '111111';
Query OK, 0 rows affected (0.00 sec)

授权新用户

mysql> grant all privileges on *.* to 'root'@'localhost' with grant option; 
Query OK, 0 rows affected (0.00 sec)

刷新权限

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)

FAQ 1:MySQL5.7允许远程用户登录设置时报错

mysql> alter user root@'%' identified by '111111';         
ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'

设置远程登录,报错!!

这是因为:新版MySQL用户权限标示是 user 和 host 组成的二元组,上述语句需要确保该二元组存在,否则会报这个错。
解决:
添加新用户。添加其他用户、密码也是一样的方法

mysql> create user 'root'@'%' identified by '111111'; 
Query OK, 0 rows affected (0.00 sec)

FAQ 2:忘记管理员密码或想重新设置密码,怎么办?

  • vi /etc/my.cnf,在[mysqld]的段中加上一句:skip-grant-tables
  • 重新启动mysqld,/etc/init.d/mysqld restart或用service mysqld restart
  • 进入mysql,选择数据库mysql> use mysql
  • MySQL 5.7的数据库没有了password字段,得用authentication_string字段
mysql> update mysql.user set authentication_string=password('重设的符合条件的密码') where user='root' ;
flush privileges;
  • 刷新权限mysql> flush privileges;

skip-grant-tables选项会让MySQL服务器跳过验证步骤,允许所有用户以匿名的方式,无需做密码验证直接登陆MySQL服务器,并且拥有所有的操作权限。

你可能感兴趣的:(Hadoop大数据)