Linux下最常用的MySQL运维脚本

MySQL是一个广泛用于Web应用程序和服务器的开源关系型数据库管理系统。在Linux环境中,运维MySQL数据库可能涉及到许多日常任务,如备份、性能优化、监控等。为了提高效率,许多运维工作可以通过编写脚本来自动化执行。本文将介绍一些在Linux下最常用的MySQL运维脚本,提供详细的内容和丰富的示例代码。

连接到MySQL数据库

在执行任何MySQL运维任务之前,首先需要连接到MySQL数据库。这可以通过使用mysql命令行工具来实现。

以下是一个连接到MySQL数据库的示例:

mysql -u username -p

其中,username是MySQL用户名,系统会提示您输入密码。

备份与恢复

备份数据库

备份数据库是一项关键的运维任务,以防止数据丢失。可以使用mysqldump命令来备份MySQL数据库。

以下是一个备份数据库的示例:

mysqldump -u username -p dbname > backup.sql

这将把名为dbname的数据库备份到名为backup.sql的文件中。

恢复数据库

如果需要恢复数据库,可以使用以下命令:

mysql -u username -p dbname < backup.sql

这会将备份文件backup.sql中的数据恢复到名为dbname的数据库中。

数据库维护

优化数据库表

定期优化数据库表可以提高查询性能。以下是一个使用OPTIMIZE TABLE命令来优化表的示例:

mysql -u username -p -e "OPTIMIZE TABLE table_name;"

清理数据库日志

MySQL日志文件可能会占用大量磁盘空间。可以使用以下命令来清理旧的日志文件:

mysql -u username -p -e "PURGE BINARY LOGS BEFORE 'date';"

其中,date是要保留的日志文件日期。

监控与性能优化

监控数据库性能

使用SHOW STATUSSHOW VARIABLES命令可以监控MySQL数据库的性能。以下是一个监控查询缓存命中率的示例:

mysql -u username -p -e "SHOW STATUS LIKE 'Qcache_hits';"
mysql -u username -p -e "SHOW STATUS LIKE 'Qcache_inserts';"

通过比较缓存命中率和插入数量,可以了解查询性能。

优化查询语句

使用EXPLAIN语句可以分析查询语句的执行计划,帮助优化查询性能。

以下是一个示例:

mysql -u username -p -e "EXPLAIN SELECT * FROM table_name WHERE condition;"

EXPLAIN将显示有关查询执行的详细信息,包括索引使用情况。

自动化任务

使用cron定期执行任务

可以使用Linux的cron工具来定期执行MySQL运维任务。例如,定期备份数据库可以通过在cron中添加以下条目来实现:

0 2 * * * mysqldump -u username -p dbname > /path/to/backup.sql

这将在每天凌晨2点执行备份任务。

安全性

使用脚本保护敏感信息
在脚本中处理MySQL密码等敏感信息时,应该采取措施来保护它们,如使用环境变量或配置文件。

#!/bin/bash# 从配置文件中读取MySQL密码
MYSQL_PASSWORD=$(cat /path/to/mysql_config)mysql -u username -p$MYSQL_PASSWORD dbname < backup.sql

数据库性能监控

使用 pt-query-digest 分析查询日志

pt-query-digest 是一个强大的工具,用于分析MySQL查询日志并生成性能报告。可以使用它来识别慢查询并优化它们。

pt-query-digest /path/to/mysql-slow.log

这将分析慢查询日志文件并生成详细的报告,包括查询响应时间、频率、索引使用等信息。

监控工具

除了手动分析日志,还可以使用监控工具来实时跟踪MySQL性能。一些常见的MySQL监控工具包括 Prometheus, Grafana, 和 Percona Monitoring and Management (PMM)。这些工具可以帮助可视化监控数据,并设置警报以在性能问题发生时立即获得通知。

数据库复制管理

查看复制状态
如果MySQL环境使用复制,可以使用以下命令来查看复制状态:

SHOW SLAVE STATUS;

这将显示从库的复制状态信息,包括延迟、IO线程状态、SQL线程状态等。

## 切换主从有时候需要切换主库和从库。以下是一个示例脚本,用于执行主从切换:# 在主库上执行
mysql -u username -p -e "STOP SLAVE;"
# 在从库上执行
mysql -u username -p -e "RESET SLAVE;"
mysql -u username -p -e "CHANGE MASTER TO MASTER_HOST='new_master_host', MASTER_USER='replication_user', MASTER_PASSWORD='password';"
mysql -u username -p -e "START SLAVE;"

这将停止从库的复制,重置从库状态,然后将其切换到新的主库。

安全性和权限管理

创建新用户和授权

