MySQL—Linux查看客戶端連接信息(連接數、進程等)及SpringBoot配置數據庫模板

關注微信公衆號:CodingTechWork,一起學習進步。
在這裏插入圖片描述

介紹

  在開發或者運維過程中,我們連接數據庫的時候突然會遇到"Too many Connections"這種報錯信息;這時我們就需要排除一下是哪些程序客戶端連接較多而沒有釋放。

查看mysql數據庫連接數

查看最大連接數

show variables like 'max_connections';
在這裏插入圖片描述

查看已使用連接數

show status like 'max%connections';
在這裏插入圖片描述
發現已使用的已經大於最大連接數。

更改最大連接數

全局set(臨時)

這種方式重啓mysql後會失效。
set GLOBAL max_connections=1000;

mysql> set GLOBAL max_connections=1000;
Query OK, 0 rows affected (2.00 sec)
查看最大連接數

在這裏插入圖片描述

查看已使用連接數

在這裏插入圖片描述
發現由原來的152變成了159,可以更多的連接。

配置文件修改

修改/etc/my.cnf配置文件
[mysqld]塊中修改或添加:max_connections=1000,重啓mysql。

查看數據庫連接情況

查看數據庫連接IP列表及數量

select SUBSTRING_INDEX(host,':',1) as ip , count(*) from information_schema.processlist group by ip;
在這裏插入圖片描述

查看數據庫連接數

select count(*) from information_schema.processlist;
在這裏插入圖片描述

查看進程列表

(1)列出前100條
show processlist;
在這裏插入圖片描述
(2)列出所有
show full processlist;

(3)各列的含義

  • Id:該進程程序登錄mysql時,系統分配的連接id,即爲connection_id。
  • User:該進程程序連接mysql的用戶。
  • Host:該進程程序連接mysql的ip。
  • db:該進程程序連接mysql的某個數據庫。
  • Command:該進程程序執行的命令,取值爲休眠(Sleep)、查詢(Query)、連接(Connect)等。
  • Time:Command狀態持續的時間,單位爲秒。
  • State:使用當前的sql語句的狀態,如starting。
  • Info:顯示sql語句,如當前執行了show full processlist。

查看進程

查看連接數據庫的java進程

數據庫端口爲3306,查看連接該端口的java程序進程
netstat -anp | grep 3306 | grep java
在這裏插入圖片描述

查看進程對應的程序

ps -ef | grep 進程號
在這裏插入圖片描述

統計某個進程連接數

netstat -anp | grep 3306 | grep 進程號 | wc -l
通過wc -l統計出某個進程的連接數。
在這裏插入圖片描述
通過上述一系列操作,我們大概就能知道哪個程序服務連接數較多了。如上述的23818這個進程的連接數最多,爲136。這時就需要考慮是否程序中對數據庫連接沒有做一些限制。

Java程序配置數據庫連接池

# 配置數據庫【需要按照具體環境修改】
spring.datasource.url: jdbc:mysql://ip1:3306,ip2:3306,ip3:3306/dbName?useSSL=false&useUnicode=true&amp&characterEncoding=utf-8
# Username and password
spring.datasource.username: userA
#ENC()前綴爲數據庫密碼密文處理,測試時可直接配置數據庫密碼如:spring.datasource.password =123456
spring.datasource.password: ENC(0cHjeDIecX6DZd+T8kfNuukmfdfdsfd)
#spring.datasource.password: 123456

# 指定獲取連接時連接校驗的sql查詢語句
spring.datasource.validation-query: SELECT 1 FROM DUAL
# 配置獲取連接等待超時的時間
spring.datasource.max-wait: 10000
# 獲取連接時候驗證,會影響性能
spring.datasource.test-on-borrow: true
# 配置獲取連接池中最大空閒數
spring.datasource.max-idle: 30
# 配置獲取連接池中最大活躍數
spring.datasource.max-active: 100
# 指定連接池中連接的最大生存時間,毫秒單位
spring.datasource.max-lifetime: 300000
# 指定數據庫連接驅動
spring.datasource.driverClassName: com.mysql.jdbc.Driver
# 指定數據庫類型爲MYSQL
spring.jpa.database: MYSQL
# 查詢時是否顯示日誌,無需修改
spring.jpa.show-sql: false
# Hibernate ddl auto (create, create-drop, update)
spring.jpa.hibernate.ddl-auto: update
# Naming strategy
spring.jpa.hibernate.naming-strategy: org.hibernate.cfg.ImprovedNamingStrategy
# stripped before adding them to the bean manager)
#spring.jpa.properties.hibernate.dialect: org.hibernate.dialect.MySQL5Dialect
#spring.jpa.properties.hibernate.dialect: com.xxx.yyy.demo.entity.MySQL5DialectUTF8
# 字段無修改命名
spring.jpa.hibernate.naming.physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
# 遇到大寫字母 加”_”的命名
# spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy

jasypt:
  encryptor:
    password: EbfYkitulv73I2p0mXI50JMXoaxZTKJ7

注意:其中的spring.jpa.properties.hibernate.dialect: com.xxx.yyy.demo.entity.MySQL5DialectUTF8即爲數據庫生成表時爲utf-8的編碼。

package com.xxx.yyy.demo.entity;
import org.hibernate.dialect.MySQL5InnoDBDialect;

/**
 * 自動建表(字符集utf-8)
 */
public class MySQL5DialectUTF8 extends MySQL5InnoDBDialect {
    @Override
    public String getTableTypeString() {
        return " ENGINE=InnoDB DEFAULT CHARSET=utf8";
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章