在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服務器,並且擁有所有的操作權限。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章