編譯安裝 MySQL 數據庫 5.7.31 教程

核心提示:文章目錄1.環境2.安裝準備3.編譯安裝過程1.環境一臺CentOS7.6.3的機器2.安裝準備下載mysql-5.7.31源碼包1.登陸網站https://dev.mysql.com/downloads/mysql/,如圖:2.選擇Source Code選擇好後以下圖展現:3.上圖顯示的都是8以上版本的,咱們要下載5.7.31版本,因此繼續走下去,點擊紅色方框的內容點擊上圖紅色方框的內容以後,顯示以下圖,這時候就看到5.7.31版本了:4.選擇好mysql版本以後咱們還要選擇

 

文章目錄

  • 1.環境
  • 2.安裝準備
  • 3.編譯安裝過程
  • 4.補充:關於mysql添加用戶,刪除用戶、給用戶受權,設置用戶密碼等

 

1.環境

一臺CentOS7.6.3的機器php

2.安裝準備

下載mysql-5.7.31源碼包
1.登陸網站https://dev.mysql.com/downloads/mysql/,如圖:

2.選擇Source Code

選擇好後以下圖展現:

3.上圖顯示的都是8以上版本的,咱們要下載5.7.31版本,因此繼續走下去,點擊紅色方框的內容

點擊上圖紅色方框的內容以後,顯示以下圖,這時候就看到5.7.31版本了:

4.選擇好mysql版本以後咱們還要選擇與系統匹配的版本,以下圖選擇紅色大箭頭的那一列,咱們的環境的CentOS7:

選擇好以後以下圖,點擊Download便可下載mysql-5.7.31的源碼包:
mysql

下載完以後將mysql-community-5.7.31-1.el7.src.rpm傳到CentOS7.6.3機器上c++

安裝mysql-community-5.7.31-1.el7.src.rpm:
[root@test2 ~]# rpm -ivh mysql-community-5.7.31-1.el7.src.rpm
#安裝完後會在當前用戶的家目錄生成一個目錄rpmbuild
sql

咱們須要的boost源碼包跟mysql-5.7.31源碼包都在在rpmbuild目錄下的SOURCES目錄下
[root@test2 ~/rpmbuild/SOURCES]# ll
total 153656
-rw-r–r-- 1 root root 70389425 Jun 2 19:26 boost_1_59_0.tar.bz2
-rwxr-xr-x 1 root root 160 Jun 2 19:26 filter-provides.sh
-rwxr-xr-x 1 root root 176 Jun 2 19:26 filter-requires.sh
-rw-r–r-- 1 root root 32525559 Jun 2 19:26 mysql-5.6.45.tar.gz
-rw-r–r-- 1 root root 54418341 Jun 2 17:18 mysql-5.7.31.tar.gz
數據庫

3.編譯安裝過程

1.安裝環境依賴包
[root@test2 ~/rpmbuild/SOURCES]# yun -y install ncurses ncurses-devel bison
還須要安裝cmake,cmake看我的是用yum源的cmake,仍是本身找高點的版本編譯安裝
由於搭建LNMP環境,若是使用php版本比極高的話,可能須要libzip,而安裝libzip須要cmake,若是編譯安裝libzip的版本較高的話,yum源自帶的cmake版本比較低可能會引發一些問題
vim

2.建立用戶
[root@test2 ~/rpmbuild/SOURCES]# useradd -s /sbin/nologin mysql
服務器

3.將安裝包解壓縮放在指定的目錄中
[root@test2 ~/rpmbuild/SOURCES]# tar -jxvf boost_1_59_0.tar.bz2 -C /home/ops
app

若是你的機器沒有安裝bzip2,會報如下錯誤:
tar (child): bzip2: Cannot exec: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
解決辦法:
[root@test2 ~/rpmbuild/SOURCES]# yum -y install bzip2
socket

[root@test2 ~/rpmbuild/SOURCES]# tar -zxvf mysql-5.7.31.tar.gz -C /home/opstcp

4.將解壓後的boost更名
[root@test2 ~/rpmbuild/SOURCES]# mv boost_1_59_0/ boost

