boot配置mysql資料庫的簡單介紹

本文目錄一覽:

怎麼配置mysql資料庫配置文件

一、mysql_install_db說明

當MySQL的系統庫(mysql系統庫)發生故障或需要新加一個mysql實例時,需要初始化mysql資料庫。

需要使用的命令:/usr/local/mysql/bin/mysql_install_db

#/usr/local/mysql/bin/mysql_install_db –help 可以查看幫助信息如下

Usage: /usr/local/mysql/bin/mysql_install_db [OPTIONS]

–basedir=path The path to the MySQL installation directory.

–cross-bootstrap For internal use. Used when building the MySQL system

tables on a different host than the target.

–datadir=path The path to the MySQL data directory.

–force Causes mysql_install_db to run even if DNS does not

work. In that case, grant table entries that normally

use hostnames will use IP addresses.

–ldata=path The path to the MySQL data directory.

–rpm For internal use. This option is used by RPM files

during the MySQL installation process.

–skip-name-resolve Use IP addresses rather than hostnames when creating

grant table entries. This option can be useful if

your DNS does not work.

–srcdir=path For internal use. The directory under which

mysql_install_db looks for support files such as the

error message file and the file for popoulating the

help tables.

–user=user_name The login username to use for running mysqld. Files

and directories created by mysqld will be owned by this

user. You must be root to use this option. By default

mysqld runs using your current login name and files and

directories that it creates will be owned by you.

All other options are passed to the mysqld program

除了支持以上的參數,還支持mysqld的參數。

二、舉例:

本文以新加一個mysql實例為例。例如伺服器上已經安裝了3306埠的mysql服務,需要再啟一個3308埠的mysql服務。

假設mysql安裝在/usr/local/mysql路徑下,找一個磁碟空間剩餘比較大的盤,如/data1,把3308埠的mysql的數據保存在/data1下

#mkdir /data1/mysql_3308

#mkdir /data1/mysql_3308/data

#chown -R mysql:mysql /data1/mysql_3308

複製一個mysql配置文件my.cnf到/data1/mysql_3308目錄下

#vi /data1/mysql_3308/my.cnf

修改配置文件,將埠和相關目錄的都改為新的設置,如下:

[client]

character-set-server = utf8

port = 3308

socket = /tmp/mysql_3308.sock

[mysqld]

user = mysql

port = 3308

socket = /tmp/mysql_3308.sock

basedir = /usr/local/mysql

datadir = /data1/mysql_3308/data

log-error = /data1/mysql_3308/mysql_error.log

pid-file = /data1/mysql_3308/mysql.pid

……其他略

確保配置文件無誤。

運行下面命令進行資料庫的初始化:

#/usr/local/mysql/bin/mysql_install_db –defaults-file=/data1/mysql_3308/my.cnf –datadir=/data1/mysql_3308/data

完成後新的3308資料庫就初始化好了,如果有報錯,則按照報錯的提示查看報錯日誌,一般情況下都是my.cnf配置文件的問題,修正後即可。

三、啟動新mysql

啟動3308埠的mysql服務

#/usr/local/mysql/bin/mysqld_safe –defaults-file=/data1/mysql_3309/my.cnf

檢查是否啟動

#ps aux|grep mysql

如果有3308字樣說明已經啟動成功

可將啟動命令加入/etc/rc.local隨伺服器啟動

新加的mysql沒有設置root密碼,可以通過下面命令設置root密碼:

#/usr/local/mysql/bin/mysqladmin -S /tmp/mysql_3308.sock -u root password ‘new-password’

SpringBoot+mysql配置兩個數據源

1.properties配置文件信息

2.載入properties 獲取資源池信息

3.主數據源載入類

4.從數據源載入類

SpringBoot項目中實現MySQL讀寫分離

但我們仔細觀察我們會發現,當我們的項目都是用的單體資料庫時,那麼就可能會存在如下問題:

為了解決上述提到的兩個問題,我們可以準備兩 (多) 台MySQL,一台主( Master )伺服器,一台從( Slave )伺服器,主庫的 數據變更 (寫、更新、刪除這些操作) ,需要 同步 到從庫中 (主從複製) 。而用戶在訪問我們項目時,如果是 寫操作 (insert、update、delete),則直接操作 主庫 ;如果是 讀操作 (select) ,則直接操作從庫,這種結構就是 讀寫分離 啦。

在這種讀寫分離的結構中,從庫是可以有多個的

MySQL主從複製是一個 非同步 的複製過程,底層是基於Mysql資料庫自帶的 二進位日誌 功能。就是一台或多台MySQL資料庫(slave,即 從庫 )從另一台MySQL資料庫(master,即 主庫 )進行日誌的複製,然後再解析日誌並應用到自身,最終實現 從庫 的數據和 主庫 的數據保持一致。MySQL主從複製是 MySQL資料庫自帶功能,無需藉助第三方工具。

