本文目錄一覽:
怎麼配置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-hk/n/134967.html