mysql基础能做运维吗_MySQL的基础运维

面对一台陌生的MySQL服务器,首先就是要确认MySQL实例的部署结构和各个实力的运行环境:

1.有多少个实例?

2.MySQL的安装目录?

3.MySQL的数据目录?

4.参数文件的路径?

所有信息都可以通过#ps -ef | grep mysqld得到

125ba58dde9eeb0709abc665c351853a.png

MySQL的参数文件:

MySQL的参数文件以my.cnf命名,默认路径为/etc/my.cnf,可以手动指定路径进行加载。

MySQL初始化时创建参数文件指定规格的文件结构。

MySQL启动时,根据参数文件生成实例(没有参数文件则以默认参数启动实例),修改参数文件需要重启实例生效。

MySQL参数文件分为两个部分:client部分和server部分。在不同的标签中编辑。

指定参数文件进行加载:

mysqld_safe --defaults-file=$my.cnf & //$my.cnf 为参数文件的路径。

需要注意的是,MySQL有默认的参数文件寻找路径,需要确保使用的参数文件只有一个,这种方式可以保证MySQL总是以正确的参数文件进行加载。

参数可以分为动态参数和静态参数,所谓动态参数就是指可以在MySQL实例运行过程中进行修改。而静态参数指的是在整个实例的生命期内,该类参数只读,只能通过参数文件修改或者启动命令行选项指定该参数的值。

参数的有效级别:

session,参数修改在当前会话生效。 global,参数修改在整个实例的生命周期生效。

MySQL的物理文件结构:

4d92f17de79a4d84cd19de44093d7c00.png

MySQL物理文件结构-Table

MyISAM Table:

.frm文件:存放MyISAM表的结构定义

.MYD文件:存储myisam表的数据

.MYI文件:存储myisam表的索引相关信息

InnoDB Table:

.frm文件:存放InnoDB存储引擎的表结构定义

.ibd文件:独享表空间存储方式下,.ibd文件存储InnoDB的表数据和索引数据

ibdata文件:共享表空间存储方式下,所有InnoDB表的表数据与索引数据全部存储在一个ibdata文件中

92ed40c149d33b1566f422d87bd390e1.png

MyISAM与InnoDB的区别:

InnoDB支持事务,MyISAM不支持,对于InnoDB每一条SQL语言都默认封装成事务,自动提交,这样会很影响速度,所以处理这种情况最好把多条SQL放在begin和commit之间,组成一个事务。

InnoDB支持外键,而MyISAM不支持。对于一个包含外键的InnoDB表转换为MyISAM时会失败。

InnoDB是聚集索引,使用B+Tree作为索引结构,数据文件是和(主键)索引绑在一起的(表数据文件本身就是按B+Tree组织的一个索引结构),必须要有主键,通过主键索引效率很高。但是辅助索引需要两次查询,先查询到主键,然后再通过主键查询到数据。

MyISAM是非聚集索引,也是使用B+Tree作为索引结构,索引和数据文件是分离的,索引保存的是数据文件的指针。主键索引和辅助索引应该是独立的。InnoDB的B+树主键索引的叶子节点就是数据文件,辅助索引的叶子节点是主键的值。而MyISAM的B+树主键索引和辅助索引的叶子节点都是数据文件的地址指针。

MySQL物理文件结构-日志

logfile文件

InnoDB引擎默认开启,对数据库DML操作的物理记录,保证食物的持久性。

logfile也称为redolog(重做日志),MySQL中的物理日志主要有以下作用:

快速提交,支持脏块,崩溃恢复。

由于没有归档机制,故不支持介质恢复

bb201f267fbbba5d40b4694029e5e2ad.png

binlog 文件

所有引擎支持,对数据库DML操作进行逻辑记录,可用来进行介质恢复。

开启方式:

1)参数文件通过参数log-bin指定binlog的路径和文件名前缀。

2)通过log-bin-index指定索引文件的路径以及文件名前缀。

log-bin=/home/my3301/log/mysql-bin

log-bin-index=/home/my3301/log/mysql-bin.index

