总之存储引擎的各项是特效就是为了保证数据库的安全和性能设计结构。
mysql提供一下存储引擎: 1.InonDB 2.MyISAM 3.MEMORY 4.ARCHIVE 5.FEDERATED 6.EXAMPLE 7.BLACKHOLE 8.MERGE 9.NDBCLUSTER 10.CSV # 还可以使用第三方存储引擎 1.MySQL当中的插件式的存储引擎 2.MySQL的两个分支 perconaDB mariaDB
# 查看所有的存储引擎 show engines # 查看库中哪些表示InnoDB的存储引擎 select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='innodb'; # 查看库中哪些表示是Myisam的存储引擎 select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='myisam';
物理区别
# innodb -rw-r----- 1 mysql mysql 8710 Aug 15 10:05 city.frm # 表结构文件 -rw-r----- 1 mysql mysql 704512 Aug 15 10:05 city.ibd # 数据文件 # myisam -rw-r----- 1 mysql mysql 10816 Aug 3 01:48 user.frm # 表结构文件 -rw-r----- 1 mysql mysql 456 Aug 9 10:17 user.MYD # 数据文件 -rw-r----- 1 mysql mysql 4096 Aug 9 11:04 user.MYI # 数据文件
逻辑结构
# 在mysql5.5版本之后,默认的存储引擎,提供高可靠性和高性能 优点 1.事物安全 2.MVCC (Multi-Versioning Concurrency Control,多版本并发控制) 3.InnoDB 行级别锁定 4.Orade 样式一致非锁定读取 5.表数据进行整理来优化基于主键的查询 6.支持外键应用完整性约束 7.大小数据卷上的最大性能 8.将对表的查询与不同存储引擎混合 9.出现故障后快速自动回复 10.用于在内存中缓存数据和所有的缓存区池
# 重点 - MVCC - 事物 - 行级锁 - 热备份 - Crash Safe Recovery (自动故障恢复) # 查看存储引擎 SELECT @@default_storage_engine; # 查看建表语句 show create table student; select TABLE_SCHEMA,TABLE_NAME,ENGINE from information_schema.tables where engine='innodb' and table_name='stu'; show table status like 'stu'\G
# 编辑MySQL配置文件 [mysql] default-storage-engine=<Storage Engine> default-storage-engine=innodb default-storage-engine=myisam # 库内临时设置 create table 表名(id int)engine='存储引擎名';
项目背景:
公司原有的架构:一个展示形的网站,LAMT,MySQL5.1.77版本(MYISAM),50M数据量。
小问题不断:
表级锁:对表中任意一行数据修改类操作时,整个表都会锁定,对其他行的操作都不能同时操作
不支持故障自动恢复(CSR) :当断电时有可能会出现数据孙华或丢失的问题。
如何解决
1.开会讨论。停机维护 2.将操作步骤,提前写在文档中 2.1 准备新环境 新的centos系统 新的MySQL版本 配置文件优化好 服务启动好 3.关闭所有连接数据库的服务 systemctl stop php-fpm systemctl stop tomcat 4.停数据库 systemctl stop mysqld 5.备份数据库中的全部数据 mysqldump -A -R --trigger --single-transaction --master-data=1 6.将备份的数据发送到新环境中 将myisam存储引擎改成innodb # 方案一 #!/bin/bash for table in ` mysql -e 'show tables from zls'|awk 'NR>1'`;do mysql -e "alter table zls.$table engine='myisam'"; done、 # 方案二 mysqldump -B zls > /tmp/zls.sql :%[email protected][email protected][email protected] 7.将数据库导入到新的数据库中 8.将几台web服务器,连接到新库,做测试 9.应用割接