MySQL之备份与恢复和MySQL用户工具(一)

备份与恢复

备份脚本化

为备份写一些脚本是标准做法。展示一个示例程序,其中必定有很多辅助内容,这只会增加篇幅,在这里我们更愿意列举一些典型的备份脚本功能,展示一些Perl脚本的代码片段。你可以把这些当作可重用的代码块,在创建自己的脚本时可以直接组合起来使用。下面将大致按照使用顺序来展示。

  • 1.安全检测
    安全检测可以让自己和同事的生活更简单点——打开严格的错误检测,并且使用英文变量名。
use strict;
use warning FATAL => 'all';
use English qw(-no_match_vars);

如果是在Bash下使用脚本,还可以做更严格的变量检测。下面的设置会替换中有未定义的变量或程序出错退出时产生一个错误。

set -u;
set -e;
  • 2.命令行参数
    增加命令行选项处理最好的方法是标准库,它已经包含在Perl标准安装中.
use Getopt::Long;
Getopt::Long::Configure('no_ignore_case','building');
GetOptions(....);
  • 3.连接MySQL
    标准的Perl DBI库几乎无所不在,提供了许多强大和灵活的功能。使用详情可请参阅Perldoc。可以像下面这样使用DBI 来连接MySQL.
use DBI;
$dbh = DBI -> connect('DBI:mysql:;host=localhost', 'user','p4ssswOrd', {'RaiseError => 1'});

对于编写命令行脚本,请阅读标准mysql程序的–help参数的输出文本,它有许多选项可以更友好地支持脚本。例如,在Bash中遍历数据库列表如下。

mysql -ss -e 'SHOW DATABASES' | while read DB; do
     echo "${DB}"
done
  • 4.停止和启动MySQL
    停止和启动MySQL最好的方法是使用操作系统推荐的方法,例如运行/etc/init.d/mysql init脚本或通过服务控制(在Windows下)。然而这并不是唯一的方法。可以从Perl中用一个已存在的数据库连接来关闭数据库。
$dbh -> func("shutdown", 'admin');

在这个命令完成时不要太指望MySQL已经被关闭——它可能正在关闭的过程中。也可以通过命令行来停掉MySQL.

mysqladmin shutdown
  • 5.获取数据库和表的列表。
    每个备份脚本都会查询MySQL以获取数据库和表的列表。要注意那些是实际上并不是数据库的条目,例如一些日志系统中的lost+found文件夹和INFORMATION_SCHEMA。也要确保脚本已经准备好应付视图,同时也要知道SHOW TABLE STATUS在InnoDB中有大量数据时可能耗时很长。
mysql>SHOW DATABASES;
mysql>SHOW /* !50002 FULL */ TABLES FROM <database>;
mysql>SHOW TABLE STATUS FROM <database>;
  • 6.对表加锁、刷新并解锁
    如果需要对一个或多个表加锁并且/或刷新,要么按名字锁住所需的表,要么使用全局锁锁住所有的表。
mysql>LOCK TABLES <database.table> READ [, ...];
mysql>FLUSH TABLES;
mysql>FLUSH TABLES <database.table> [, ...];
mysql>FLUSH TABLES WITH READ LOCK;
mysql>UNLOCK TABLES;

在获取所有的表并锁住它们时要格外注意竞争条件。期间可能会有新表创建,或有表被删除或重命名。如果一个表一个表地锁住然后备份,将无法得到一致性的备份

  • 7.刷新二进制日志
    让服务器开始一个新的二进制日志非常简单(一般在锁住表后但在备份前做这个操作):
mysql>FLUSH LOGS;

这样做使得恢复和增量备份更简单,因为不需要考虑从一个日志文件中间开始操作。此操作会有一些副作用,比如刷新和重新打开错误日志,也可能销毁老的日志条目,因此,注意不要扔掉需要用到的数据。

  • 8.获取二进制日志位置
    脚本应该获取并记录主库和备库的状态——即使服务器仅是个主库或备库。在这里插入图片描述
mysql>SHOW MASTER STATUS
mysql> SHOW SLAVE STATUS\G

执行这两条语句并忽略错误,以使脚本可以获取到所有可能的信息

  • 9.导出数据
    最好的选择是使用mysqldump、mysqldumper或SELECT INTO OUTFILE

这些都是构造备份脚本的基础。比较困难的部分是将管理和恢复任务脚本话。如果想获得实现的灵感,可以看看ZRM的源码

MySQL用户工具

概述

MySQL服务器发行包中并没有包含针对许多常用任务的工具,例如监控服务器或比较不同服务器间数据的工具。幸运的是,Oracle的商业版提供了一些扩展工具,并且MySQL活跃的开源社区和第三方公司也提供了一系列的工具,降低了自己"重复发明轮子"的需要

接口工具