de0de6549240201c9c67c83ebd17ee91.png

binlog 文件可以通过mysqlbinlog工具进行解析。通过mysqlbinlog --help获取命令帮助。

slowlog 文件

记录MySQL数据库的慢查询语句,当SQL执行时间超过一定阈值进行记录。

开启方式:

1)参数文件中通过设置slow_query_log参数为1开启慢日志。

2)通过slow_query_log_file参数指定慢日志路径以及文件名。

3)通过参数long_query_time设置慢查询阈值时间。例如,slow_query_log_file=/home/my3301/log/slow.log

long_query_time=1

slow_query_log=1

1d4cb8bd4b0acb661570f819aa610f5a.png

慢日志可通过格式化工具mysqkdumpslow查看,mysqldumpslow -s t按平均执行时间进行排序,mysqldumpslow -s r 按平均返回行数进行排序。

error log文件:

MySQL server 的错误日志文件,对mysql的启动、运行、关闭过程进行记录。

不仅记录了所有的错误信息,也记录了一些警告信息或一些正确的信息

命令行查看error log路径 select @@log_error

参数文件通过log-error参数指定error log的路径及文件名

general log 查询日志

记录所有的sql语句,默认不开启

执行的sql不论成功还是失败都会被记录

807cd5b79c3421c944261536c32fa481.png

PID文件:

进程使用PID文件标识自己的存在,重复启动时根据这个文件来判断是否已经启用进程。

查看PID文件路径 select @@pid_file

socket 文件:

本机进程与MySQL进程进行通信的载体,使用unix domain socket协议

查看socket文件路径:select @@pid_file;

ibdata 文件:

MySQL数据库实例初始化时根据参数innodb_data_file_path创建

innodb引擎使用共享表空间时,ibdata文件用于存储表数据以及索引数据

undo段,double wrote等都是使用ibdata文件作为物理存储

MySQL常用管理工具

mysql:

MySQL server安装时集成安装的。$basedir /bin。是连接MySQL数据库的客户端工具,提供命令行界面。

mysql的三种连接方式:

1)使用TCP/IP协议,通过ip+port连接。mysql -u -p -h -p [库名]

2)使用Unix Socket协议。在服务器本机上指定socket文件连接。mysql -u -p -S [库名]

3)图形化工具:navicat,SQLyog,workbench

mysqladmin:

提供给mysql管理员的客户端工具,支持部分mysql数据库的SQL操作并且不需要进入交互界面,提供服务管理和交互选项。

命令结构:mysqladmin [options]

常用命令:ping -> 检查MySQL服务的可用性

processlist -> 查看连接线程状态,相当于交互界面执行show processlist

reload/flush-privileges -> 重载权限表

shutdown -> 关闭数据库实例

variables -> 输出可用的服务器参数,相当于交互界面show variables

extended-status -> 输出mysql服务的状态参数,相当于show status

kill id1,id2.. -> 杀掉mysql连接线程,需要指定thread id

flush-tables -> 将缓冲池里的表刷入磁盘

flush-logs -> 将日志刷新进磁盘

mysqlbinlog:

服务器binlog日志的文本格式化工具,通过binlog做介质恢复的重要工具。

命令结构:mysqlbinlog [options] 常用选项:-d,--database=name -> 只列出指定数据库的相关操作

-r,--result-file=filename -> 将文本格式日志输出到指定文件

--start-datetime -> 指定起始日期

--stop-datetime -> 指定结束日期

--start-position -> 指定起始位点

--stop-position -> 指定结束位点

-v,--verbose -> 重现SQL语句

--base64-output -> 当使用row模式的binlog时。需要指定这个值为DECODE-ROWS

mysqlshow:

客户端对象查找工具,查找对象包括库,表,列或索引

命令结构:mysqlshow [options] [db_name[tab_name[col_name]]],连接的选项与mysql工具相同。

常用选项:--count -> 显示数据库和表的统计信息

-k,--keys -> 显示指定表中的所有索引

-i,--status -> 显示表的一些状态信息

mysqldumpslow:

慢日志格式化工具

