IT评测·应用市场-qidao123.com技术社区

标题: 三.mysql问答合集 [打印本页]

作者: 道家人    时间: 2024-8-4 17:57
标题: 三.mysql问答合集
目录

三.MySQL

3.1 关系型和非关系型数据库的区别

关系型数据库

非关系型数据库

格式机动:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,利用机动,应用场景广泛,而关系型数据库则只支持基础类型。
2、速度快:nosql可以利用硬盘或者随机存储器作为载体,而关系型数据库只能利用硬盘;
3、高扩展性;
4、本钱低:nosql数据库部署简单,根本都是开源软件。
缺点:
1、不提供sql支持,学习和利用本钱较高;
2、无事件处理;
3、数据结构相对复杂,复杂查询方面稍欠。
3.2 登录数据库的方式,如何远程登录

  1. mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost';
  2. mysql> UPDATE mysql.user SET host='%' WHERE user='root';
复制代码
3.3 MySQL的服务结构,当客户端发起哀求后,处理过程


3.4 如何设置或者重置MySQL暗码
  1. use mysql;
  2. UPDATE user SET authentication_string=PASSWORD("root") WHERE User="root";
  3. flush privileges;
复制代码
3.5 DDL,DML,DQL,DCL等SQL语句的写法

DDL数据界说语句
  1. #库部分
  2. create database db02 charset utf8;
  3. # 创建数据库的时候添加属性
  4. show create database db01;
  5. # 查看建库语句
  6. drop database db02;
  7. # 删除数据库db02
  8. alter database db01 charset utf8;
  9. #修改定义库
  10. #表部分
  11. create table student(
  12. sid int '学号',
  13. sname varchar(20) not null comment '学生姓名',
  14. sage tinyint unsigned not null comment '年龄',
  15. sgender enum('m','f') not null default 'm' comment '学生性别',
  16. cometime datetime not null comment '入学时间'
  17. )charset utf8 engine innodb;
  18. #建表语句实例
  19. desc student;
  20. # 查看表中列的定义信息
  21. drop table student;
  22. #删表
  23. alter table student rename stu;
  24. # 修改表名
  25. alter table stu add age int;
  26. # 添加列和列数据类型的定义
  27. alter table stu add test varchar(20),add qq int;
  28. # 添加多个列
  29. alter table stu add classid varchar(20) first;
  30. # 指定位置进行添加列(表首)
  31. alter table stu add phone2 int after sid;
  32. # 指定位置进行添加列(指定列)
  33. alter table stu drop qq;
  34. # 删除指定的列及定义
  35. alter table stu modify sid varchar(20);
  36. # 修改列及定义(列属性)
  37. alter table stu change phone telphone int();
  38. # 修改列及定义(列名及属性)
复制代码
DCL数据控制语言(用户权限)
  1. grant all on *.* to root@'192.168.175.%' identified by '123456';
  2. # 授予root@'192.168.175.%'用户所有权限(非超级管理员)
  3. revoke select on *.* from root@'192.168.175.%';
  4. # 收回select权限
  5. show grants for root@'192.168.175.%';
  6. # 查看权限
