1. 程式人生 > >解決mysql使用innodb引擎ibdata1,過大

解決mysql使用innodb引擎ibdata1,過大

筆者購買的阿里雲主機,因業務需要使用事務,經常業務頻繁,導致資料庫檔案猛漲到100G左右,而實際匯出的資料只有5G,筆者使用的資料庫是5.7版本以下,innodb_file_per_table使用預設配置,即是關閉的,innodb的表和索引都儲存在一起.導致檔案很大.

1.需要在/etc/my.cnf 增加一行,

[mysqld]
innodb_file_per_table=1

2.執行以下指令碼,重新匯入資料庫檔案

#!/usr/bin/env bash
DATABASES="$(mysql -e 'show databases \G' | grep "^Database" | grep -v '^Database: mysql$\|^Database: binlog$\|^Database: performance_schema\|^Database: information_schema' | sed 's/^Database: //g')"
mysqldump --databases $DATABASES -r alldatabases.sql && echo "$DATABASES" | while read -r DB; do
    mysql -e "drop database \`$DB\`"
done && \
    /etc/init.d/mysqld stop && \
    find /var/lib/mysql -maxdepth 1 -type f \( -name 'ibdata1' -or -name 'ib_logfile*' \) -delete && \
    /etc/init.d/mysqld start && \
    mysql < alldatabases.sql