https://onitroad.com 更多教程

脚本

这是小脚本:

#!/bin/bash
date=$(date +%Y%m%d-%H%M%S)
mysqladmin stop-slave
mysql --vertical -e "SHOW SLAVE STATUS" | egrep 'Relay_Master_Log_File|Exec_Master_Log_Pos' > /backups/mysql/backup-${date}.txt
mysqldump --opt --flush-privileges --all-databases > /backups/mysql/backup-${date}.sql
mysqladmin start-slave
如何在 MySQL Replication Slave 上使用 shell 脚本进行逻辑备份

本文中的示例脚本使用 bash shell。
还假设已经安装了 MySQL 并且已经初始化了从站。
对于 MySQL 5.7 及更高版本,该脚本仅适用于单源复制。
要备份的服务器应配置为从服务器。

如果我们设置了一台或者多台从服务器来复制主服务器上的数据库,我们可以定期停止其中一台从服务器上的复制,以对数据库进行干净的逻辑备份。
这样的脚本可能类似于下面列出的示例脚本。

这是一个简化的脚本,仅用作示例。
你应该写一些更详细的东西,至少添加以下内容:

  • 错误检查和处理
  • mysqladmin、mysql 和 mysqldump 都需要针对数据库进行身份验证。有关更多信息,请参阅 MySQL 参考手册中的相应页面:
  • mysql管理员
  • mysql 命令行客户端
  • 转储
  • 密码安全的最终用户教程

mysqladmin 实用程序用于停止和启动从服务器上的复制。
在第一行,脚本使用系统函数 date 捕获日期并将其转换为合适的格式(例如,20110926-141500)。
此变量与脚本中的 mysqldump 一起使用,用于每天更改转储文件的名称。
我们可以将转储文件的文件路径和名称设置为首选项。

SHOW SLAVE STATUS 将获取 binlog 文件的名称和 master 上的位置。

为了专门将 mysqldump 与 InnoDB 一起使用,可以使用 -single-transaction 选项来防止在整个转储过程中锁定表。
然而,仍然有必要确保在进行转储时不更新 mysql 系统数据库中的 MyISAM 表。
所有这些都与直接在主服务器上执行转储的情况相同。
如果使用 -single-transaction 选项,只要 mysqldump 开始转储第一个表,只要没有对任何 MyISAM(或者其他非事务表)进行更新,包括更新,就可以再次启动从属线程使用 GRANT 命令获取用户信息。

日期:2020-09-17 00:11:38 来源:oir作者:oir