复制代码
DML数据操作语言
  1. insert into stu valus('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456);
  2. insert into stu(classid,birth.sname,sage,sgender,comtime,telnum,qq) values('linux01',1,NOW(),'zhangsan',20,'m',NOW(),110,123456),
  3. ('linux02',2,NOW(),'zhangsi',21,'f',NOW(),111,1234567);
  4. # 插入多条数据
  5. update student set sgender='f' where sid=1;
  6. update mysql.user set password=PASSWORD('123456') where user='root' and host='localhost';
  7. delete from student where sid=3;
  8. truncate table student;
  9. # DDL清空表中的内容
  10. alter table student add status enum('1','0') default 1;
  11. # 额外添加一个状态列
  12. update student set status='0' where sid=1;
  13. # 使用update
  14. select * from student where status=1;
  15. # 应用查询存在的数据
复制代码
DQL数据查询

了解select的高级用法(不多简述)
3.6 什么是索引,索引的作用

特殊的数据库结构
加快数据库表中数据的检索速度,用于确保数据的唯一性。
3.7 索引的种类

3.8 b树和b+树的区别

B树的每个节点都存储关键字和数据,而B+树只有叶子节点存储数据,内部节点仅存储关键字和指向子节点的指针
B+树因其优越的范围查询性能和索引空间利用率而被广泛用作默认的索引结构
3.9 什么情况下会导致索引失效

3.10 MySQL的explain

2024 年 8月 随笔档案 - guixiang - 博客园 (cnblogs.com)
3.11 什么是事件,事件的作用

事件 是一组操作,把所有的操作 作为一个团体一起向体系提交 或 撤销操作哀求,即这些操作要么同时成功,要么同时失败。
3.12 事件的ACID分别怎么表现

Atomic(原子性)
Consistent(一致性)
Isolated(隔离性)
Durable(长期性)
3.13 事件的隔离级别

未提交读(read uncommited)

A事件已执行,但未提交;B事件查询到A事件的更新后数据;A事件回滚;
已提交读(read commited)

A事件执行更新;B事件查询;A事件又执行更新;B事件再次查询时,前后两次数据不一致;---不可重复读
可重复读(repeated read)

A事件无论执行多少次,只要不提交,B事件查询值都稳定;B事件仅查询B事件开始时那一瞬间的数据快照;
mysql默认模式
3.14 什么是脏读,幻读,不可重复读

脏读

指一个线程中的事件读取到了别的一个线程中未提交的数据。
不可重复读

指一个线程中的事件读取到了别的一个线程中提交的update的数据。
幻读

指一个线程中的事件读取到了别的一个线程中提交的insert的数据。莫名情况下数据增长或减少(出现于可重复读)
3.15 事件的锁有哪些,怎么用

共享锁(S):答应一个事件去读一行,阻止其他事件获得相同数据集的排他锁。
排他锁(X):答应获得排他锁的事件更新数据,阻止其他事件取得相同数据集的共享读锁和排他写锁。
通过查询条件对某一行进行加锁,commit后解锁
//读锁(共享锁)
SELECT * FROM table_name WHERE ... LOCK IN SHARE MODE;
//写锁(排他锁)
SELECT * FROM table_name WHERE ... FOR UPDATE;
当我们进行增删改的时候Innodb是默认给对应行自动加上了写锁的,select查询不会加锁。
在行锁中,写锁和读锁都是其他会话只能查察无法修改该行数据,自己可以修改,但是我们给某一行加了读锁后,其他会话可以给这一行加读锁,不能加写锁。当我们给某一行加了写锁后,其他会话不能给该行加锁
3.16 悲观锁和乐观锁的区别

悲观锁:认为在修改数据库数据的这段时间里存在着也想修改此数据的事件;
乐观锁:认为在短暂的时间里不会有事件来修改此数据库的数据;
3.17 事件发生redo和undo的区别和过程

区别

Redo(重做)Undo(撤销)用来记载数据页的物理修改,确保事件提交后数据的一致性,并在体系崩溃时能够恢复数据到提交状态。用来记载事件中数据修改前的状态,以便在事件失败或需要回滚时,能够撤销事件所做的修改,恢复数据到修改前的状态。Redo过程

Undo过程

3.18 在事件未提交的情况下,数据库服务器重启,会发生什么

​        当体系提交了数据库DML指令,但未执行commit,体系宕机了。此时,数据库的数据不会改变,数据库连接会被清除,数据库事件也会被清除,也不会锁定数据
3.19 什么是MySQL的存储引擎,常见的存储引擎有哪些,innodb和myisam存储引擎的区别

​        MySQL数据库管理体系中负责存储和检索数据的组件,它们可以影响数据的存储方式、事件支持、并发性能等方面1MySQL中常见的存储引擎有MyISAM、InnoDB、Memory、Archive等23此中,InnoDB是MySQL的默认存储引擎,它提供了强大的事件处理、行级锁定和外键约束功能4MyISAM则不支持事件、行级锁和外键约束的功能
3.20 客户的数据库是myisam如何切换到innodb(大抵步骤)

​        如利用wp_comments表格。只需运行ALTER下令即可将其转换为InnoDB存储引擎。留意:我们始终建议在对MySQL数据库运行任何操作之前对其进行备份。
  1. ALTER TABLE wp_comments ENGINE=InnoDB;
复制代码
3.21 MySQL的日志都有哪些

比较紧张的还要属二进制日志 binlog(归档日志)和事件日志 redo log(重做日志)和 undo log(回滚日志)
3.22 什么是二进制日志binlog,它的作用是什么

是一种记载数据库中发生的更改的日志文件。 它记载了数据以及数据库结构的更改
它可以
3.23 二进制日志中row模式和statement模式的优缺点

3.24 慢查询日志分析(mysqldumpslow)

​        将mysql服务器中影响数据库性能的相关SQL语句记载到日志文件,通过对这些特殊的SQL语句分析,改进以达到提高数据库性能的目标
  1. $PATH/mysqldumpslow -s c -t 10 /application/mysql/data/slow.log
  2. #输出记录次数最多的10条SQL语句
复制代码
[!TIP]
  1. /application/mysql/data/slow.log 是慢查询日志路径
复制代码
3.25 MySQL的备份和恢复相关知识
  1. #数据库备份
  2. mysqldump -u root -p wordpress > wordpress_database.sql
  3. #数据库还原
  4. mysql > source /backup/mysqldump/wordpress_database.sql
复制代码
3.26 MySQL服务破坏,且没有备份的情况下,数据库服务如何恢复

在MySQL服务破坏且没有备份的情况下,数据库服务的恢复是一项具有挑衅性的使命。尽管无法完全保证恢复所有丢失的数据,但以下是一些可能的恢复步骤和策略:
1. 评估破坏程度

2. 尝试自动恢复

3. 利用二进制日志恢复

4. 利用第三方数据恢复工具

5. 寻求专业人士帮助

6. 预防措施

留意事项

3.27 MySQL主从架构原理


​        该过程的第一部门就是master记载二进制日志。在每个事件更新数据完成之前,master在二日志记载这些改变。即使事件中的语句都是交叉执行的,在事件写入二进制日志完成后,master关照存储引擎提交事件。
​        下一步就是slave将master的binary log拷贝到它自己的中继日志。起首,slave开始一个工作线程——I/O线程。I/O线程在master上打开一个普通的连接,然后开始binlog dump process。Binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件。I/O线程将这些事件写入中继日志。
​        SQL slave thread处理该过程的末了一步。SQL线程从中继日志读取事件,更新slave的数据,使其与master中的数据一致。只要该线程与I/O线程保持一致,中继日志通常会位于OS的缓存中,所以中继日志的开销很小。
3.28 MySQL主主架构原理

它包罗两个主数据库(Master),每个主数据库都可以处理读写哀求,而且互为主备。
根本原理:

3.29 MySQL双主架构一致性的问题

一、数据同步的时间差

二、并发写操作的数据冲突

3.30 主从架构存在的问题,解决思绪

3.31 主从复制,从库误操作写入数据怎么办(主从不同步,会导致SQL线程停止)

​        这种情况常发生于从库没有配置super_read_only=1,然后管理员错误地在从库增删了数据,导致从库与主库数据不一致。要解决这类问题,通常需要在从库执行反向操作,好比删掉这些错误新增的数据,通过手动的方式让主从数据恢复到之前一致状态。
第零步,停止主从复制
  1. mysql > stop slave
复制代码
第一步,查察出错的准确位置

​        执行show slave status下令查察从库状态,获取当前已应用到的binlog信息,紧张关注Last_Error中所提示的信息

第二步,确认位置

根据Last_Error中的报错信息获取具体出错的SQL
  1. show binlog events in 'mysql-bin.032102' from 730019106 limit 10;  #找到对应行,该行中Info信息就是1973位置所做操作
复制代码
第三步,回滚数据

定位出错误语句后只需要在从库执行反向操作处理这些数据即可,然后重新启动slave进程
第四步,开启从库
  1. mysql > start slave
复制代码
或者1~3步直接在从库中修改成原来的样子

3.32 主从复制,从库IO线程故障排查思绪

一、查抄根本连接信息

二、查察从库状态

3.33 主从复制中的延时从库,半同步复制,过滤复制利用场景

延时从库是指故意配置从库延迟肯定时间复制主库的数据。
半同步复制要求主库在事件提交前,至少有一个从库已经接收到并记载了该事件的binlog日志。
过滤复制答应用户机动指定哪些数据库或表需要被复制,哪些则不需要。
3.34 MySQL的MHA高可用架构的原理

3.35 如何部署MHA高可用架构


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4