mysql运维管理(八):合格的运维管理员必须掌握的常用工具

mysql运维管理(八):合格的运维管理员必须掌握的常用工具,第1张

在MySQL日常运维工作中,经常会用到各种管理工具,这些工具属于mysql自带的管理工具,存储在mysql目录下的bin目录中,例如对象查看,备份,日志分析等,熟练使用是运维开发人员的必备工作,这些工具参数很多,这里介绍常用选项,更多详细可参考帮助文件。

在mysql工具集中,管理员使用最频繁的就是mysql命令了,它是连接数据库的客户端工具,类似oracle中的sqlplus,通过它可以进入mysql控制台界面。在大部分情况下,使用简单,命令语法如下:

常用选项:选项一般有两种表达方式,一种是"-"+选项单词缩写和选项值;另一种是“--”+选项的完整单词“=”选项实际值。例如我们连接数据库的两种命令如下:

myisampack是一个表压缩工具,它对MyISAM存储引擎表能进行高度压缩,可以很大的节省磁盘空间,但是压缩后的表只能读,不能写,不能进行DML *** 作,所以它的使用场景一般是归档 历史 数据。命令如下:

当对一个压缩表进行增加 *** 作时会报一个错误:ERROR 1036 Table is read only,但时对查询和统计时可以正常 *** 作的。

mysqladmin是一个对数据库进行管理 *** 作的客户端工具,可用来检查服务器是否可用、显示数据库版本号和状态,还可以直接新增一个数据库,也可对数据库进行关闭,功能和mysql类似,它的参数和mysql差异不大,命令如下:

它还可以修改root密码,命令如下

MySQL自带的mysqlbinlog工具的作用是解析二进制binlog的日志内容,把二进制数据还原成mysql可以执行的SQL语句。我有篇文章专门介绍该工具的使用,请具体参考:

传送门:mysql运维管理(七):使用Mysqlbinlog工具恢复增量数据

mysqlcheck工具可以用来检查和修复MyISAM存储引擎的表,还能做优化的工作,例如check、repair、analyze、optimize等等功能。具体命令如下:

注意,如果是innodb引擎的表,不能用上述优化工具。

mysqldump工具用来逻辑备份数据库,或者数据迁移。该工具是最常用的备份工具。

我有篇文章专门介绍该工具的使用,请具体参考:

传送门:mysql运维管理(五):掌握MySQLdump逻辑备份工具使用

它是数据导入工具,专门用来处理mysqldump 加-T选项后导出的文本文件,基本用法很简单,命令如下:

客户端对象查找工具,用来查找数据库,数据库的表,表中列或者索引,具体使用命令如下:

不加任何选项,默认显示所有数据库。

常用参数:

--count ,用来显示数据库和表的统计信息,不指定数据库的话,显示所有库信息

-k或者--keys,用来显示指定表中所有索引,例如查看employees库中employees表的索引信息,

在使用mysql使用过程中,会经常出现错误,错误信息都会带有一个编码,具体编码代表什么意思,就需要perror来查看。用法很简单:

举个例子,我们故意写错一个查询语句,例如:

现在有一个编码1054,我们可以用perror查看下

结果跟用工具显示的内容差不多,当然第三方工具也会显示错误信息。

本章做了一个常用工具的使用汇总,并举例说明了基本用法,熟练使用是每个运维人员必修内容,当然还有很多参数没有一一列举,可以参考相关帮助文档。

Logrotate的介绍

显而易见,Logrotate是基于CRON来运行的,其脚本是「/etc/cron.daily/logrotate」:

实际运行时,Logrotate会调用配置文件「/etc/logrotate.conf」:

这里的设置可以理解为Logrotate的缺省值,当然了,可以我们在「/etc/logrotate.d」目录里放置自己的配置文件,用来覆盖Logrotate的缺省值。

Logrotate的演示

按天保存一周的Nginx日志压缩文件,配置文件为「/etc/logrotate.d/nginx」:

如果你等不及CRON,可以通过如下命令来手动执行:

当然,正式执行前最好通过Debug选项来验证一下,这对调试也很重要:

BTW:类似的还有Verbose选项,这里就不多说了。

Logrotate的疑问

大家可能注意到了,我在前面Nginx的例子里声明日志文件的时候用了星号通配符,也就是说这里可能涉及多个日志文件,比如:access.log和error.log。说到这里大家或许就明白了,sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。

它们都是用来控制保存多少日志文件的,区别在于rotate是以个数为单位的,而maxage是以天数为单位的。如果我们是以按天来轮转日志,那么二者的差别就不大了。

前面我们说过,Logrotate是基于CRON运行的,所以这个时间是由CRON控制的,具体可以查询CRON的配置文件「/etc/crontab」,可以手动改成如23:59等时间执行:

如果使用的是新版CentOS,那么配置文件为:/etc/anacrontab。

以Nginx为例,是通过postrotate指令发送USR1信号来通知Nginx重新打开日志文件的。但是其他的应用程序不一定遵循这样的约定,比如说MySQL是通过flush-logs来重新打开日志文件的。更有甚者,有些应用程序就压根没有提供类似的方法,此时如果想重新打开日志文件,就必须重启服务,但为了高可用性,这往往不能接受。还好Logrotate提供了一个名为copytruncate的指令,此方法采用的是先拷贝再清空的方式,整个过程中日志文件的 *** 作句柄没有发生改变,所以不需要通知应用程序重新打开日志文件,但是需要注意的是,在拷贝和清空之间有一个时间差,所以可能会丢失部分日志数据。

BTW:MySQL本身在support-files目录已经包含了一个名为mysql-log-rotate的脚本,不过它比较简单,更详细的日志轮转详见「 Rotating MySQL Slow Logs Safely 」。

熟悉Apache的朋友可能会记得 cronolog ,不过Nginx并不支持它,有人通过mkfifo命令曲线救国,先给日志文件创建管道,再搭配cronolog轮转,虽然理论上没有问题,但效率上有折扣。另外,Debian/Ubuntu下有一个简化版工具savelog,有兴趣可以看看。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8522691.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存