使用以下命令创建新用户并授权其访问数据库:

CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database_name.* TO 'new_user'@'localhost';
FLUSH PRIVILEGES;

这将创建一个名为new_user的新用户,并授权其访问特定数据库。

密码策略

强化MySQL密码策略对于数据库安全至关重要。可以通过修改my.cnf文件中的密码策略参数来实现。例如:

[mysqld]
validate_password.policy=LOW
validate_password.length=8
validate_password.number_count=1
validate_password.special_char_count=1

这将设置密码策略要求,要求密码至少包含8个字符,其中至少包含一个数字和一个特殊字符。

自动备份

自动备份是确保数据安全的关键。可以使用脚本定期自动备份MySQL数据库,并存储备份文件。

#!/bin/bash# 设置备份目录和文件名
backup_dir="/path/to/backups"
backup_file="backup_$(date +\%Y\%m\%d).sql"# 创建备份目录
mkdir -p $backup_dir# 使用 mysqldump 备份数据库
mysqldump -u username -p dbname > $backup_dir/$backup_file# 清理旧备份(可选)
find $backup_dir -type f -mtime +7 -delete

这将每天创建一个新的备份文件,并可选择保留一周内的备份。

总结

MySQL数据库的运维工作需要一系列的操作,包括性能优化、备份、复制管理、版本升级、权限管理、安全性和自动化。通过编写适当的脚本,可以更高效地管理和维护MySQL数据库,确保其稳定性和安全性。本文提供了更多的示例代码和详细说明,以帮助深入了解如何使用脚本进行MySQL运维。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/749693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode64. 最小路径和

