# 1.查看默认的存储引擎
mysql> select @@default_storage_engine;
+--------------------------+
| @@default_storage_engine |
+--------------------------+
| InnoDB |
+--------------------------+
# 2.修改默认的存储引擎
永久修改存储引擎
vim /etc/my.cnf
[mysqld]
default_storage_engine=存储引擎名称
全局临时修改存储引擎
set global default_storage_engine='myisam';
# 3.针对指定数据表设置存储引擎
可以对数据库存储碎片进行整理(可以提高磁盘应用效率)
数据库碎片整理参考资料:https://cloud.tencent.com/developer/article/1848499
create table 表名 (...) engine='存储引擎';
alter table 表名 engine='存储引擎';
数据异常损坏修复方法
sh复制代码
数据异常损坏,修复数据方法: 利用表空间文件修复数据(相同版本数据库之间 引擎使用innodb)
修复数据常见方法--利用备份数据修复(备份文件 日志文件 利用表空间文件修复)
步骤一:创建两个数据库实例
实例01 模拟早期使用数据库服务
实例02 模拟数据库服务故障后,重新建立的数据库服务
步骤二:在实例01中模拟创建业务数据
mysql -p666666 -S /tmp/mysql.sock <./t100w_oldboy.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| oldboy
mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| t100w |
步骤三:保存备份数据表结构信息
mysql> SHOW CREATE TABLE t100w;
CREATE TABLE `t100w` (
`id` int DEFAULT NULL,
`num` int DEFAULT NULL,
`k1` char(2) DEFAULT NULL,
`k2` char(4) DEFAULT NULL,
`dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
步骤四:模拟数据库服务故障
mv ibdata1 ibdata11
步骤五:需要进行数据库数据修复
create database oldboy;
-- 在新的实例02中,创建好oldboy数据库
CREATE TABLE `t100w` (
`id` int DEFAULT NULL,
`num` int DEFAULT NULL,
`k1` char(2) DEFAULT NULL,
`k2` char(4) DEFAULT NULL,
`dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 在新的实例02中,创建新的表信息
alter table oldboy.t100w discard tablespace;
-- 将指定表空间文件,从物理层面进行删除,但数据库逻辑层面依然存在表信息
cp -a /data/3306/data/oldboy/t100w.ibd /data/3307/data/oldboy
alter table oldboy.t100w import tablespace;
步骤六:查看验证数据信息是否恢复成功
mysql> select count(*) from t100w;
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
1 row in set (0.12 sec)数据异常损坏,修复数据方法: 利用表空间文件修复数据(相同版本数据库之间 引擎使用innodb)
修复数据常见方法--利用备份数据修复(备份文件 日志文件 利用表空间文件修复)
步骤一:创建两个数据库实例
实例01 模拟早期使用数据库服务
实例02 模拟数据库服务故障后,重新建立的数据库服务
步骤二:在实例01中模拟创建业务数据
mysql -p123456 -S /tmp/mysql80.sock <./t100w_oldboy.sql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| oldboy
mysql> show tables;
+------------------+
| Tables_in_oldboy |
+------------------+
| t100w |
步骤三:保存备份数据表结构信息
CREATE TABLE `t100w` (
`id` int DEFAULT NULL,
`num` int DEFAULT NULL,
`k1` char(2) DEFAULT NULL,
`k2` char(4) DEFAULT NULL,
`dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
步骤四:模拟数据库服务故障
mv ibdata1 ibdata11
步骤五:需要进行数据库数据修复
create database oldboy;
-- 在新的实例02中,创建好oldboy数据库
CREATE TABLE `t100w` (
`id` int DEFAULT NULL,
`num` int DEFAULT NULL,
`k1` char(2) DEFAULT NULL,
`k2` char(4) DEFAULT NULL,
`dt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- 在新的实例02中,创建新的表信息
alter table oldboy.t100w discard tablespace;
-- 将指定表空间文件,从物理层面进行删除,但数据库逻辑层面依然存在表信息
cp -a /data/3306/data/oldboy/t100w.ibd /data/3307/data/oldboy
alter table oldboy.t100w import tablespace;
步骤六:查看验证数据信息是否恢复成功
mysql> select count(*) from t100w;
+----------+
| count(*) |
+----------+
| 1000000 |
+----------+
1 row in set (0.12 sec)
②.数据库服务索引功能应用
1.什么是数据库索引功能
sh复制代码
数据库索引功能类似书籍的目录,可以实现快速检索数据(可以减少磁盘IO资源消耗)
2.如何设置创建索引信息
方法一:创建设置主键索引------PRI
sh复制代码
使用场景:针对主键约束会创建主键索引,可以实现快速查询整行数据信息
创建索引
create table table_name (....,primary key (column));
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` );
查看索引
desc 表名
-- 查看输出中key信息,确认是否有PRI标识信息即可
show index from stu02\G
-- 可以详细查看表中索引信息
需要关注的输出信息:
Non_unique: 0/1
0 表示创建的可能是唯一或主键索引
1 表示创建的是普通或联合和索引
Key_name: 索引名称信息,主键索引名只能是 PRIMARY 其他索引名称可以自定义
区分索引信息应用情况 根据索引名称可以正确删除索引
Cardinality: 索引选择度参考数值,数值越大的列越优选设置为索引信息(列的重复值越少)
Index_type: 索引应用结构方式 利用索引检索数据算法应用 B+Tree -- 拼音 B-Tree -- 笔画
删除索引:
alter table stu01 drop primary key;
方法二:创建设置唯一索引------UNI
sh复制代码
创建设置唯一索引 UNI
使用场景:
类似与主键索引功能,但不同于主键索引,唯一索引列可以存储空值
利用唯一索引功能,只能调取对应主键列信息,无法直接调取所有行数据信息
创建索引:
create table table_name (......,unique index index_name(column));
create unique index 索引名称 on 表名(列名);
ALTER TABLE 表名 ADD UNIQUE 索引名 (列名);
查看索引:
desc stu05; # 查看输出中key信息,确认是否有UNI标识信息
show index from 表名; # 可以详细查看表中索引信息
删除索引
alter table 表名 drop index 索引名;
drop index 索引名 on 数据表名;
方法三:创建设置普通索引
sh复制代码
使用场景:
当某个列经常作为条件查询数据时,可以设置为普通索引(列数据可以重复/可以为空)
利用普通索引查询信息时,只能直接获取对应主键信息,不能直接获取整行数据信息
创建索引:
create table table_name (......,index index_name(column));
create index 索引名称 on 表名(列名);
ALTER TABLE 表名 ADD 索引名 (列名);
查看索引:
desc stu05; # 查看输出中key信息,确认是否有MUL标识信息
show index from 表名; # 可以详细查看表中索引信息
删除索引:
alter table 表名 drop index 索引名;
drop index 索引名 on 数据表名;
方法四:创建设置联合索引
sh复制代码
联合索引应用:当进行数据查询时,需要利用多列信息作为条件,查询所需数据,可以多列组合创建索引
select * from 表名 where
联合索引创建和应用原则:最左原则
1)创建索引:将需要创建索引的多列信息中,重复值少的列放在联合索引创建的最左边
2)应用索引:在利用联合索引列查询数据时,最左列一定要作为条件进行应用
--- 可以提高数据库数据查询效率,减少磁盘的IO资源消耗
创建索引:
create table table_name (....,index index_name(name,gender,age))
create index 索引名称 on 表名(列名) ;
ALTER TABLE 表名 ADD 索引名 (列名);
查看索引:
show index from 表名
-- 可以详细查看表中索引信息
删除索引:
alter table 表名 drop index 索引名;
drop index 索引名 on 数据表名;