数据库--释放mysql数据库资源
背景
nikeodong 之前做了项目的数据库主从,在全备的过程发现数据库是越来越大了;最后发现是资源不释放的问题。
目的
为了解决 mysql 资源不释放的问题。
步骤
1、vim /etc/my.cnf,关闭 log_bin 日志。
2、导出数据库 sql:time mysqldump -q -uroot -p'dpENoKNhG#y0w4sK' --max_allowed_packet=128M --net_buffer_length=16M -e --all-databases > XXXX.sql
3、删除 mysql 的 data 日志
通过命令:show variables like'datadir',找到data目录
或者通过vim/etc/my.cnf-->找到里面的datadir的值,找到data目录
4、重新导入表空间:mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/home/data/mysql --default-storage-engine=INNODB&
5、重新开启 lob_bin 日志
注意:在执行第二步的时候可能会报错
报错:Error: Table "mysql"."innodb_index_stats" not found。如下是解决方法
显示有几个系统表不存在.
innodb_table_stats
innodb_index_stats
或者
slave_master_info
slave_relay_log_info
slave_worker_info
这是因为数据库初始化的时候,dba可能删除过ibdata1文件
虽然重启之后,数据库会自动创建一个ibdata1文件,因为是innodb引擎,所以不能访问了.
解决的方法如下:
删除上述系统表
drop table mysql.innodb_index_stats;
drop table mysql.innodb_table_stats;
drop table mysql.slave_master_info;
drop table mysql.slave_relay_log_info;
drop table mysql.slave_worker_info;
删除相关的.frm.ibd文件
rm-rf innodb_index_stats*
rm-rf innodb_table_stats*
rm-rf slave_master_info*
rm-rf slave_relay_log_info*
rm-rf slave_worker_info*
重新创建上述系统表
CREATE TABLE`innodb_index_stats`(
`database_name`varchar(64)COLLATE utf8_bin