命令结构:mysqldumpslow [options] 常用选项:mysqldumpslow -s t 按平均执行时间排序

mysqldumpslow -s r 按平均返回的行数排序

perror:

错误代码查看工具

命令结构:perror [options] 89413f85598e8fa24c0fc150c6e4096e.png

MySQL备份与恢复

xtrabackup:

1)概念:

开源备份工具需要额外安装。MySQL冷备,mysqldump,MySQL热拷贝都无法实现对数据库的增量备份。而Percona-Xtrabackup就是为了实现增量备份而出现的一款主流备份工具,xtrabackup有两个工具,xtrabackup和innobackup。

物理热备工具,支持MySQL、Percona server和MariaDB。开源免费,只支持xtraDB和innoDB两种数据引擎不支持MyISAM引擎。

2)优点:

备份速度快,物理备份可靠;

备份过程不会打断正在执行的事务,不需要锁表;

能够基于压缩等功能节约磁盘空间和流量;

自动备份校验;

还原速度快;

可以将备份传输到另外一台机器上;

在不增加服务器负载的情况下备份数据。

3)备份原理:

4675df7341fdbf163a3b3c62d5c40fdd.png

(1)innobackupex启动后,会先fork一个进程,用于启动xtrabackup,然后等待xtrabackup备份ibd数据文件;

(2)xtrabackup在备份innoDB数据是,有2种线程:redo拷贝线程和ibd数据拷贝线程。xtrabackup进程开始执行后,会启动一个redo拷贝的线程,用于从最新的checkpoint点开始顺序拷贝redo.log;再启动ibd数据拷贝线程,进行拷贝ibd数据。这里是先启动redo拷贝线程的。在此阶段,innobackupex进行处于等待状态(等待文件被创建)

(4)xtrabackup拷贝完成ibd数据文件后,会通知innobackupex(通过创建文件),同时xtrabackup进入等待状态(redo线程依旧在拷贝redo.log)

(5)innobackupex收到xtrabackup通知后,执行FLUSH TABLES WITH READ LOCK(FTWRL),取得一致性位点,然后开始备份非InnoDB文件(如frm、MYD、MYI、CSV、opt、par等格式的文件),在拷贝非InnoDB文件的过程当中,数据库处于全局只读状态。

(6)当innobackup拷贝完所有的非InnoDB文件后,会通知xtrabackup,通知完成后,进入等待状态;

(7)xtrabackup收到innobackupex备份完成的通知后,会停止redo拷贝线程,然后通知innobackupex,redo.log文件拷贝完成;

(8)innobackupex收到redo.log备份完成后,就进行解锁操作,执行:UNLOCK TABLES;

(9)最后innbackupex和xtrabackup进程各自释放资源,写备份元数据信息等,innobackupex等xtrabackup子进程结束后退出。

4)安装流程:

rpm包安装:

https://www.percona.com/downloads/XtraBackup/LATEST/

mysqldump:

MySQL的逻辑备份工具,不需要额外安装。容易使用,支持细粒度备份恢复方便。缺点是备份和恢复速度比较慢。

常用选项:--single-transaction -> InnoDB引擎使用,begin work开始一个全局性的事务,保证了整个备份的一致性,同时又没有锁表操作

--lock-all-tables -> 备份期间为所有表施加读锁,会阻塞DML操作,适合MyISAM引擎。

--master-data=2 -> 在备份文件中记录当前二进制日志的位置

--triggers -> 备份触发器

--routines -> 备份存储过程和函数

--quick -> 不启用缓存,可加快备份速度

--events -> 备份数据的同时备份时间调度器代码

恢复:mysqldump工具的备份文件为SQL文件,恢复时执行脚本即可。

MySQL主从复制:

主从复制原理介绍:

85acf6e9b44951c86466e7081d64819f.png

主库事务提交时在binlog中记录Events

创建复制后,从库的IO线程连接主库

主库的binlog dump线程推送binlog日志的事件给IO线程

从库IO线程接受主库的binlog事件,并保存到从库的Relay Log

从库的SQL线程读取并应用Relay Log中更新的数据库事件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值