mysql从共享表空间修改为单个表的表空间存储方式是什么

技术mysql从共享表空间修改为单个表的表空间存储方式是什么本篇文章为大家展示了mysql从共享表空间修改为单个表的表空间存储方式是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收

本文向您展示了mysql是如何从共享表空间变成单表空间存储的。内容简洁易懂,一定会让你大放异彩。希望通过这篇文章的详细介绍,你能有所收获。

使用过MySQL的同学,一开始会接触到MyISAM表引擎最多。该引擎的数据库将分别创建三个文件:表结构、表索引和表数据空间。我们可以将一个数据库目录直接迁移到其他数据库,它也可以正常工作。但是,当您使用InnoDB时,一切都会改变。默认情况下,InnoDB会将InnoDB引擎所有数据库的表数据存储在一个共享空间:ibdata1中,这让我感觉很不舒服。添加或删除数据库时,ibdata1文件不会自动收缩,单个数据库的备份将成为问题。通常,数据只能使用mysqldump导出,然后导入来解决这个问题。

在MySQL的配置文件【MySQL】部分,可以添加参数InnoDB_file_per_table,将InnoDB修改为独立表空间模式,每个数据库中的每个表都会生成一个数据空间。

独立表空间

优点:

1.每个表都有自己独立的表空间。

2.每个表的数据和索引将存在于它自己的表空间中。

3.单个表可以在不同的数据库中移动。

4.空间可以回收(删除/截断表操作表空间不能自动回收)

5.对于使用独立表空间的表,无论如何删除,表空间的碎片化都不会严重影响性能,仍然有机会处理。

缺点:

单表的增加大于共享空间的增加。

结论:

共享表空间在插入操作中有一些优势,但在其他操作中不如独立表空间。

启用独立表空间时,请合理调整innodb_open_files参数。

以下是针对在线Zabbix中MySQL数据库历史记录太多导致ibdata1文件太大的问题的实用解决方案。

1.检查文件大小

$ sudo cd /var/lib/mysql

$ ls -lh

总计14G

-rw-r - r - 1根0 12月1日14:31 debian-5.1 .标志

-rw-rw-1 MySQL MySQL 5.0M 1月17日21:31 ib_logfile0

-rw-rw-1 MySQL MySQL 5.0M 1月17日21:29 ib_logfile1

-rw-rw-1 MySQL MySQL 14G 1月17日21:31 ibdata1

drwx-2 MySQL root 4.0K 12月1日14:31 mysql

-rw-rw - 1根6 12月1日14:31 mysql_upgrade_info

drwx-2 MySQL MySQL 4.0K 1月17日21:29 zabbix

共享表数据空间文件ibdata1的大小已达到14G。

登录MySQL查看哪些表占用空间。

$ mysql -uroot -p

mysql选择table_name,(data _ length index _ length)/1024/1024作为total_mb,table_rows来自information_schema.tables,其中table _ schema=' zabbix

- - -

| table _ name | total _ MB | table _ rows |

- - -

|承认| 0.06250000 | 0 |

.

|帮助_项目| 0.04687500 | 103 |

|历史记录b

sp;     | 9678.00000000 |  123981681 |
 | history_log           |    0.04687500 |          0 |
 ...
 | history_text          |    0.04687500 |          0 |
 | history_uint          | 5386.98437500 |   57990562 |
 | history_uint_sync     |    0.04687500 |          0 |
 ...
 | timeperiods           |    0.01562500 |          0 |
 | trends                |   54.54687500 |     537680 |
 | trends_uint           |  100.53125000 |    1035592 |
 ...
 103 rows in set (1.46 sec)