5.安裝軟件依賴包
[root@test2 ~/rpmbuild/SOURCES]# yum -y install gcc gcc-c++

6.編譯安裝msyql
cd /home/ops/mysql-5.7.31/
[root@test2 /home/ops/mysql-5.7.31]# cmake 
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql 
-DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock 
-DSYSCONFDIR=/etc 
-DSYSTEMD_PID_DIR=/home/ops/mysql 
-DMYSQL_TCP_PORT=3306 
-DDEFAULT_CHARSET=utf8 
-DDEFAULT_COLLATION=utf8_general_ci 
-DENABLED_LOCAL_INFILE=1 
-DWITH_EXTRA_CHARSETS=1 
-DEXTRA_CHARSETS=all 
-DWITH_INNOBASE_STORAGE_ENGINE=1 
-DWITH_ARCHIVE_STORAGE_ENGINE=1 
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 
-DWITH_MYISAM_STORAGE_ENGINE=1 
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 
-DMYSQL_DATADIR=/home/ops/mysql/data 
-DWITH_BOOST=/home/ops/boost 
-DWITH_SYSTEMD=1

爲了方便複製因此加了這段

cmake -DCMAKE_INSTALL_PREFIX=/home/ops/mysql -DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock -DSYSCONFDIR=/etc -DSYSTEMD_PID_DIR=/home/ops/mysql -DMYSQL_TCP_PORT=3306 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLED_LOCAL_INFILE=1 -DWITH_EXTRA_CHARSETS=1 -DEXTRA_CHARSETS=all -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 -DMYSQL_DATADIR=/home/ops/mysql/data -DWITH_BOOST=/home/ops/boost -DWITH_SYSTEMD=1
-DCMAKE_INSTALL_PREFIX=/home/ops/mysql #指定安裝路徑 -DMYSQL_UNIX_ADDR=/home/ops/mysql/mysql.sock #mysql.sock文件生成路徑,發起本地鏈接時使用  -DSYSCONFDIR=/etc #配置文件路徑 -DSYSTEMD_PID_DIR=/home/ops/mysql #PID文件指定路徑  -DMYSQL_TCP_PORT=3306 #msyql監聽端口 -DDEFAULT_CHARSET=utf8 #指定默認字符集 -DDEFAULT_COLLATION=utf8_general_ci #校驗字符,指定默認編碼 -DENABLED_LOCAL_INFILE=1 #容許從本地導入數據 -DWITH_EXTRA_CHARSETS=1 #支持額外的字符集 -DEXTRA_CHARSETS=all #安裝全部擴展字符集 -DWITH_INNOBASE_STORAGE_ENGINE=1 #安裝innodb存儲引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 #安裝archive 存儲引擎  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 #安裝blackhole存儲引擎 -DWITH_MYISAM_STORAGE_ENGINE=1 #安裝myisam存儲引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 #安裝FEDERATED存儲引擎 -DMYSQL_DATADIR=/home/ops/mysql/data #指定數據存放路徑 -DWITH_BOOST=/home/ops/boost #boost庫主要是在對mysql的數據備份時用到 -DWITH_SYSTEMD=1 #這是MySQL 5.7原生支持Systemd的選項,若是要是用systemctl啓動,就必須開啓

報錯1:
CMake Error at cmake/boost.cmake:88 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boost.cmake:174 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:548 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeOutput.log".
See also "/home/wuyoupin/data/server/mysql-5.7.31/CMakeFiles/CMakeError.log".
緣由:
-DWITH_BOOST=/home/hahaha/data/server/boost 這裏的boost庫路徑指定不對
解決辦法:
1.修正-DWITH_BOOST=boost庫的路徑,在第4步那裏,boost_1_59_0目錄被移動到哪裏,就填哪裏的絕對路徑
2.從新cmake