接口工具可以帮助运行查询,创建表和用户,以及执行其他日常任务等。接下来讲简单介绍一些用于此用途的最流行的工具。一般可以用SQL查询或命令做所有这些或其中大部分的工作——我们这里讨论的工具只是更为方便,可帮助避免错误和加快工作。

  • 1.MySQL Workbech
    MySQL Workbench是一个一站式的工具,可以完成例如管理服务器、写查询、开发存储过程,以及Schema设计图相关的工作。可以通过一个插件接口来编写自己的工具并集成到这个工作平台上,有一些Python脚本和库就使用了这个插件接口。MySQL Workbench有社区版和商业版两个版本,商业版只是增加了一些高级特性。免费版对于大部分需要早已足够了
  • 2.SQLyog
    SQLyog是MySQL最流行的可视化工具之一,有许多很好的特性。它与MySQL Workbench是同级别的工具,但两个工具都有一些对方没有的特性。SQLyog只能在微软的Windows下使用,拥有全部特性的版本需要付费,但有限制功能免费版本
  • 3.phpMyAdmin
    phpMyAdmin是一个流行的管理工具,运行在Web服务器上,并且提供基于浏览器的MySQL服务器访问接口。尽管基于浏览器的访问有时很好,但phpMyAdmin是个大而复杂的工具,曾被指责有许多安全的问题。对此要格外小心。我们建议不要安装在任何可以从互联网访问的地方。
  • 4.Adminer
    Adminer是个基于浏览器的安全的轻量级管理工具,它与phpMyAdmin同类。其他开发者将其定位为phpMyAdmin的更好的替代品。尽管它看起来更安全,但仍建议安装在任何可功开访问的地方时要谨慎

命令行工具集

MySQL包含了一些命令行工具集,例如mysqladmin和mysqlcheck。这些在MySQL手册上都有提及和记录。MySQL社区同样创建了大量高质量的工具包,并有很好的文档支撑这些使用工具集。

  • 1.Percona Toolkit
    Percona Toolkit是MySQL管理员必备的工具包。它源自Baron早期的工具包Maatkit和Aspersa,很多人认为这两个工具应该是正式的MySQL部署必须强制要求使用的。Percona Toolkit包括许多针对类似日志分析、复制完整性检测、数据同步、模式和索引分析、查询建议和数据归档目的的工具。如果刚开始接触MySQL,建议首先学习这些关键的工具:pt-mysql-summary、pt-table-checksum、pt-table-sync和pt-query-digest

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python酷库之旅-第三方库Pandas(009)

目录 一、用法精讲 19、pandas.read_xml函数 19-1、语法 19-2、参数 19-3、功能 19-4、返回值 19-5、说明 19-6、用法 19-6-1、数据准备 19-6-2、代码示例 19-6-3、结果输出 20、pandas.DataFrame.to_xml函数 20-1、语法 20-2、参数 20-3、功能 20-4、返回值 …

【国产开源可视化引擎Meta2d.js】网格

画布背景网格 在线体验&#xff1a; 乐吾乐2D可视化 示例&#xff1a; // 设置默认缺省网格属性 meta2d.store.options.grid true; // 开启 meta2d.store.options.gridColor eeeeee; // 网格线条颜色 meta2d.store.options.gridSize 10; // 格子大小// 设置单个图纸的网格…

