笔者购买的阿里云主机,因业务需要使用事务,经常业务频繁,导致数据库文件猛涨到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