問題起因
分庫查詢中只能查詢到,第一個分庫,後續分庫查詢不到,查看日誌,發現如下錯誤信息
錯誤信息
Caused by: java.sql.SQLException: Can't change size of file (OS errno 28 - No space left on device)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:970) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1020) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.DatabaseMetaDataUsingInfoSchema.executeMetadataQuery(DatabaseMetaDataUsingInfoSchema.java:70) ~[mysql-connector-java-8.0.15.jar:8.0.15]
at com.mysql.cj.jdbc.DatabaseMetaDataUsingInfoSchema.getTables(DatabaseMetaDataUsingInfoSchema.java:847) ~[mysql-connector-java-8.0.15.jar:8.0.15]
問題原因
數據庫臨時分區tmp空間不足
參考https://stackoverflow.com/questions/7415710/mysql-writing-file-error-errcode-28
my.cnf中如果沒有配置tmpdir的路徑,默認使用/tmp;
修改my.cnf 中tmpdir = /alidata1/dbtmpdir
目錄磁盤空間查看
# 查看目錄已用空間 df -PhT /
#處理前
已用100%
#處理後
[root@toku01 alidata1]# df -PhT /
Filesystem Type Size Used Avail Use% Mounted on
/dev/vda1 ext4 20G 3.0G 16G 16% /
解決步驟
# 創建目錄
mkdir /alidata1/dbtmpdir
#修改my.cnf配置文件 ,增加配置:tmpdir=/alidata1/dbtmpdir
vim my.cnf
#需要給新建目錄授權,不然重啓會失敗
chmod 777 /alidata1/dbtmpdir
#重新啓動
#linux centos 7 重啓命令
systemctl restart mysqld.service
#linux centos6 重啓命令
service mariadb restart
#重啓啓動tomcat 解決問題
如果數據庫重啓錯誤,查看數據庫日誌文件,就可以知道問題原因,然後針對性去處理
tail -n8 mysqld.log
2020-05-18T04:52:25.504543Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.15-5) Percona Server (GPL), Release 5, Revision f8a9e99.
mysqld: Can't create/write to file '/alidata1/dbTempDir/ibiZvIlt' (OS errno 13 - Permission denied)
2020-05-18T04:52:26.900951Z 0 [System] [MY-010116] [Server] /usr/sbin/mysqld (mysqld 8.0.15-5) starting as process 17025
2020-05-18T04:52:27.012324Z 1 [ERROR] [MY-012576] [InnoDB] Unable to create temporary file; errno: 13
2020-05-18T04:52:27.012354Z 1 [ERROR] [MY-012930] [InnoDB] Plugin initialization aborted with error Generic error.
2020-05-18T04:52:27.012395Z 1 [ERROR] [MY-010334] [Server] Failed to initialize DD Storage Engine
2020-05-18T04:52:27.012655Z 0 [ERROR] [MY-010020] [Server] Data Dictionary initialization failed.
2020-05-18T04:52:27.012810Z 0 [ERROR] [MY-010119] [Server] Aborting