1. 程式人生 > >CentOS7下安裝MySQL8.0.13資料庫教程(詳細圖解演示)

CentOS7下安裝MySQL8.0.13資料庫教程(詳細圖解演示)

一:背景介紹.

      1.1 專案部署Linux上面,需要安裝MySQL資料庫.之前也在本地安裝過,現在在雲伺服器上再安裝一下,方便下次檢視.安裝的方式有三種:

           ①:手動下載rpm依賴安裝.

           ②:使用Linux的寶塔面板安裝.

           ③:拉取Docker映象安裝.

      後面兩種安裝比較簡單,這裡說一下第一種手動安裝的,這裡面有一些小坑,報各種各樣的錯誤,安裝以前注意一下即可.

     1.2 本教程一共包含以下三個部分:

           ①:MySQL8.0的安裝.

           ②:MySQL8.0的遠端登入設定.

           ③:JDBC連線MySQL8.0.

           ④:MySQL8.0的完全解除安裝.

      1.3 使用的是CentOS7伺服器環境,自己用的一臺華為雲伺服器.

二:安裝過程.

      2.1 MySQL官網地址.連結

      2.2 MySQL官網下載連結.下載連結

可以看到是.tar壓縮包的形式.MySQL5.7.24版本的.

rpm包.

2.3.安裝前,首先檢查一下本地是否有安裝過,避免衝突.

rpm -qa | grep mysql.(沒有輸出就是沒有安裝過).如果預設安裝了,使用yum remove mysql(模糊匹配即可).

2.4 安裝依賴.

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

2.5 準備工作做完,下載MySQL.

滑鼠右鍵,選擇複製連結地址即可.tar.xz格式的下載包更小一些.5.7.24的tar.gz的要600多M的..xz是一種壓縮檔案格式.壓縮效率非常高.

XZ是一種壓縮檔案格式,採用LZMA SDK壓縮,壓縮率大,產生的目標檔案較gzip壓縮檔案 ( .gz 或 .tgz )小30%,較 .bz2 小15%.

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz

(wget後面去掉那個/usr/local/src).

2.6 解壓壓縮包.

      tar.xz格式的分兩步解壓.

     ①:xz -d  mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz.(那個tar.xz的壓縮檔案不見了,-k引數可以保留這個壓縮檔案).

  

2.7 新增系統MySQL系統使用者組和mysql使用者.

   ①:系統MySQL組:groupadd mysql

   ②:新增mysql使用者:useradd -r -g mysql mysql

2.8 安裝MySQL.

   解壓:  tar xvf mysql-8.0.13-linux-glibc2.12-x86_64.tar(已經不是.gz格式的了,就不用加z引數了).

複製到指定目錄

cp -r mysql-8.0.13-linux-glibc2.12-x86_64 /usr/local/mysql

修改當前目錄擁有者為mysql使用者 chown -R mysql:mysql ./

 chown -R mysql:mysql ./(-R:指定目錄下以及子目錄下的所有檔案).

 chown [選項] [所有者]:[組] 檔案.

安裝mysql:(--lower-case-table-names=1:表名以小寫形式儲存在磁碟上,名稱比較不區分大小寫,0是區分大小寫的,生產環境設定為1)

預設是0,即時在配置檔案裡面指定為1,但是啟動資料庫服務的時候設定不一致,會報錯.

報錯資訊如下:

Different lower_case_table_names settings for server ('1') and data dictionary ('0')

bin/mysqld --initialize --user=mysql --lower-case-table-names=1 --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

修改當前data目錄擁有者為mysql使用者 chown -R mysql:mysql data

2.9 配置MySQL.

vim /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
#不區分大小寫 (sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 這個簡單來說就是sql語句是否嚴格)
lower_case_table_names = 1
log-error=/var/log/mysqld.log
pid-file=/usr/local/mysql/data/mysqld.pid

新增開機啟動     cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld

修改   vim /etc/init.d/mysqld   

修改46和47行.新增內容如下圖.

對於vim無法顯示行號的.這裡說一下.有系統全域性配置和個人配置兩種方式.

vim /etc/vimrc(系統範圍內的初始化配置).追加set number.我這裡是之前配置過了,檢視一下.

2.10 啟動MySQL.

       service mysqld start

加入開機啟動:

     chkconfig --add mysqld

登入MySQL服務.發現無法識別mysql命令.

新增軟連線.

       ln -s /usr/local/mysql/bin/mysql /usr/bin

先重新啟動MySQL服務.

        service mysqld restart

使用臨時密碼登入MySQL.臨時密碼在前面的安裝過程中有提到過.

如果不修改預設的密碼,直接使用會報錯.

修改新密碼.然後重新整理許可權.

版本資訊:

狀態資訊:

當前所有的資料庫:

2.11 設定允許遠端登入. MySQL預設不容許遠端登入的.mysql資料庫下.自帶一張使用者表.user.

      Navicat下測試一下不容許的.修改為%可以使任意IP訪問的.

      skip-grant-tables(MySQL跳過密碼驗證).可直接登入的,在/etc/my.cnf中新增重新啟動MySQL服務即可.

    

    MySQL8.0需要先建立使用者,然後才能授權.否則報錯:

   

    更新host的預設配置:

MySQL8之前的版本加密規則:mysql_native_password.mysql8之後,加密規則是caching_sha2_password.例如Navicat客戶端工具只支援舊的版本.

① 修改加密規則:

