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的安裝部落格,寫的非常好.圖文描述清晰.連結.