二進位日誌(BINLOG)記錄了所有的 DDL(數據定義語言)語句和 DML(數據操縱語言)語句,但是不包括數據查詢語句。此日誌對於災難時的數據恢復起著極其重要的作用,MySQL的主從複製, 就是通過該binlog實現的。默認MySQL是未開啟該日誌的。

在環境搭建之前,我們需要準備好兩台伺服器,如果生活富裕使用的是兩台雲伺服器的時候記得要開放安全組,即防火牆;如果是比狗子我生活好點但也是用的虛擬機的話,記得別分這麼多內存啟動藍屏了(別問怎麼知道的)

這裡就不給大家展示資料庫的安裝和防火牆的操作了,這個我感覺網上好多資源都能夠滿足遇到的問題,在搭建主從庫的時候有在網上見到過說MySQL版本要一致的,我也沒太留意直接就在之前的MySQL上操作了,大家可以自己去驗證一下。

伺服器:192.168.150.100(別試了黑不了的,這是虛擬機的ip)

這裡有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令,Linux不認識這玩意是啥。

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以拿到我們後面需要的兩個重要參數。

執行完這一句SQL之後,==不要再操作主庫!不要再操作主庫!不要再操作主庫!==重要的事情說三遍,因為再操作主庫之後可能會導致紅框中的 兩個屬性值會發生變化 ,後面如果發生了錯誤可能就和這裡有那麼兩毛錢關係了。

伺服器:192.168.150.101(別試了黑不了的,這也是虛擬機的ip)

這裡要注意server-id和主庫以及其他從庫都不能相同,否則後面將會配置不成功。

這裡有三個方法都能重啟MySQL,最簡單的無疑就是一關一開:

登錄進去MySQL之後才能夠執行下面的命令,因為這是SQL命令

參數說明:

這個時候還 不用退出MySQL ,因為下面的命令還是SQL命令,執行下面的SQL,可以看到從庫的狀態信息。通過狀態信息中的 Slave_IO_running 和 Slave_SQL_running 可以看出主從同步是否就緒,如果這兩個參數全為 Yes ,表示主從同步已經配置完成。

這可能是由於linux 是複製出來的,MySQL中還有一個 server_uuid 是一樣的,我們也需要修改。 vim /var/lib/mysql/auto.cnf

這應該就是各位大牛設置server_id的時候不小心設置相同的id了,修改過來就行,步驟在上面的配置中。

這是狗子在操作過程中搞出來的一個錯誤……

出錯的原因是在主庫中刪除了用戶信息,但是在從庫中同步的時候失敗導致同步停止,下面記錄自己的操作(是在進入MySQL的操作且是從庫)。

在資料庫中操作時,一定要注意當前所在的資料庫是哪個,作為一個良好的實踐:在SQL語句前加 USE dbname 。

Sharding-JDBC定位為 輕量級Java框架 ,在Java的JDBC層提供的額外服務。 它使用客戶端直連資料庫,以 jar包 形式提供服務,無需額外部署和依賴,可理解為增強版的JDBC驅動, 完全兼容JDBC和各種ORM框架 。

使用Sharding-JDBC可以在程序中輕鬆的實現資料庫 讀寫分離 。

Sharding-JDBC具有以下幾個特點:

下面我們將用ShardingJDBC在項目中實現MySQL的讀寫分離。

在pom.xml文件中導入ShardingJDBC的依賴坐標

在application.yml中增加數據源的配置

這時我們就可以對我們項目中的配置進行一個測試,下面分別調用一個更新介面和一個查詢介面,通過查看日誌中記錄的數據源來判斷是否能夠按照我們預料中的跑。

搞定!!!程序正常按照我們預期的成功跑起來了,成功藉助ShardingJDBC在我們項目中實現了資料庫的讀寫分離。

如何在單個Boot應用中配置多資料庫

舉個例子:配置兩種資料庫,一個是mysql,另一個是sqlserver

1、需要在application.yml中將多數據源的配置信息進行配置

mysql數據源:

spring:

datasource:

driverClassName: com.mysql.jdbc.Driver

url: jdbc:mysql://192.168.28.230:3306/****?useUnicode=truecharacterEncoding=UTF-8autoReconnect=true

username: ****

password: ****

sqlserver數據源配置

custom:

datasource:

names: ds1

ds1:

driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

url: jdbc:sqlserver://ip:1433;databaseName=資料庫名稱

username: ****

password: ****

2、編寫數據源的配置和載入類:

SQLserver數據源

@Configuration

@MapperScan(basePackages = RdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “rdsSessionFactory”)