可以看到,history表的记录已经达到了9G,123981681条,即1亿2千万条,同时history_unit也比较大,达到了5G,约6千万条;
另外就是trends,trends_uint中也存在一些数据。
由于数据量太大,按照普通的方式delete数据的话基本上不太可能。
因为我们每天会自动发送数据报表,所以决定直接采用truncate table的方式来快速清空这些表的数据,再使用mysqldump导出数据,删除共享表空间数据文件,重新导入数据。
2.停止相关服务,避免写入数据
$ sudo /etc/init.d/zabbix-server stop
$ sudo /etc/init.d/apache2 stop
3.清空历史数据
$ mysql -uroot -p
 mysql > use zabbix;
 Database changed
 
 mysql > truncate table history;
 Query OK, 123981681 rows affected (0.23 sec)
 
 mysql > optimize table history;
 1 row in set (0.02 sec)
 
 mysql > truncate table history_uint;
 Query OK, 57990562 rows affected (0.12 sec)
 
 mysql > optimize table history_uint;
 1 row in set (0.03 sec)
 
 mysql > truncate table trends;
 Query OK, 537680 rows affected (0.04 sec)
 
 mysql > optimize table trends;
 1 row in set (0.02 sec)
 
 mysql > truncate table trends_uint;
 Query OK, 1035592 rows affected (0.02 sec) 
 
 mysql > optimize table trends_uint;
 1 row in set (0.01 sec)
4.备份数据
$ mysqldump -uroot -p zabbix > ~/zabbix.sql
5.停止数据库
$ sudo stop mysql
6.删除共享表空间数据文件
$ cd /var/lib/mysql
$ rm ib*
7.增加innodb_file_per_table参数
$ sudo vim /etc/mysql/my.cnf
在[mysqld]下设置
1 innodb_file_per_table=1
8.启动MySQL
$ sudo start mysql
9.查看参数是否生效
$ mysql -uroot -p
 mysql> show variables like '%per_table%';
 +-----------------------+-------+
 | Variable_name | Value |
 +-----------------------+-------+
 | innodb_file_per_table | ON |
 +-----------------------+-------+
 1 row in set (0.00 sec)
10.重新导入数据
$ mysql -uroot -p zabbix < ~/zabbix.sql
11.编写每天自动清理数据的脚本,保留30天的数据
$ sudo vim /etc/cron.daily/clean_zabbix_olddata.sh
view source
print?
 #!/bin/bash
 DATE=`date -d "30 days ago"`
 CLOCK=`date +%s -d "${DATE}"`
 MYSQL="mysql -uroot -p zabbix"
 
 for TABLE in history trends
 do
   $MYSQL -e "DELETE FROM ${TABLE} WHERE clock < ${CLOCK};"
   $MYSQL -e "OPTIMIZE TABLE ${TABLE};"
   $MYSQL -e "DELETE FROM ${TABLE}_uint WHERE clock < ${CLOCK};"
   $MYSQL -e "OPTIMIZE TABLE ${TABLE}_uint;"
 done
12.最后,恢复相关服务进程
$ sudo /etc/init.d/zabbix-server start
$ sudo /etc/init.d/apache2 start

上述内容就是mysql从共享表空间修改为单个表的表空间存储方式是什么,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/96677.html

(0)

相关推荐

  • 怎么理解Python报表和日志

    技术怎么理解Python报表和日志本篇内容主要讲解“怎么理解Python报表和日志”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么理解Python报表和日志”吧!导出Exc

    攻略 2021年11月2日
  • django项目怎么安装(django的安装教程怎么进入d盘)

    技术django如何安装和实现第一个页面小编给大家分享一下django如何安装和实现第一个页面,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!w

    攻略 2021年12月20日
  • 强力数据恢复精灵,误删手机视频怎么恢复免费

    技术强力数据恢复精灵,误删手机视频怎么恢复免费方法/步骤分步阅读
    1
    /4
    首先打开手机从手机桌面上找到手机的应用商店大多数手机应用软件都有‘强力数据恢复精灵’点击下载强力数据恢复精灵。从桌面上找到软件并打开它。
    2
    /

    生活 2021年10月20日
  • Socket基础知识有哪些

    技术Socket基础知识有哪些本篇文章给大家分享的是有关Socket基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。如何一步步掌握Socket相

    攻略 2021年11月25日
  • 利用socket实现一个简单的web聊天(websocket服务器开源)

    技术如何分析基于WebSocket的聊天开源项目如何分析基于WebSocket的聊天开源项目,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。如果你是站长,是否

    攻略 2021年12月24日
  • 关于安全的手抄报,四年级关于安全手抄报的内容

    技术关于安全的手抄报,四年级关于安全手抄报的内容安全”这根弦时刻都不能放松。每个人都渴望有一个幸福、温馨的家庭,每个人都希望有一个健康的身体,每个人都希望快乐地生活,然而,各种安全事故却时有发生,给许多人带来了极大的痛苦

    生活 2021年10月25日