報錯2:
CMake Error at cmake/readline.cmake:71 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and >derivates it is ncurses-devel.
Call Stack (most recent call first):
cmake/readline.cmake:102 (FIND_CURSES)
cmake/readline.cmake:195 (MYSQL_USE_BUNDLED_EDITLINE)
CMakeLists.txt:582 (MYSQL_CHECK_EDITLINE)
– Configuring incomplete, errors occurred!
See also 「/home/ops/mysql-5.7.31/CMakeFiles/CMakeOutput.log」.
See also 「/home/ops/mysql-5.7.31/CMakeFiles/CMakeError.log」.
緣由:
缺乏ncurses-devel支持包
解決:
yum -y install ncurses-devel

注意:若是在CMAKE的過程當中有報錯,當報錯解決後,須要把源碼目錄中的CMakeCache.txt文件刪除,而後再從新Cmake

7.編譯安裝
[root@test2 /home/ops/mysql-5.7.31]# make && make install #編譯過程有點久,耐心等待咯

8.建立mysql數據文件存放目錄,修改mysql工做目錄的全部者跟所屬組
[root@test2 /home/ops/mysql-5.7.31]# cd …/mysql
[root@test2 /home/ops/mysql]# mkdir data
[root@test2 /home/ops/mysql]# cd …
[root@test2 /home/ops]# chown -R mysql:mysql mysql

9.將配置聲明到環境變量中
[root@test2 /home/ops]# vim /etc/profile
以下圖:在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL前面添加export PATH=$PATH:/home/ops/mysql/bin

注意:

/home/ops/mysql/bin這個路徑視狀況而定,另外export PATH=$PATH:/home/ops/mysql/bin添加的位置也不是固定的,能夠添加到文件的其餘地方,儘可能添加到export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL的上面

[root@test2 /home/ops]# source /etc/profile

10.調整配置文件
[root@test2 /home/ops]# vim /etc/my.cnf

[client] port=3306 socket=/home/ops/mysql/mysql.sock [mysqld] basedir=/home/ops/mysql datadir=/home/ops/mysql/data socket=/home/ops/mysql/mysql.sock #Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #Settings user and group are ignored when systemd is used. #If you need to run mysqld under a different user or group, #customize your systemd unit file for mariadb according to the #instructions in http://fedoraproject.org/wiki/Systemd #skip-grant-tables [mysqld_safe] log-error=/home/ops/mysql/mysql-error.log pid-file=/home/ops/mysql/mysql.pid #include all files from the config directory !includedir /etc/my.cnf.d

注意:若是編譯安裝mysql以後沒有在/etc/目錄下生成配置文件,直接新建一個,按本身需求添加配置就行了

11.初始化數據庫
[root@test2 /home/ops]# cd mysql
[root@test2 /home/ops/mysql]# bin/mysqld 
–initialize 
–user=mysql 
–basedir=/home/ops/mysql 
–datadir=/home/ops/mysql/data/

下面一段是爲了方便複製,就是初始化的命令

bin/mysqld --initialize --user=mysql --basedir=/home/ops/mysql --datadir=/home/ops/mysql/data/

初始化數據庫輸出信息:

2020-08-26T06:49:25.448942Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2020-08-26T06:49:26.475806Z 0 [Warning] InnoDB: New log files created, LSN=45790 2020-08-26T06:49:26.672309Z 0 [Warning] InnoDB: Creating foreign key constraint system tables. 2020-08-26T06:49:26.736700Z 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: 4882c7d8-e768-11ea-b1ec-00163e0d400a. 2020-08-26T06:49:26.738847Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened. 2020-08-26T06:49:27.043038Z 0 [Warning] CA certificate ca.pem is self signed. 2020-08-26T06:49:27.148709Z 1 [Note] A temporary password is generated for root@localhost: )dZfe<.n&5_r

#本次初始化隨機密碼爲:)dZfe<.n&5_r,在輸出信息的最後一行找

12.將service服務啓動腳本放到systemd目錄下執行

[root@test2 /home/ops/mysql]# cp /home/ops/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/

13.從新加載、啓動服務、查看端口狀態

[root@test2 /home/ops/mysql]# systemctl daemon-reload [root@test2 /home/ops/mysql]# systemctl start mysqld [root@test2 /home/ops/mysql]# netstat -ntap | grep 3306 tcp6 0 0 :::3306 :::* LISTEN 3103/mysqld