Golang | Leetcode Golang题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; func countNodes(root *TreeNode) int {if root nil {return 0}level : 0for node : root; node.Left ! nil; node node.Left {level}return sort.Search(1<<(level1), func(k int) bool {if k < 1<<level {return false}…

【ETABS】【RHINO】案例:Swallow to ETABS

文章目录 01. Swallow Overview总览1 LOAD&#xff1a;Defination of LoadCase、Response Combo2 SectionArea Section and Area Load&#xff08;面截面定义与指定&#xff0c;面荷载指定&#xff09;Frame Section with rebarattr and linear load&#xff08;带钢筋属性框架…

flutter:监听路由的变化

问题 当从路由B页面返回路由A页面后&#xff0c;A页面需要进行数据刷新。因此需要监听路由变化 解决 使用RouteObserver进行录音监听 创建全局变量&#xff0c;不在任何类中 final RouteObserver<PageRoute> routeObserver RouteObserver<PageRoute>();在mai…

Hi3861 OpenHarmony嵌入式应用入门--UDP Server

本篇使用的是lwip编写udp服务端。需要提前准备好一个PARAM_HOTSPOT_SSID宏定义的热点&#xff0c;并且密码为PARAM_HOTSPOT_PSK。 修改网络参数 在Hi3861开发板上运行上述四个测试程序之前&#xff0c;需要根据你的无线路由、Linux系统IP修改 net_params.h文件的相关代码&…

基于轨迹信息的图像近距离可行驶区域方案验证

一 图像可行驶区域方案 1.1 标定场景 1.2 标定步骤 设计一定间距标定场&#xff0c;在标定场固定位置设置摄像头标定标识点。主车开到标定场固定位置录制主车在该位置各个摄像头数据&#xff0c;通过摄像头捕获图像获取图像上关键点坐标pts-2d基于标定场设计&#xff0c;计算…

Python | Leetcode Python题解之第222题完全二叉树的节点个数

题目&#xff1a; 题解&#xff1a; # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightNone): # self.val val # self.left left # self.right right class Solution:def countNodes(self,…

基于字典学习的地震数据降噪(MATLAB R2021B)

稀疏表示基于研究者们提出了许多变换基函数的方法逐渐成型&#xff0c;比如小波域&#xff0c;曲波域&#xff0c;dreamlet 域等&#xff0c;其原理是利用地震信号在变换域内的稀疏性和可分离性以去除噪声。继 Donoho发表非线性去噪方法-小波阈值萎缩方法&#xff0c;在后续的研…

汉中茗茶小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;基础数据管理&#xff0c;茶叶管理&#xff0c;论坛管理&#xff0c;公告管理&#xff0c;茗茶历史管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;茗茶信息&#xf…

阶段三:项目开发---搭建项目前后端系统基础架构:任务9:导入空管基础数据

任务描述 本阶段任务是导入项目的基础数据&#xff0c;包括空管基础数据和离线的实时飞行数据&#xff08;已经脱敏&#xff09;。 任务指导 本阶段任务需要导入两种数据&#xff1a; 1、在MySQL中导入空管基础数据 kongguan.sql空管基础数据表说明&#xff1a; 1告警信息…

JVM原理(二二):JVM虚拟机线程调度与状态转换

1. Java线程调度 Java的线程是被映射到系统的原生线程上实现的 线程调度是指系统为线程分配处理器使用权的过程&#xff0c;调度主要方式有两种&#xff0c;分别是协同式线程调度和抢占式线程调度。 协同式线程调度&#xff1a;如果使用协同式调度的多线程系统&#xff0c;线…

Cortex-A510——内核及汇编

Cortex-A510——内核及汇编 小狼http://blog.csdn.net/xiaolangyangyang 1、异常等级 2、异常等级切换 同步异常&#xff1a; 1、SVC/HVC/SMC&#xff1b; 2、MMU引发的异常&#xff08;内核态EL1发生&#xff0c;发生后不会进行异常等级切换…

Java基础-内部类与异常处理

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、Java 内部类 什么是内部类&#xff1f; 使用内部类的优点 访问局部变量的限制 内部类和继承 内部…

java 闭锁(CountDownLatch)

闭锁&#xff08;CountDownLatch&#xff09;是Java中的一个同步辅助类&#xff0c;用于协调多个线程之间的协作。它允许一个或多个线程等待&#xff0c;直到在其他线程中执行的一组操作完成。闭锁非常适用于需要等待一组事件发生之后再执行某些操作的场景。 import java.uti…

maxwell启动报错:Could not find first log file name in binary log index file

出现该问题是因为&#xff1a;maxwell 读取的是 mysql 的 binlog 日志&#xff0c;而配置文件中的两个值与 binlog 的最新值没有保持一致导致 1. 切换到maxwell的库 show master status;记住图片中的 FIle 和 Position 2. 修改maxwell的配置 SELECT * from positions p ;将…

生物墨水:3D组织生物打印的基石

生物墨水是3D组织生物打印技术的核心组成部分。生物墨水通常由生物材料&#xff08;如水凝胶聚合物&#xff09;与所需的细胞和/或其他生物大分子&#xff08;例如生长因子&#xff09;混合而成。为了成功地进行组织生物打印&#xff0c;生物墨水必须满足以下要求&#xff1a; …

利用面向AWS的Thales Sovereign解决方案保护AI之旅

亚马逊网络服务(AWS)是全球最大的云服务提供商。众所周知&#xff0c;他们致力于提供工具、解决方案和最佳实践&#xff0c;使其客户能够安全地利用AWS上的生成式人工智能 (GenAI) 工作负载。组织正在迅速使用GenAI为企业带来更高的生产力和创造力。在GenAI的几乎所有用途中&am…

昇思MindSpore 25天学习打卡营|day18

DCGAN生成漫画头像 在下面的教程中&#xff0c;我们将通过示例代码说明DCGAN网络如何设置网络、优化器、如何计算损失函数以及如何初始化模型权重。在本教程中&#xff0c;使用的动漫头像数据集共有70,171张动漫头像图片&#xff0c;图片大小均为96*96。 GAN基础原理 这部分原…

C#——多态详情

多态 多态: 是同一个行为&#xff0c;具有多个不同表现形式或形态的能力 多态分为两种 : 静态性多态: 函数重载&#xff0c;符号重载动态性多态: 虚方法&#xff0c;抽象类&#xff0c;接口 静态多态 在编译时&#xff0c;函数和对象的连接机制被称为早期绑定&#xff0c;…