Problem: 64. 最小路径和 文章目录 思路解题方法复杂度Code 思路 动态规划,偷房子问题变形 解题方法 dp[i][j] min(dp[i-1][j],dp[i][j-1])grid[i][j]; 复杂度 时间复杂度: O ( m ∗ n ) O(m*n) O(m∗n) 空间复杂度: O ( m ∗ n ) O(m*n) O(m∗n) Code class Solution { pub…

leetcode代码记录(动态规划基础题(斐波那契数列)

目录 1. 题目&#xff1a;2. 斐波那契数列&#xff1a;小结&#xff1a; 1. 题目&#xff1a; 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a…

[LeetCode][LCR173]点名——二分结合输入数据特点找边界

题目 LCR 173. 点名 某班级 n 位同学的学号为 0 ~ n-1。点名结果记录于升序数组 records。假定仅有一位同学缺席&#xff0c;请返回他的学号。 示例 1&#xff1a; 输入&#xff1a;records [0,1,2,3,5] 输出&#xff1a;4 示例 2&#xff1a; 输入&#xff1a;records [0, …

王道c语言-判断对称数,sprintf应用

Description 输入一个整型数&#xff0c;判断是否是对称数&#xff0c;如果是&#xff0c;输出yes&#xff0c;否则输出no&#xff0c;不用考虑这个整型数过大&#xff0c;int类型存不下&#xff0c;不用考虑负值 方法一 取余乘位权 #include <stdio.h> int main() {i…

TensorFlow的介绍和简单案例

TensorFlow是一个开源的机器学习框架,由Google开发和维护。它旨在使构建和训练机器学习模型变得更加容易,同时提供高度灵活性和可扩展性。 TensorFlow基于数据流图的概念。数据流图是一个由节点和边组成的有向图,其中节点表示操作,边表示数据的流动。TensorFlow通过在数据…

YOLOv9更换iou|包含CIoU、DIoU、MDPIoU、GIoU

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 更换YOLOv9中使用的Iou计算方式&#xff0c;目前支持CIoU、DIoU、MDPIoU、GIoU。 二、Iou模块详解 2.1 模块简介 Iou的主要思想&…

<JavaEE> 数据链路层 -- 以太网协议、MTU限制、ARP协议

目录 以太网协议 什么是以太网&#xff1f; 以太网的帧格式 什么是MAC地址&#xff1f; MAC地址和IP地址的对比&#xff1f; MTU&#xff08;最大传输单元&#xff09;限制 什么是MTU限制&#xff1f; MTU对IP协议有什么影响&#xff1f; MTU对UDP协议有什么影响&…

HDOJ 2034

人见人爱A-B Problem Description 参加过上个月月赛的同学一定还记得其中的一个最简单的题目&#xff0c;就是{A}{B}&#xff0c;那个题目求的是两个集合的并集&#xff0c;今天我们这个A-B求的是两个集合的差&#xff0c;就是做集合的减法运算。&#xff08;当然&#xff0c;…

pre_min[0:10, 2:3] = pre和pre_min[0:10, 2] = pre区别

在NumPy中&#xff0c;数组切片的语法非常具体&#xff0c;它决定了哪些元素被选取或赋值。对于您提到的两个切片表达式&#xff0c;pre_min[0:10, 2:3] 和 pre_min[0:10, 2]&#xff0c;它们有本质的区别&#xff0c;主要体现在所选的维度和形状上。 pre_min[0:10, 2:3]:这个…

微服务:Bot代码执行

每次要多传一个bot_id 判网关的时候判127.0.0.1所以最好改localhost 创建SpringCloud的子项目 BotRunningSystem 在BotRunningSystem项目中添加依赖&#xff1a; joor-java-8 可动态编译Java代码 2. 修改前端&#xff0c;传入对Bot的选择操作 package com.kob.botrunningsy…

【SpringBoot3】整合Druid数据源和Mybatis 项目打包和运行

文章目录 一、整合Druid数据源二、整合Mybatis2.1 MyBatis整合步骤2.1 Mybatis整合实践2.1 声明式事务整合配置2.1 AOP整合配置 三、项目打包和运行命令启动和参数说明 总结web 与 springboot 打包区别JDK8的编译环境 执行17高版本jar 一、整合Druid数据源 创建模块 &#xff1…

云备份项目2

云备份项目 文章目录 云备份项目4. 服务端代码设计4.1 服务端工具类实现4.1.1 文件实用工具类设计4.1.2 Json实用工具类设计 4.2 服务端配置信息模块实现4.2.1 系统配置信息4.2.2 单例文件配置类设计 4.3 服务端数据管理模块实现4.3.1 备份数据类的实现4.3.2 数据管理类的设计 …

Js输入输出语句

输入语法 prompt("您想输入的是&#xff1f;")输出语法: 语法1: document.write(‘要出的内容’&#xff09; <body><script>document.write("你好")document.write("<h1>我是<h1>")</script> </body>作…

Yaml格式解析

文章目录 YAML格式介绍YAML格式解析 YAML格式介绍 YAML&#xff08;YAML Ain’t Markup Language&#xff09;是一种常用于配置文件的人类可读的数据序列化标准。它通常用于存储和传输数据&#xff0c;并且由于其简洁性、可读性和易于编写的特性&#xff0c;它经常被用于编写配…

frida主动调用函数获得数据保存写入到txt文件

1、获取数据到手机内存 function main(){Java.perform(function () {var result "";var flag true;var JavaString Java.use("java.lang.String");Java.choose("cn.xxx.xxxxx", {onMatch : function(instance) {for(var i 1;i<1000;i){if(…

蓝桥杯刷题(九)

1.三国游戏 代码 #输入数据 nint(input()) Xlilist(map(int,input().split())) Ylilist(map(int,input().split())) Zlilist(map(int,input().split())) #分别计算X-Y-Z/Y-Z-X/Z-X-Y并排序 newXli sorted([Xli[i] - Yli[i] - Zli[i] for i in range(n)],reverseTrue) newYli …

Java集合知识点(含源码)

在Java中&#xff0c;集合&#xff08;Collection&#xff09;是一种用于存储对象的数据结构&#xff0c;它提供了一种以更通用的方式存储和操作数据集合的方法。Java集合框架&#xff08;Java Collections Framework&#xff09;是一套提供了大量接口和类的体系&#xff0c;这…

【NTN 卫星通信】 TN和多NTN配合的应用场景

1 场景描述 此场景描述了农村环境&#xff0c;其中MNO (运营商TerrA)仅在城市附近提供本地地面覆盖&#xff0c;而MNO (SatA)提供广泛的NTN覆盖。SatA使用GSO轨道和NGSO轨道上的卫星。SatA与TerrA有漫游协议&#xff0c;允许:   所有TerrA用户的连接&#xff0c;当这些用户不…

【SecurityException: JCE cannot authenticate the provider BC 问题】自定义解决

SecurityException: JCE cannot authenticate the provider BC 问题 hutool.crypto.CryptoException: SecurityException: JCE cannot authenticate the provider BC 先分析异常描述解决方案 先分析异常的描述 JCE cannot authenticate the provider BC&#xff1a;在使用带…

git push解决办法:! [remote rejected] prod -> prod (pre-receive hook declined)

今天想把最近改的东西上传到Gogs上发版一下子的&#xff0c;但是发现有冲突合并不了&#xff0c;于是我切回自己的分支合并了prod&#xff0c;把冲突处理了一下子&#xff0c;还又增加了一点修改&#xff0c;push后.......又回到prod进行git push&#xff0c;哦豁~这就出了问题…