美文网首页
mysql(七)

mysql(七)

作者: Freestyle_0f85 | 来源:发表于2019-12-04 14:16 被阅读0次

MySQL存储引擎-innodb

img

查看存储引擎

mysql> show engines;

#查看整个数据库中,哪些表是innodb
mysql> select table_schema,table_name,engine from information_schema.tables where engine='innodb';

#查看整个数据库中,哪些表是myisam
mysql> select table_schema,table_name,engine from information_schema.tables where engine='myisam';

innodb和myisam的物理区别

#myisam
[root@db01 mysql]# ll user.*
-rw-rw---- 1 mysql mysql 10684 11月 28 14:43 user.frm     #表结构
-rw-rw---- 1 mysql mysql  1408 12月  2 08:48 user.MYD     #表空间
-rw-rw---- 1 mysql mysql  2048 12月  2 08:48 user.MYI

#innodb
[root@db01 zls]# ll
-rw-rw---- 1 mysql mysql  8556 12月  4 11:02 zls1.frm    #表结构
-rw-rw---- 1 mysql mysql 98304 12月  4 11:02 zls1.ibd    #表空间

innodb


image.png

核心特性

  • MVCC 多版本并发控制
  • 事务
  • 行级锁
  • 热备
  • CSR(自动故障恢复)

myisam


image.png
#查看当前使用的存储引擎
mysql> SELECT @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB                   |
+--------------------------+

mysql> show create table zls.zls1;

#修改配置文件
default-storage-engine=<Storage Engine>

企业案例

项目背景:

公司原有的架构:一个展示型的网站,LAMT,MySQL5.1.77版本(MYISAM),50M数据量。

小问题不断:

  • 1、表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时进行。
  • 2、不支持故障自动恢复(CSR):当断电时有可能会出现数据损坏或丢失的问题。

如何解决????

1.准备新环境,使用mysql5.6.44

./mysql_install_db --user=mysql --basedir=/application/mysql --datadir=/application/mysql/data

2.备份导出数据

mysqldump -B 程序库> /tmp/full.sql

3.修改存储引擎

sed -i 's#MyISAM#InnoDB#g' /tmp/full.sql

vim /tmp/full.sql
:%s#MyISAM#InnoDB#g 

4.将备份的数据导入新环境

mysql < /tmp/full.sql

5.修改代码,连接数据库的IP

6.先停库

7.截取全备,到停库之间的新数据

8.恢复到新数据库,开启业务

innodb-表空间

1.共享表空间(5.5版本以后出现共享表空间概念

  • 系统数据
  • 临时表
  • undo log(事务日志)

2.独立表空间

  • 生产数据,用户数据
#共享表空间(默认大小12M)
[root@db01 data]# ll
-rw-rw---- 1 mysql mysql 79691776 12月  4 11:35 ibdata1

mysql> show variables like '%path%';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
| ssl_capath            |                        |
| ssl_crlpath           |                        |
+-----------------------+------------------------+

[root@db01 data]# du -sh ibdata1 
76M ibdata1

#共享表空间切割
[root@db01 data]# vim /etc/my.cnf
innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend

#重启数据库
[root@db01 data]# /etc/init.d/mysqld restart
image.png

报错原因:设置共享表空间的大小,50M小于实际表空间大小76M

解决方法:修改配置文件中的50M,76M

innodb_data_file_path=ibdata1:76M;ibdata2:50M:autoextend

注意:ibdata1 已产生的共享表空间大小一定要与配置文件中的大小一致,不能多,也不能少

#开启独立表空间
mysql> show variables like '%per_table%';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+

企业案例

在没有备份数据的情况下,突然断电导致表损坏,打不开数据库。

解决思路:

1.准备新环境

2.将旧数据导入到新环境

3.需要知道建表语句(表结构)
管开发要建表语句

 CREATE TABLE `city_new` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(35) NOT NULL DEFAULT '',
  `CountryCode` char(3) NOT NULL DEFAULT '',
  `District` char(20) NOT NULL DEFAULT '',
  `Population` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`ID`),
  KEY `CountryCode` (`CountryCode`),
  KEY `idx_pop` (`Population`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;


#删除新表的表空间
mysql> alter table world.city_new discard tablespace;

#拷贝旧表空间
[root@db02 world]# cp -a city.ibd city_new.ibd

#导入表空间
mysql> alter table world.city_new import tablespace;

mysql> select * from world.city_new;

#删除旧表
[root@db02 world]# rm -fr city.ibd  city.frm

#新表改名
mysql> alter table world.city_new rename world.city;

相关文章

  • mysql(七)

    MySQL存储引擎-innodb 查看存储引擎 innodb和myisam的物理区别 innodb 核心特性 MV...

  • 2018-10-08总结及计划

    今日总结: 上午在菜鸟教程上看了MySQL部分内容,下载安装MySQL,下午在MySQL黑窗口上练了练,晚上又把七...

  • 阿里云【七天深入MySQL实战营】

    阿里云【七天深入MySQL实战营】 最近报名了阿里云【七天深入MySQL实战营】。不过一直没时间看【最主要还是自己...

  • MySQL之索引

    七、索引 MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据结构。提取句子主干,就可以得到...

  • 七、Mysql优化

    groupBy优化——filesort 联表优化——NLJ和BNL 索引查询优化——ICP

  • MySQL 入门(七)

    9. 数据库连接池 用户每次请求都需要向数据库获得链接,而数据库创建连接,通常需要消耗相对较大的资源,创建时间也较...

  • 成为Java顶尖程序员,先过了下面问题!(七)

    七、数据库相关 1.MySQL InnoDB、Mysaim的特点? innodb、mysiaminnodb:注重事...

  • 让数据库跑的更快的7个MySQL优化建议!

    随着容量和负载的增加,MySQL 的性能会日趋缓慢。这里有七点建议能够保证 MySQL 的平稳运行。 性能是我们衡...

  • mysql字段排序问题

    Author:杜七 Date: 2017.02.22 转载自:zkz专栏 Mysql按数字大小排序String字段...

  • mysql截取字符串

    Author:杜七 Date:2017.03.15 字符串截取 MySQL 字符串截取函数:left(), rig...

网友评论

      本文标题:mysql(七)

      本文链接:https://www.haomeiwen.com/subject/tiflgctx.html