能夠看到3306端口已經起來了,說明mysqld服務已經起來了
systemctl daemon-reload: 從新加載某個服務的配置文件,若是新安裝了一個服務,歸屬於 systemctl 管理,要是新服務的服務程序配置文件生效,需從新加載。

14.鏈接數據庫
[root@test2 /home/ops/mysql]# mysql -uroot -p’)dZfe<.n&5_r’

看到上面的頁面說明mysql5.7.31編譯安裝成功了!

15.修改當前用戶(root)密碼

mysql> set password=password("123456"); Query OK, 0 rows affected, 1 warning (0.00 sec)

16.測試新密碼
[root@test2 /home/ops/mysql]# mysql -uroot -p’123456’

17.受權遠程登陸,而且設定root用戶的權限

mysql> CREATE USER 'root'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected (0.00 sec) mysql> GRANT ALL ON *.* TO 'root'@'%'; Query OK, 0 rows affected (0.00 sec)

18.隨便建立一個庫,方便另外一臺機器遠程測試
mysql> create database test;

#建立test庫成功

19.遠程登陸測試,從另外一臺機器鏈接數據庫
[root@test1 ]# mysql -uroot -h數據庫所在的主機ip -p’123456’

測試成功!

4.補充:關於mysql添加用戶,刪除用戶、給用戶受權,設置用戶密碼等

1.建立用戶
mysql> CREATE USER ‘username’@‘host’ IDENTIFIED BY ‘password’;

username 將要建立的用戶名
host 指定該用戶在哪一個主機上能夠登陸,若是是本地用戶則可使用localhost,若是想要該用戶能夠從任意主機遠程登陸數據庫服務器,則可使用通配符%
password 將要建立的用戶的密碼,密碼能夠設置爲空,若是爲空則該用戶不須要密碼登陸數據庫服務器

實例:

CREATE USER 'test'@'localhost' IDENTIFIED BY '123456'; CREATE USER 'test1'@'192.168.0.0/255.255.0.0' IDENDIFIED BY '123456'; CREATE USER 'test3'@'%' IDENTIFIED BY '123456'; CREATE USER 'teest4'@'%' IDENTIFIED BY ''; CREATE USER 'test5'@'%';

2.受權

mysql> GRANT authority ON databasename.tablename TO ‘username’@‘host’;

authority 用戶操做權限,如SELECt , INSERT , UPDATE 等,若是要授予用戶全部的權限,則使用ALL表示
databasename 數據庫名
tablename 表名
若是要授予用戶對全部的數據庫,全部的表都有相應的權限則能夠用*表示。如*.*

實例:

GRANT SELECT, INSERT ON test.table1 TO 'test'@'%'; GRANT ALL ON *.* TO 'test1'@'%';

注意:用以上命令受權的用戶不能給其餘用戶受權,若是想要讓該用戶也能夠給其餘用戶受權,則用如下命令

GRANT authority ON databasename.tablename TO 'username'@'host' WITH GRANT OPTION;

3.設置與更改用戶密碼

SET PASSWORD FOR 'username'@'host' = PASSWORD('newpassword');

若是是當前用戶,則能夠

SET PASSWORD = PASSWORD("newpassword");

4.撤銷用戶權限

REVOKE authority ON databasename.tablename FROM 'username'@'host';

假如你在給用戶’test’@’%’受權的時候使用的是:GRANT SELECt ON test.user TO 'test'@'%';這種方式, 則在使用 REVOKE SELECT ON *.* FROM 'test'@'%';命令並不能撤銷該用戶對test數據庫中user表的SELECt權限
相反的,若是受權使用的是GRANT SELECT ON *.* TO 'test'@'%';,則 REVOKE SELECT ON test.user FROM 'test'@'%';命令也不能撤銷該用戶對test數據庫中user表的 Select 權限

5.查看用戶權限

SHOW GRANTS FOR 'test'@'%';

6.刪除用戶

DROP USER 'username'@'host';

7.每一次操做後都要記得刷新數據庫

flush privileges;
相關文章
相關標籤/搜索