public class RdsDataSourceConfig {

static final String PACKAGE = “com.jyall.ehr.kaoqin”;   //本項目中用的是mybatis,此路徑為掃描的mapper的包結構

@Value(“${custom.datasource.ds1.url}”) //第一步中配置文件中的資料庫配置信息

private String dbUrl;

@Value(“${custom.datasource.ds1.username}”)//同理為配置文件中信息

private String dbUser;

@Value(“${custom.datasource.ds1.password}”)//同理為配置文件信息

private String dbPassword;

@Bean(name = “rdsDatasource”)

public DataSource rdsDataSource() {

DataSource dataSource = new DataSource();

dataSource.setDriverClassName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”);

dataSource.setUrl(dbUrl);

dataSource.setUsername(dbUser);

dataSource.setPassword(dbPassword);

return dataSource;

}

@Bean(name = “rdsTransactionManager”)

public DataSourceTransactionManager rdsTransactionManager(@Qualifier(“rdsDatasource”) DataSource adsDataSource) {

return new DataSourceTransactionManager(rdsDataSource());

}

@Bean(name = “rdsSessionFactory”)

public SqlSessionFactory adsSqlSessionFactory(@Qualifier(“rdsDatasource”) DataSource adsDataSource) throws Exception {

final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

sessionFactory.setDataSource(adsDataSource);

return sessionFactory.getObject();

}

}

mysql數據源

@Configuration

@MapperScan(basePackages = AdsDataSourceConfig.PACKAGE, sqlSessionFactoryRef = “adsSqlSessionFactory”)

public class AdsDataSourceConfig {

static final String PACKAGE = “com.jyall.ehr.mapper”;  //掃描的mapper包結構

@Value(“${spring.datasource.url}”) //配置文件中的配置

private String dbUrl;

@Value(“${spring.datasource.username}”) //配置文件中的配置

private String dbUser;

@Value(“${spring.datasource.password}”) //配置文件中的配置

private String dbPassword;

@Bean(name = “adsDataSource”)

@Primary   //此註解表示在默認的數據源配置,即在默認配置時用到的數據源配置

public DataSource adsDataSource() {

DataSource dataSource = new DataSource();

dataSource.setDriverClassName(“com.mysql.jdbc.Driver”);

dataSource.setUrl(dbUrl);

dataSource.setUsername(dbUser);

dataSource.setPassword(dbPassword);

return dataSource;

}

@Bean(name = “adsTransactionManager”)

@Primary

public DataSourceTransactionManager adsTransactionManager(@Qualifier(“adsDataSource”) DataSource adsDataSource) {

return new DataSourceTransactionManager(adsDataSource);

}

@Bean(name = “adsSqlSessionFactory”)

@Primary

public SqlSessionFactory adsSqlSessionFactory(@Qualifier(“adsDataSource”) DataSource adsDataSource) throws Exception {

final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

sessionFactory.setDataSource(adsDataSource);

return sessionFactory.getObject();

}

}

至此多數據源的配置都已經完成,其他配置跟但數據源的配置是一樣的。

原創文章,作者:XBYK,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/134967.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
XBYK的頭像XBYK
上一篇 2024-10-04 00:09
下一篇 2024-10-04 00:09

相關推薦

  • 如何修改mysql的埠號

    本文將介紹如何修改mysql的埠號,方便開發者根據實際需求配置對應埠號。 一、為什麼需要修改mysql埠號 默認情況下,mysql使用的埠號是3306。在某些情況下,我們需…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • Spring Boot 集成 Jacoco

    本文將從以下幾個方面介紹如何在 Spring Boot 中集成 Jacoco:1、Jacoco 概述;2、Spring Boot 集成 Jacoco 的配置;3、生成 Jacoco…

    編程 2025-04-29
  • Python簡單數學計算

    本文將從多個方面介紹Python的簡單數學計算,包括基礎運算符、函數、庫以及實際應用場景。 一、基礎運算符 Python提供了基礎的算術運算符,包括加(+)、減(-)、乘(*)、除…

    編程 2025-04-29
  • Python滿天星代碼:讓編程變得更加簡單

    本文將從多個方面詳細闡述Python滿天星代碼,為大家介紹它的優點以及如何在編程中使用。無論是剛剛接觸編程還是資深程序員,都能從中獲得一定的收穫。 一、簡介 Python滿天星代碼…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • Spring Boot中發GET請求參數的處理

    本文將詳細介紹如何在Spring Boot中處理GET請求參數,並給出完整的代碼示例。 一、Spring Boot的GET請求參數基礎 在Spring Boot中,處理GET請求參…

    編程 2025-04-29
  • Python海龜代碼簡單畫圖

    本文將介紹如何使用Python的海龜庫進行簡單畫圖,並提供相關示例代碼。 一、基礎用法 使用Python的海龜庫,我們可以控制一個小海龜在窗口中移動,並利用它的「畫筆」在窗口中繪製…

    編程 2025-04-29
  • Python操作MySQL

    本文將從以下幾個方面對Python操作MySQL進行詳細闡述: 一、連接MySQL資料庫 在使用Python操作MySQL之前,我們需要先連接MySQL資料庫。在Python中,我…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29

發表回復

登錄後才能評論