赞
踩
目录
11.MYSQL 一主多从,主库宕机,如何合理切换到从库,其它从库如何处理?
18.mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
30.误操作drop语句导致数据库数据破坏,请给出恢复的实际大体步骤
RDBMS:- Mysql- MariaDB- Oracle- DB2- SQL ServerNosql:- Memcached- Redis- MongoDB- Neo4j- FlockDB
数据库是“按照数据结构来组织、存储和管理数据的仓库”。
MySQL数据库访问的执行过程
1)客户端发出请求。
2)服务器端开辟线程响应客户端请求。
3)客户端发起sql语句查询数据库。
4)服务器查询缓存:记录用户的sql查询语句,如果查询内容相同,直接从查询缓存回复。
5)如果缓存没有则进入分析器。
6)分析器:分析用户命令语法是否正确,将用户的命令进行切片,获得用户要查询的表、内容、用户的权限等。
7)优化器:执行路径的选择,生成执行树。(每个SQL语句都有很多执行路径,优化的目的就是在这些执行路径里选择最优的执行路径)。
8)存储引擎:用于管理存储的文件系统,不同的存储引擎有不同的功能和存储方式。
客户端写入数据时 ,slave 主机的 IO 线程读取 master 主机的 binlog 日志 , 并写入本机的 relaylog 中继 日志 ,SQL 线程执行 relaylog 日志线程的 SQL 命令
数值类型 ( 整型 ):int 、 tinyint 、 smallint 、 bigint 、 mediumint字符类型 :char 、 varchar日期时间类型 :datetime 、 timestamp浮点型 :float 、 double
原子性、一致性、隔离性、持久性原子性 : 事物的整个操作是一个整体 , 不可分割 , 要么全部成功 , 要么全部失败一致性 : 事务操作的前后 , 表中的记录没有变化隔离性 : 事务操作是相互隔离不受影响持久性 : 数据一旦提交 , 不可改变 , 永久改变表数据
(1NF) 中表的每一行只包含一个实例的信息 , 简而言之 , 第一范式就是无重复的列(2NF) 是在第一范式 (1NF) 的基础上建立起来的 , 机满足第二范式 (2NF) 必须先满足第一范式 (1NF), 要求实体的属性完全依赖于主关键字 . 简而言之 , 第二范式就是非主属性非部分依赖于主关键字(3NF) 必须先满足第二范式 (2NF), 要求一个数据库表中不包含已在其他表中已包含的非主关键字信息 . 简而言之 , 第三范式就是属性不依赖于其他非主属性
视图是虚拟的表 , 与包含数据的表不通 , 视图里只包含会使用时的动态检索数据的查询 ; 不包含任何 列或数据优点 :使用视图可以简化复杂的 sql 操作 , 隐藏具体的细节 , 保护数据 ; 视图创建后 , 可以使用与表相同的方式 利用他们
数据库优化通常从三方面考虑 :\1. 替换有问题的硬件主要原因是数据库会占用大量资源 , 不过解决方案也仅限于此\2. 对 MySQL 进程的设置进行优化适当分配内存 , 并让 mysqld 了解将会承受何种类型的负载\3. 对查询进行优化对表应用了适当的索引 . 还可以记录慢查询优化 MySQL 查询缓存用 EXPLAIN 使你的 SELECT 查询更加清晰:了解 MySQL 正在进行什么样的查询操作,这可以帮助你发现瓶颈的所在,并显示出查询或表结构在哪里出了问题EXPLAIN 查询的结果,可以告诉你那些索引正在被引用,表是如何被扫描和排序的等等尽量避免 SELECT * 命令1)sql 语句优化2) 索引优化3) 数据结构优化4) 服务运行参数优化5) 服务器硬件优化
错误日志、 binlog 日志、查询日志、慢查询日志、事务日志、中继日志
常见原因 :1)Master 负载过高2)Slave 负载过高3) 网络延迟4) 机器性能太低5)Mysql 配置不合理优化方法 :1) 优化网络2) 升级 Slave 硬件配置3) 分库,将一个主库拆分为多个主库,每个主库的写并发就减少了几倍,此时主从延迟可以忽略不计4) 打开 Mysql 支持的并行复制,多个库并行复制
1 )登陆所有从库查看 post 信息,使用 POST 最大的做为新的主库,然后将从为提升为新的主库, 登陆从库( 新的主库)执行 stop slave ,2 )修改 my.cnf 配置文件,开启 log-bin 并重新启动数据库服务,登陆数据库执行 restet master,show master status\G; 查看主库信息,最后创建授权同步用户与权限和网站使用数据库的用户与权限,同步所有机器的 /etc/hosts 文件(这时就体现了之前全网用域名则不是用 IP 的作用了,不然还得修改网站程序切换到新主库服务器 IP 上,否则无法连接到数据库);3 )登陆其它从库,执行 change master 操作,查看同步状态。
( 1 )如果主服务器出现问题,可以快速切换到从服务器提供的服务;( 2 )可以在从服务器上执行查询操作,降低主服务器的访问压力;( 3 )可以在从服务器上执行备份,以避免备份期间影响主服务器的服务。
port,datadir,socket,pid_fifile,log_errorport 端口号 datadir 数据库目录socket 锁定 socket 文件的路径和名称pid_fifile 进程 pid 号文件位置log_error 错误日志位置
热备 :innobackupex完全备份 :innobackupex --user 用户名 --password 密码 备份目录名 --no-timestamp完全恢复 :innobackupex --apply-log 目录名 # 准备恢复数据innobackupex --copy-back 目录名 # 恢复数据增量备份 :innobackupex --user 用户名 --password 密码 --incremental-basedir= 目录名 --notimestamp 增量恢复 :innobackupex --apply-log --redo-only 目录名 --incremental-dir= 目录名 # 准备恢复数据innobackupex --copy-back 目录名 # 恢复数据一款强大的在线热备工具备份过程性在线不锁表 , 适合生产环境冷备 :cp tar( 物理备份 ) mysqldump( 逻辑备份 )备份 :cp -r /var/lib/mysqltar -zcvf /root/mysql.tar.gz恢复 :cp -r 备份目录 /mysql.bak /var/lib/mysqltar -zxf /root/mysql.tar.gz -C /var/lib/mysqlvhown -R mysql.mysql /var/lib/mysql物理备份的缺点 :跨平台性差备份时间长、冗余备份、浪费存储空间mysqldump( 逻辑备份 )完全备份 : 备份所有数据增量备份 : 备份上次备份后 , 所有新产生的数据差异备份 : 本分完全备份后 , 所有新产生的数据完全备份 : mysqldump -uroot -p 密码 库名 > 目录 /xxx.sql完全恢复 :mysql -uroot -p 密码 [ 库名 ] < 目录 /xxx.sql效率低、备份和还原速度比较慢、锁表备份过程中 , 数据插入和更新操作被阻塞ps:mysqldump 在执行备份的时候会锁表 , 如果想让其备份时不锁表要加 --skip-opt 选项
myisam 存储引擎支持表级锁不支持事务、事务回滚、外键表文件 :表名 .frm > desc 表名 ;表名 .MYI 索引 index > show index from 表名 ;( 查找索引文件 )表名 .MYD 数据 > select * from 表名 ;innodb 存储引擎默认的存储引擎支持行级锁支持事务、事务回滚、外键表文件 :表名 .frm 表结构 > desc 表名 ;表名 .ibd 索引 index+ 数据 > show index from 表名 ;select * from 表名 ;事务日志文件/var/lib/mysql/ib_logfifile0/var/lib/mysql/ib_logfifile1
mysql 的 innodb 如何定位锁问题 : 在使用 show engine innodb status 检查引擎状态时,发现了死 锁问题在 5.5 中, information_schema 库中增加了三个关于锁的表( MEMORY 引擎) innodb_trx## 当前运行的所有事务 innodb_locks ## 当前出现的锁 innodb_lock_waits ## 锁等待的对应关 系mysql 如何减少主从复制延迟 :如果延迟比较大,就先确认以下几个因素:从库硬件比主库差,导致复制延迟 主从复制单线程,如果主库写并发太大,来不及传送到从库就会导致延迟。更高版本的 mysql 可以支持多线程复制慢 SQL 语句过多网络延迟master 负载,主库读写压力大,导致复制延迟,架构的前端要加 buffffer 及缓存层slave 负载,一般的做法是,使用多台 slave 来分摊读请求,再从这些 slave 中取一台专用的服务 器,只作为备份用,不进行其他任何操作 . 另外, 2 个可以减少延迟的参数 :–slave-nettimeout=seconds 单位为秒 默认设置为 3600 秒参数含义:当 slave 从主数据库读取 log 数据失败后,等待多久重新建立连接并获取数据–master-connect-retry=seconds 单位为秒 默认设置为 60 秒参数含义:当重新建立主从连接时,如果连接建立失败,间隔多久后重试通常配置以上 2 个参数可以减少网络问题导致的主从数据同步延迟MySQL 数据库主从同步延迟解决方案最简单的减少 slave 同步延时的方案就是在架构上做优化,尽量让主库的 DDL 快速执行,还有就是主库是写,对数据安全性较高,比如 sync_binlog=1 , innodb_flflush_log_at_trx_commit= 1 之类的设置,而 slave 则不需要这么高的数据安全,完全可以讲 sync_binlog 设置为 0 或者关闭 binlog ,innodb_flflushlog 也可以设置为 0 来提高 sql 的执行效率。另外就是使用比主库更好的硬件设备作为 slave
1.性能卓越,服务8稳定,很少出现异常宕机。
2.开放源代码并且没有版权的限制,自主传播,使用成本低。
3.历史悠久,社区及用户非常活跃,遇到问题很快可以获取帮助。
4.软件体积小安装简单,并且易于维护,安装及维护的成本低。
5.支持多种操作系统,提供 API接口。
6.品牌效应,使得企业无需考虑就直接使用
一、 在已知 MYSQL 数据库的 ROOT 用户密码的情况下,修改密码的方法:1 、 在 SHELL 环境下,使用 mysqladmin 命令设置: mysqladmin –u root –p password “ 新密码 ”回车后要求输入旧密码2 、 在 mysql> 环境中 , 使用 update 命令,直接更新 mysql 库 user 表的数据:Update mysql.user set password=password(‘ 新密码 ’) where user=’root’; flflush privileges; 注 意: mysql 语句要以分号 ” ; ” 结束3 、 在 mysql> 环境中,使用 grant 命令,修改 root 用户的授权权限。grant all on . to root@’localhost’ identifified by ‘ 新密码 ’ ;二、 如查忘记了 mysql 数据库的 ROOT 用户的密码,又如何做呢?方法如下:1 、 关闭当前运行的 mysqld 服务程序: service mysqld stop (要先将 mysqld 添加为系统服务)2 、 使用 mysqld_safe 脚本以安全模式(不加载授权表)启动 mysqld 服务/usr/local/mysql/bin/mysqld_safe –skip-grant-table &3 、 使用空密码的 root 用户登录数据库,重新设置 ROOT 用户的密码 # mysql -u root Mysql>Update mysql.user set password=password(‘ 新密码 ’) where user=’root’; Mysql> flflushprivileges;
mysqldump 工具mysqldump 是 mysql 自带的备份工具,目录在 bin 目录下面: /usr/local/mysql/bin/mysqldump ,支持基于 innodb 的热备份,但是由于是逻辑备份,所以 速度不是很快,适合备份数据比较小的场景, Mysqldump 完全备份 + 二进制日志可以实现基于时 间点的恢复。基于 LVM 快照备份在物理备份中,有基于文件系统的物理备份( LVM 的快照),也可以直接用 tar 之类的命令对整个 数据库目录进行打包备份,但是这些只能进行泠备份,不同的存储引擎备份的也不一样, myisam 自动备份到表级别而 innodb 不开启独立表空间的话只能备份整个数据库。tar 包备份percona 提供的 xtrabackup 工具,支持 innodb 的物理热备份,支持完全备份,增量备份,而且速 度非常快,支持 innodb 存储引起的数据在不同,数据库之间迁移,支持复制模式下的从机备份恢 复备份恢复,为了让 xtrabackup 支持更多的功能扩展,可以设立独立表空间,打开innodb_fifile_per_table 功能,启用之后可以支持单独的表备份
mysqlbinlog [ 选项 ] binlog 日志文件名 | mysql -u 用户名 -p 密码
一个表只能有一个主键字段的值不允许重复且不允许赋 null 值多个字段做主键称为复合主键
TRUNCA 和 DELETE 只能删除数据 , 而 DROP 则删除整个表 ( 结构和数据 )1)DELETE 删除操作作为事务记录在日志中保存一遍进行回滚操作2)TRUNCATE TABLE 则一次性从表中删除所有的数据并不把单独的删除记录计入日志保存 , 删除行 是不能恢复的 , 并且在删除的过程中不会激活与表有关的删除触发器 , 执行速度快3) 表和索引所占空间 , 档表被 TRUNCATE 后 , 这个表和索引所占的空间会恢复到出事大小 , 而 DELETE 操作不会减少表或索引所占用的空间 ,drop 语句将表所占用的空间完全释放
Statement: 每一条会修改数据的 sql 都会记录在 binlog 中Row: 不记录 sql 语句上下文相关信息 , 仅保存哪条记录被修改Mixdlever: 是以上两种的混合使用
-u -p -P-u 指定用户名-p ( 小写 p) 指定密码-P ( 大写 P) 指定端口号
slow-query-log 、 slow-query-log-fifile 、 long-query-timeslow-query-log: 启用慢查询日志slow-query-log-fifile: 定义慢查询日志名称long-query-time: 指定超时时间
两者唯一的区别是触发器不能使用 EXECUTE 语句使用 , 而是在用户执行 Transact-SQL 语句时自动触 发 ( 激活 ) 执行 , 触发器是在一个修改了指定表中的数据时执行的存储过程 , 触发器主要是通过事件执 行触发而被执行的 , 而存储过程可以通过存储过程名称名字而直接调用
函数 : 只能返回一个变量的限制 存储过程 : 可以返回多个变量的限制函数是可以嵌入在 sql 中使用的 , 可以在 select 中调用 , 而存储过程不行存储过程可以返回参数 , 函数只能返回值或者表对象存储过程一般是作为一个独立的部分来执行 , 二函数可以作为查询语句的一个部分来调用
所有数据恢复的基础都在于备份,必须要有完整的备份,否则恢复无从谈起,误操作导致的数据 库破坏需要使用增量恢复的方法进行恢复数据库,具体步骤如下:1 )查看备份与 binlog 文件2 )刷新并备份 binlog 文件mysqladmin -uroot -pmysql123 -S /data/mysql.sockflflush-logs3 )将 binlog 文件恢复成 sql 语句mysqlbinlog –no-defaults mysql-bin.000061 mysql-bin.000062 >bin.sql4 )将其中误操作的语句删除(就是 drop 的动作)5 )解压全备文件,恢复全备文件gzip -d mysql_backup_2016-10-12.sql.gzmysql -uroot -pmysql123 -S/data/3306/mysql.sock < mysql_backup_2016-10-12.sql如果有对表的操作,恢复数据时需要接表名6 )恢复误操作前的 binlog 文件记录的 sql 语句mysql -uroot -pmysql123 -S/data/3306/mysql.sock < bin.sql最后登陆数据库,查看数据是否恢复成功,如果有确定的误操作时间,就直接恢复这段时间的数 据即可。
普通索引:就是单个列作为索引。如 indexname(a)复合索引:就是由多个列组成的索引,如 indexname(a,b,c) ,复合索引遵循最左匹配原则。
1 )完全备份每次对数据进行完整的备份,完全备份是增量备份的基础,完全备份保存的是备份完成时刻的数 据库优点:安全性高缺点:冗余数据太多,空间利用率低2 )差异备份备份那些自从上次完全备份之后被修改过的文件优点:相比完全备份,降低了冗余数据,提高了空间利用率,安全性差于完全备份缺点:仍旧存在冗余数据存在3 )增量备份只有那些在上次完全备份或者增量备份后被修改的文件才会被备份增量备份就是备份自上一次备份之后增加或变化的文件或者内容优点:没有冗余数据,效率最高,空间利用率最大化缺点:安全性降低了
热备份的优点:
可在表空间或数据文件级备份,备份时间短。
备份时数据库仍可使用。
可达到秒级恢复(恢复到某一时间点上)。
可对几乎所有数据库实体作恢复。
恢复是快速的,在大多数情况下在数据库仍工作时恢复。
热备份的不足
不能出错,否则后果严重。
若热备份不成功,所得结果不可用于时间点的恢复。
因难于维护,所以要特别仔细小心,不允许“以失败而告终”。
什么是冷备份?
我们将在线的备份称为热备份,而相对的,将脱机数据备份称为冷备份。冷备份是定时将数据备份至备份服务器或目标硬件,在服务器动作完成后,保持相同状态,在一台服务器出现问题时可由另一台直接提供服务,出现故障时不会自动接管,需手动开启硬件和服务,保证工作的连续性和数据完整性。
冷备份的优点
1、 是非常快速的备份方法(只需拷文件)
2、 容易归档(简单拷贝即可)
3、 容易恢复到某个时间点上(只需将文件再拷贝回去)
4、 能与归档方法相结合,做数据库“最佳状态”的恢复。
5、 低度维护,高度安全。
冷备份的不足
1、 单独使用时,只能提供到“某一时间点上”的恢复。
2、 再实施备份的全过程中,数据库必须要作备份而不能作其他工作。也就是说,在冷备份过程中,数据库必须是关闭状态。
3、 若磁盘空间有限,只能拷贝到磁带等其他外部存储设备上,速度会很慢。
4、 不能按表或按用户恢复。
索引的数据结构和具体存储引擎的实现有关 , 在 MySQL 中使用较多的索引有 Hash 索引, B+ 树索引等 , 而我们经常使用的 InnoDB 存储引擎的默认索引实现为 :B+ 树索引
1 ) DDL 数据定义语言 如: create 、 alter 、 drop2 ) DML 数据操作语言 如: insert 、 update 、 delete3 ) DCL 数据控制语言 如: grant 、 revoke4 ) DTL 数据事物语言 如: commit 、 rollback 、 savepoint
物理备份:物理备份是磁盘块为基本单位将数据从主机复制到备机。物理备份就是备份数据文件了,比较形象点就是 cp 下数据文件,但真正备份的时候自然不是的 cp 这么简单。(物理备份又分两种 一种冷备份一种热备份),物理备份恢复速度比较快,占用空间比较大。逻辑备份:逻辑备份是以文件为基本单位将数据从主机复制到备机。将数据导出至文本文件中;mysqldump 是采用 SQL 级别的备份机制,他将数据表导成 SQL 脚本文件,是最常用的逻辑备份方法。逻辑备份速度比较慢,占用空间比较小。逻辑备份的恢复成本高。
差异备份的定义:备份自上一次完全备份之后有变化的数据。增量备份的定义:备份自上一次备份(包含完全备份、差异备份、增量备份)之后有变化的数据。增量备份和差异备份的区别:完全备份:备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。差异备份:差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。增量备份:增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。)不同备份类型可以存在一定组合,参考示例如下:完全备份和差异备份:在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较少的时间,但还原数据使用较少的时间。完全备份和增量备份:在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较少的时间,但还原数据使用较多的时间。
完全备份是指对整个系统或用户指定的所有文件数据进行一次全面的备份。增量备份只是备份相 对于上一次备份操作以来新创建或者更新过的数据。差异备份即备份上一次完全备份后产生和更新的所有新的数据。恢复速度完全备份最快,增量备份最慢,差异备份介于两者之间。因此由慢 到快依次为增量备份、差异备份和完全备份。
MYSQL 读写分离,基本的原理是让主数据库( master )处理事务性增、改、删操作( INSERT 、 UPDATE 、 DELETE ),而从数据库( slave )处理 SELECT 查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。从介绍可以看出 MYSQL 的读写分离可以减少数据库压 力,提高性能。1. 增加冗余2. 增加了机器的处理能力3. 对于读操作为主的应用,使用读写分离是最好的场景,因为可以确保写的服务器压力更小,而读又可以接受点时间上的延迟
maxscale是mariadb公司开发的一套数据库中间件,可以很方便的实现读写分离方案;并且提供了读写分离的负载均衡和高可用性保障。
mycat:也具有数据读写分离的功能
过程概述:
(1)配置好集群环境
(2)下载安装 MaxScale
(3)配置 MaxScale,添加各数据库信息
(4)启动 MaxScale,查看是否正确连接数据库
(5)客户端连接 MaxScale,进行测试
首先使用 top 命令查看是不是 mysql 的 CPU 占用过高查询原因,可能的原因:1 )一般情况下, mysql 占用过高多是有慢查询2 )执行查询 show processlist; 显示当前运行的线程,找到那个经常出现的 SQL 语句解决:1 )打开慢查询日志,这里可以加上慢查询日志,然后重启 mysql ,等待日志。 slow-query-log=1# 慢查询:确认开启slow-query-log-fifile='/var/www/htmllog/slowlog.log' # 慢查询:日志文件及路径long_query_time = 3 # 慢查询:指定超过 3s 仍未完成的语句,为执行过慢的语句2 )将这条语句建立索引例如此语句为 select conut(*) from xxx where a=1 and b != 2 and objuid=?那么我们将要根据 objuid 建立前缀索引: alter table xxx add index objuid(objuid)
1 )内连接查询 inner join关键字: inner join on语句: select * from a_table a inner join b_table b on a.a_id = b.b_id;说明:组合两个表中的记录,返回关联字段相符的记录,也就是返回两个表的交集(阴影)部分2 )左连接查询 left join 关键字: left join on / left outer join on语句: SELECT * FROM a_table a left join b_table b ON a.a_id = b.b_id;说明: left join 是 left outer join 的简写,它的全称是左外连接,是外连接中的一种。 左 ( 外 ) 连接,左表 (a_table) 的记录将会全部表示出来,而右表 (b_table) 只会显示符合搜索条件的记录。右表记录不足的地方均为 NULL 。3 )右连接 right join关键字: right join on / right outer join on语句: SELECT * FROM a_table a right outer join b_table b on a.a_id = b.b_id;说明: right join 是 right outer join 的简写,它的全称是右外连接,是外连接中的一种。与左 ( 外 ) 连接相反,右 ( 外 ) 连接,左表 (a_table) 只会显示符合搜索条件的记录,而右表 (b_table) 的记录将会 全部表示出来。左表记录不足的地方均为 NULL 。4 )全连接 union关键字: union /union all语句: (select colum1,colum2...columN from tableA ) union (select colum1,colum2...columNfrom tableB ) 或 (select colum1,colum2...columN from tableA ) union all (selectcolum1,colum2...columN from tableB ) ;union 语句注意事项:1.通过 union 连接的 SQL 它们分别单独取出的列数必须相同;2.不要求合并的表列名称相同时,以第一个 sql 表列名为准;3.使用 union 时,完全相等的行,将会被合并,由于合并比较耗时,一般不直接使用 union 进行合并,而是通常采用union all 进行合并;4. 被 union 连接的 sql 子句,单个子句中不用写 order by ,因为不会有排序的效果。但可以对最终的结果集进行排序;(select id,name from A order by id) union all (select id,name from B order by id); // 没有排序效果(select id,name from A ) union all (select id,name from B ) order by id; // 有排序效果
1 )冷迁移,实际是关机迁移冷迁移的应用场景主要是当虚拟机之下的物理机故障时,通过共享存储中的客户操作系统及数据在另一台物理机主机中将业务进行重新加载。另一种场景是需要进行定期的可高性要求不高的运 维,关闭虚拟机,并将不同物理主机上存储的虚拟机文件 copy 到另一个物理主机中进行虚机重新加载。该场景的好处是操作简单,一般是自动化操作。在公有云中,大量采用该模式实现主机业务的可靠性。但缺点也很明显,该迁移方式不支持内存数据的保存,会导致内存数据的丢失2 )热迁移,实际是将内存数据与硬盘数据同步迁移热迁移的应用场景主要是: 1 、硬件或系统的主动升级但又不希望中断虚机上的重要业务 2 、某台物理机的负载太重,进行主动的虚拟机迁移 热迁移的好处是对用户业务的非常小,中断时间可到 ms 级, ping 一般中断在 2-6 个包中断;用户内存数据进行了迁移,对业务应用无感知。坏处是迁移过程不可中断,操作复杂。因热迁移主要场景是服务商后端运维使用,因此在公有云中一般不提供热迁移功能
使用 mysqldump 备份数据库时会默认锁表,加上 --skip-opt 选项会默认不锁表,再加上 --singletransaction 会加上事务,不会锁表在用 mysqldump 备份使用那些参数选项是最完美的组合呢?--skip-opt--create-options ---- 添加 create 相关的选项--single-transaction ---- 一致性备份-q ---- 采用快速的 dump 方式 ( 提高导出性能 )-e ---- 采用多重 insert 语句形式 ( 提高还原性能 ) ,当一个表的数据量很大情况下不知道会不会导致死锁?--no-autocommit ---- 采用批量提交方式 ( 提高还原性能 )-R ---- 导出存储过程,函数,和触发器--master-data=2 ---- 如果有写 log-bin 且版本为 5.0 以上的版本,则再加上 --master-data=2--events ---- 如果是 5.1 以上的版本使用,包含事件
MySQL 常见的三种存储引擎为 InnoDB 、 MyISAM 和 MEMORY 。其区别体现在事务安全、存储限制、空间使用、内存使用、插入数据的速度和对外键的支持1 、事务安全InnoDB 支持事务安全 ,MyISAM 和 MEMORY 两个不支持。2 、储存限制InnoDB 有 64TB 的存储限制, MyISAM 和 MEMORY 要是具体情况而3 、空间使用InnoDB 对空间使用程度较高, MyISAM 和 MEMORY 对空间使用程度较低。4 、内存使用InnoDB 和 MEMORY 对内存使用程度较高, MyISAM 对内存使用程度较低。5 、插入数据的速度:InnoDB 插入数据的速度较低, MyISAM 和 MEMORY 插入数据的速度较高。6 、对外键的支持:InnoDB 对外键支持情况较好, MyISAM 和 MEMORY 两个不支持外键
使用in-place upgrade方式,将MySQL5.6升级到MySQL5.7:
升级前的准备:备份+留意新版本的变更内容
1、对5.7的软件包,下载,解压
2、关闭当前MySQL(5.6)
3、替换二进制文件(5.7 替换 5.6)
\# cd /usr/local
\# mv mysql mysql5.6
\# mv mysql5.7 mysql
4、使用现有的数据目录启动MySQL
5、检查所有表是否与当前版本兼容,并更新系统库
6、重启,确保对系统表所做的变更得以生效
需要两个服务器数据库版本相同才可迁移
1:单个或多个数据库
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 --databases 单个或多个数据库名称空格分开 | mysql -h127.0.0.1 -uroot -p -P3306
执行后输入本地数据库密码即可
2:所有数据库
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 --all-databases | mysql -h127.0.0.1 -uroot -p -P3306
3:某库某表
mysqldump -h远程ip -u用户 -p密码 -P3306 --default-character-set=utf8 dbname table1 table2…… | mysql -h127.0.0.1 -uroot -p -P3306
FTP 协议有两种工作方式: PORT 方式和 PASV 方式,中文意思为主动式和被动式。PORT (主动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21 )发送连接请求,服务 器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用 PORT 命令告诉服务器:“ 我打开了 XX 端口,你过来连接我 ” 。于是服务器从 20 端口向客户端的 XX 端口发送连接请求,建立一条数据链路来传送数据。PASV (被动)方式的连接过程是:客户端向服务器的 FTP 端口(默认是 21 )发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用 PASV 命令告诉客户端:“ 我打开了 XX 端口,你过来连接我 ” 。于是客户端向服务器的 XX 端口发送连接请求,建立一条数据链路来传送数据。从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完 全不同。
CMDB : CMDB 是所有运维工具的数据基础, CMDB 全称 Confifiguration Management Database1 , CMDB 包含的功能:1 :用户管理,记录测试,开发,运维人员的用户表2 :业务线管理,需要记录业务的详情3 :项目管理,指定此项目需属于那条业务线,以及项目详情4 :应用管理,指定此应用的开发人员,属于哪个项目,和代码地址,部署目录,部署集群,依赖的应用,软件等信息。5 :主机管理,包括云主机,物理机,主机属于哪个集群,运行着哪些软件,主机管理员,连接着哪些网络设备,云主机的资源地,存储等相关信息。6 :主机变更管理,主机的一些信息变更,例如管理员,所属集群等信息更改,连接的网络变更等。7 :网络设备管理,主要记录网络设备的详细信息,及网络设备连接的上级设备8 : IP 管理, IP 属于哪个主机,哪个网段,是否被占用等2 , CMDB 实现的四种方式:方式一: Agent 方式可以将服务器上面的 Agent 程序作定时任务,定时将资产信息提交到指定 API 录入数据库,本质就 是在各个服务器上执行 subprocess.getoutput(" 命令 "), 然后将每台机器上执行的结果返回给主句API ,然后主机 API 收到这些数据之后,放到数据库中,最终通过 web 界面展现给用户。优点:速度快缺点:需要为每台服务器部署有关 Agent 程序使用场景:服务器比较多的时候方式二: ssh 类实现方式(基于 paramiko 模块) 中控机通过 Paramiko ( py 模块)登录到各个服务器上,然后执行命令的方式去获取各个服务器上的信息。优点:没有 Agent缺点:有一个中控机,速度慢使用场景:服务器比较少的时候方式三: salt-stack 方式此方案本质上和第二种方案是差不多的流程,中控机发送命令给服务器执行。服务器将结果放入另一个队列中,中控机获取将服务信息发送到 API 进而录入到数据库。优点:速度快,开发成本低缺点:依赖于第三方工具使用场景:已经使用 salt-stack 软件
Redis:远程字典服务器,分布式内存数据库.支持数据持久化.
Redis:后端缓存数据库,其特点是接收数据,返回数据快,因为其是单线程,而且是纯内存结构,存储的是数据快照
工作原理:当客户端发送一个访问请求的时候,先经过redis服务器,redis服务器会查询本机的数据缓存中看是否有客户端请求的数据,如果有就直接本机将结果返回给客户端,没有的话就将请求转发给后端的数据库服务器或者是外网的服务器,然后将收集的数据结果返还给客户端,自己也保存一份数据快照作为缓存.
52.简述redis支持的数据类型
字符类型:string
列表类型:list
Hash表类型:hash
集合类型:set
有序集合类型:zset
53.如何优化redis服务?
1)Master最好不要做任何持久化工作
2)如果数据比较重要,某个slave开启AOF备份数据,策略设置为每秒同步一次
3)为了主从复制的速度和连接的稳定性,Master和slave最好在同一局域网内
4)尽量避免在压力很大的主库上增加从库
54.redis有哪些好处?
1)速度快,因为数据存在内存中
2)支持丰富的数据类型,支持string、list、set、sorted、set、hash
3)支持事务,操作都是原子性,所谓的原子性就是对数据的更改要么全部执行,要么全部不执行
4)丰富的特性:可用于缓存消息,按key设置过期时间,过期后会自动删除
55.redis数据持久化的2种方式是什么?
RDB:全部Redis DataBase 按照指定的时间间隔,将内存中的数据集快照写入硬盘
AOF:全部Append Only File 记录redis服务所有写操作不断的将新的写操作追加到文件的末尾
56.redis和memcache的区别
1)redis和memcache都是将数据存放在内存数据库,但memcache还可以用于缓存其他图片视频等
2)redis不仅支持简单的key:value类型数据,还提供list,set,hash等数据结构的存储
3)虚拟内存,redis当物理内存用完时,可以将一些很久没用到的value交换到磁盘
4)过期策略,memcache在set时就指定,例如set key 1 0 0 8,即永不过期,redis可以通过expire设定,例如expire name 10;
5)分布式,设定memcache集群,可以利用magent做一主多从,redis可以修改配置文件,以及slave on 设置一主多从
6)存储数据安全,memcache挂掉后,数据就没了.redis有数据的持久化RBD和AOF
7)灾难恢复,memcache挂掉后,数据不可恢复.redis数据丢失后可以通过AOF来进行恢复
8)redis支持master-slave模式数据的备份
9)应用场景,redis除了作为Nosql数据库外,还可以做消息队列,数据缓存等.memcache适合于缓存 sql语句,数据集,用户的临时性数据,延迟查询数据和Session等
57.redis服务数据清除策略
Noeviction 不删除
allkeys-lru 从所有key中情绪使用频率最少的key
volatile-lru 最近最少使用(针对设置了TTL的key)
allkeys-random 随机移除key
volatile-random 在设置了TTL的key里随机移除
volatile-ttl 移除最近过期的key
allkeys-lfu 从所有的key中清除使用频率最少的keyvolatile-lfu 从所有key中清除使用频率最少的key
58.为什么redis需要把所有数据放到内存中?
Redis为了达到最快的读写速度将数据都读到内存中,并通过异步的方式将数据写入磁盘。所以redis具有快速和数据持久化的特征。如果不将数据放在内存中,磁盘I/O速度为严重影响redis的性能。在内存越来越便宜的今天,redis将会越来越受欢迎。如果设置了最大使用的内存,则数据已有记录数达到内存限值后不能继续插入新值。
59.Redis 的同步机制
Redis 可以使用主从同步,从从同步。
第一次同步时,主节点做一次 bgsave,并同时将后续修改操作记录到内存 buffffffffer,待完成后将rdb 文件全量同步到复制节点,复制节点接受完成后将 rdb 镜像加载到内存。
加载完成后,再通知主节点将期间修改的操作记录同步到复制节点进行重放就完成了同步过程。
60.Redis 常见性能问题和解决方案
1. Master 最好不要写内存快照,如果 Master 写内存快照,save 命令调度 rdbSave函数,会
阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务
2. 如果数据比较重要,某个 Slave 开启 AOF 备份数据,策略设置为每秒同步
3. 为了主从复制的速度和连接的稳定性,Master 和 Slave 最好在同一个局域网
4. 尽量避免在压力很大的主库上增加从
5. 主从复制不要用图状结构,用单向链表结构更为稳定,即:Master <- Slave1<- Slave2 <-
Slave3…
这样的结构方便解决单点故障问题,实现 Slave 对 Master的替换。如果 Master 挂了,可以
立刻启用 Slave1 做 Master,其他不变。
61.redis主从复制的作用
数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务,分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量
读写分离:可以用于实现读写分离,主库写、从库读,读写分离不仅可以提高服务器的负载能力,同时可根据需求的变化,改变从库的数量;
高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础
62.hash槽的概念
Redis 集群中内置了 16384 个哈希槽,当需要在 Redis 集群中放置一个 key-value时,redis 先对key 使用 crc16 算法算出一个结果,然后把结果对 16384 求余数,这样每个 key 都会对应一个编号在 0-16383 之间的哈希槽,redis 会根据节点数量大致均等的将哈希槽映射到不同的节点
63.redis在什么情况下不能存储数据
找不到hash槽、集群没有做从服务器
64.redis的save和bgsave的区别
SAVE和BGSAVE两个命令都会调用rdbSave函数,但它们调用的方式各有不同:
SAVE直接调用rdbSave,阻塞Redis主进程,直到保存完成为止。在主进程阻塞期间,服务器不能处理客户端的任何请求。
BGSAVE则fork出一个子进程,子进程负责调用rdbSave,并在保存完成之后向主进程发送信号,通知保存已完成。Redis服务器在BGSAVE执行期间仍然可以继续处理客户端的请求。
65.Redis哈希槽的概念?
Redis 集群没有使用一致性hash,而是引入了哈希槽的概念,Redis集群有16384 个哈希槽,每个
key通过CRC16校验后对16384取模来决定放置哪个槽,集群的每个节点负责一部分hash槽。
监视master服务器,当master服务器宕机会自动将slave服务器升级为master服务器
哨兵功能还有监视、事件通知、配置功能。以下是哨兵的功能列表:
监控:不间断的检查主从服务是否如预期一样正常工作
事件通知:对被监视的redis实例的异常,能通知系统管理员,或者以API接口通知其他应用程序。
缓存雪崩,缓存击穿:缓存在同一时间内大量key过期的同时,又有大量数据访问后端服务器,造成数据库服务器负载过高,这里用互斥锁解决;缓存击穿,用户自己模拟请求很多缓存中不存在的数据,大量请求直接落在数据库上,导致数据库异常,也是用互斥锁解决
68.mycat的工作原理
MyCat是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
枚举法,求模法,固定分片等
分片的工作过程:解析SQL命令涉及的表,对比表的分片规则,然后将SQL命令发往对应的数据库的表中去执行,最后收集和处理所有分片结果数据,返回给客户端
概念:将存放在一台数据库服务器中的数据,按特定的方式拆分,分散存储到多台数据库服务器中,达到缓解单台服务器负载的效果。
mtcat软件:基于Java开发的分布式数据系统中间件,为高并发环境的分布式存储提供解决方案,适合数据大量写入存储
71.pxc数据库集群服务软件特点:
1)数据强一致性,无同步延迟
2)没有主从切换操作,无需使用虚拟IP
3)支持InnoDBc存储引擎
4)多线程复制
5)部署简单
6)支持节点自动加入,无需手动拷贝数据
72.MHA和PXC的优缺点
优点:1.数据强一致性,无同步延迟
2.没有主从切换操作,无虚拟IP
3.多线程复制,不熟使用简单
4.支持节点自动加入,无需手动复制数据
缺点:性能损耗较大,大事务可能卡住整个集群,因为PXC的数据强一致性,同一事务会在整个集群每一台机器上执行,数据全冗余
MHA优点:同一管理节点,可以管理多个集群,能够实现故障自动切换(通常20~30秒),实现数据库高可用
缺点:1.搭建比较麻烦
2.需要编写脚本或第三方工具来实现Vip的配置
3.MHA只会对主数据库进行监控
73.请描述下列命令在配置MHA集群时的作用?
masterha_check_status 、 masterha_check_ssh 、 masterha_check_repl 、
masterha_manager
masterha_check_status 检查mha服务状态
masterha_check_ssh 检查ssh配置
masterha_check_repl 检查主从同步配置
masterha_manager 启动mha服务
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。