② 更新一下使用者root的密碼:

③ 重新整理許可權:(更新一下使用者密碼,和新增使用者,都必須重新整理一下系統許可權相關的表).

Navicat下再次測試連線一下.

新建一個測試資料庫.

Linux服務端檢視一下結果.

三:JDBC連線MySQL8.0.13.

       3.1 首先是準備驅動.這裡使用MySQL8.0.13對應的驅動.使用Maven先下載下來.

     3.2 工程搭建.我之前在IDEA中下載下來了MySQL8.0.13的驅動,在Maven的本地倉庫裡面,直接複製到本地的Java工程即可.

一個平凡本分的Java專案,使用了DBCP的資料庫連線池.

       jdbc.properties的配置檔案如下:

  

     JdbcUtil原始碼如下:

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import org.apache.commons.dbcp.BasicDataSource;
/**
 * title: JdbcUtil  
 * @author: 
 * date: 
 * description:基於連線池封裝JDBC
 */
public class JdbcUtil {
	// 宣告資料庫連線池變數
	private  static  String  driverClass=null;
    private  static  String  url=null;
    private  static  String  user=null;
    private  static  String  password=null;
    private  static  int  initSize;
    private  static  int  maxActive;
    private  static  int  maxWait;
	private static  BasicDataSource source=new BasicDataSource();
    // 讀取配置檔案
	static{
		try {
		Properties properties=new Properties();
		InputStream inputStream=JdbcUtil.class.getClassLoader().getResourceAsStream("jdbc.properties");
        properties.load(inputStream);
		driverClass=properties.getProperty("jdbc.driverClass");
		url=properties.getProperty("jdbc.url");
		user=properties.getProperty("jdbc.user");
		password=properties.getProperty("jdbc.password");
		initSize=Integer.parseInt(properties.getProperty("jdbc.initSize"));
		maxActive=Integer.parseInt(properties.getProperty("jdbc.maxActive"));
		maxWait=Integer.parseInt(properties.getProperty("jdbc.maxWait"));
        // 建立資料來源
		source.setDriverClassName(driverClass);
		source.setUrl(url);
		source.setUsername(user);
		source.setPassword(password);
		source.setInitialSize(initSize);
		source.setMaxActive(maxActive);
		source.setMaxWait(maxWait);
		}catch (Exception e) {
			e.printStackTrace();		
		}
	}
	
	// 建立連線
	public static synchronized Connection getConnection() throws SQLException{
		return source.getConnection();
	}
	
	// 關閉連線
	public static void dbcpClose(Connection connection, Statement statment, ResultSet resultSet) throws SQLException{
		if(resultSet!=null){
			try {
				resultSet.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			resultSet=null;
		}
		if(statment!=null){
			try {
				statment.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			statment=null;
		}
		if(connection!=null){
			try {
				connection.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			connection=null;
		}
	}
	
	// 測試連線
	public static void main(String[] args) throws SQLException {
		 System.out.println(JdbcUtil.getConnection().toString());
	}
}

執行結果:

修改jdbc.properties中的.

jdbc.driverClass=com.mysql.jdbc.Driver為jdbc.driverClass=com.mysql.cj.jdbc.Driver.

再次執行程式:

完成一次簡單的查詢:

      首先是資料庫裡面新建一張表test.

編寫簡單的查詢:其他的封裝是和上面一致的.main方法裡面有些不同.

public static void main(String[] args) throws SQLException {
	Connection connection =JdbcUtil.getConnection();
	System.out.println(JdbcUtil.getConnection().toString());
	String sql="select id,username,age FROM test;";
	// 預編譯物件
	Statement pStatement=connection.prepareStatement(sql);
	ResultSet resultSet=pStatement.executeQuery(sql);
	while(resultSet.next()){
		Integer id=(Integer)resultSet.getObject("id");
		String username=resultSet.getString("username");
		Integer age=(Integer)resultSet.getObject("age");
		System.out.println("查詢使用者"+id+"資訊如下:["+id+","+username+","+age+"]");
		}
	// 關閉
	JdbcUtil.dbcpClose(connection, pStatement, resultSet);
}

執行結果:

整個過程非常簡單,是使用MySQL8.0的驅動;MySQL驅動使用:com.mysql.cj.jdbc.Driver.其他方面瞭解一下新特性後在介紹.

四:Linux下完全解除安裝MySQL.

     4.0  MySQL 目錄結構:

     4.1 由於沒有使用rpm的方式安裝Mysql,故沒有依賴.

      service mysql stop

     4.2直接刪除MYSQL的安裝目錄.例如這裡是/usr/local/mysql.

       rm -rf /usr/local/mysql

     4.3 刪除配置檔案.

      rm -rf /etc/my.cnf.(配置檔案,很關鍵).

      rm -rf /etc/init.d/mysqld.(開機自啟動配置).

解除安裝過程也是自己測試過的,按照這些步驟解除安裝了,再次重新安裝不會有殘留的檔案,報各種奇怪的錯誤.是直接解除安裝乾淨的.

整個過程,注意一下文中的細節,主要是下載->解壓到指定目錄->分配目錄許可權->安裝->配置->啟動MYSQL服務.儘量避免一些不必要的坑,節約時間嘛. MySQL8的一些新特性和MySQL5.7的安裝還是有一些區別的.

這裡推薦一篇Linux下MySQL5.7.22的安裝部落格,寫的非常好.圖文描述清晰.連結.