`
snoopy7713
  • 浏览: 1149012 次
  • 性别: Icon_minigender_2
  • 来自: 火星郊区
博客专栏
Group-logo
OSGi
浏览量:0
社区版块
存档分类
最新评论

如何建立SSH加密的MySQL复制

阅读更多

对数据库管理员来说,MySQL颇多吸引人之处,例如它的免费和开源,以及拥有详尽的文档和内置支持数据复制等。但是安全管理员会迅速指出它的一个缺陷:加密。政府对数据隐私保护的要求极为严格,通过局域网或广域网复制数据都需要加密。

尽管可以通过编译MySQL使其支持SSL,但许多二进制发行版并未激活该功能。打开一个SQL提示符,然后键入命令“show variables like '%ssl%”。如果“have_ssl”或“have_openssl”被设置为“No”,则很不幸该功能未被激活。幸运的是,我们还有另一种选择来从源代码重新编译。安全外壳(SSH)支持数据隧道(data-tunneling),它可以建立一个类似VPN的迷你环境,来提供透明加密。首先,我们将使用一个用户名/密码建立一条SSH隧道。我们将通过使用RSA密钥对远端进行认证。一旦隧道正常运行后,我们将设置数据复制。

建立隧道

SSH隧道使用端口转发技术来连接到从属服务器上的一个TCP端口,在本文示例中该端口是7777,它通过SSH被转发到主MySQL服务器上的 TCP端口3306。确保MySQL主服务器端的SSH隧道被激活,默认情况下它一般都处于激活状态。在MySQL从属服务器上,执行以下命令“ssh -f user@master_ip -L 7777:master_ip:3306 -N”。使用主服务器的一个系统用户账号和IP地址分别替换user和master_ip。你可能希望使用一个仅用于数据复制的用户,将其shell设定到/bin/false上。另外你可以使用从服务器上的任何可用端口替换7777。在主数据库端,你将被提示输入用户账号和密码。

现在从MySQL1从服务器上运行“mysql -h 127.0.0.1 -P 7777”,来连接MySQL主服务器。切记不能使用localhost,因为在MySQL中它有别的含义。如果需要,可以在该命令后追加“-u -p”来指定一个MySQL账号和密码。如果你获得一个“permission denied”消息,那么需要检查MySQL主服务器上的授权声明。授权声明应该被捆绑到主计算机的真实IP地址,因为它才是被转发的MySQL1连接的真正源地址。被转发的连接不是来自于localhost或127.0.0.1。

设置复制

现在隧道已经建好,接下来该设置数据复制了。这个过程与典型的MySQL复制设置完全相同。编辑主服务器上的my.cnf文件,增加以下两行代码:

log-bin=mysql-bin

server-id=1

接下来,创建复制账号。在MySQL中,运行以下查询语句:
CREATE USER 'replicationuser'@'master_ip' IDENTIFIED BY 'replicationpassword';
GRANT REPLICATION SLAVE ON *.* TO 'replicationuser'@'master_ip';

在从属服务器端,将以下代码增加到my.cnf文件中:

server-id = 2

master-host = 127.0.0.1

master-user = replicationuser

master-password = replicationpassword

master-port = 7777

重启主服务器和从服务器上的MySQL服务。对于新创建的复制环境,你可能需要手动拷贝数据库到从服务器上。参考MySQL指南(16.1章节),可以获得创建数据快照和更多复制选项的详细信息。这一切都做完后,检查复制是否生效。分别在主服务器和从服务器上执行一个“select”查询;返回结果应该是相同的。在主服务器上执行insert、update或delete数据,改变“select”返回结果的记录集。等待几秒钟后,重新执行 “select”查询。如果复制功能已经生效,主从服务器上得到结果应该仍然是相同的。

你可能希望使用预共享的RSA密钥来取代必须键入密码。通过使用密钥,你可以设置看门狗shell脚本,来确保SSH通道处于激活状态,而且如果该通道失效,它将自动重启。另外,考虑在主服务器上创建一个Cron守护进程,来使用当前的unix时间戳来更新数据表。从服务器可以增加一个检查该值的 Cron守护进程。如果它滞后当前时间戳太大,复制功能可能已被破坏,管理员应该收到告警邮件。

明确MySQL复制相关的两点重要事项

关于MySQL复制,有两点重要事项需要记住。首先,其主要目的是灾难恢复和高可用性,而非备份。在主服务器上执行的每一条数据更改语句,都将在从服务器端重复执行。因此如果你无意键入了“DELETE FROM mytables”语句,并忘记了使用WHERE子句来限定范围,那么你的数据将会同时在主服务器和从服务器上丢失。

第二件需要记住的事情是,你能够在从服务器上创建、更新和删除数据。我遇到过有的开发者为了实现高可用性,创建了同时运行在主服务器和从服务器上的应用程序,并更新了一个被复制的表,每次都破坏了复制功能的正常运行。

因此你需要在应用程序中加入检查逻辑,检查它是否是运行在一个未激活的从属系统上,不要向被复制的表写数据。然后在它上面进行开发者单元测试。

——51CTO王文文:首先要说明的是,虽然这篇文章所用的是SSH技术,但本人还是推荐用SSL来加密MySQL复制。另外关于原文作者提醒的第二个问题就是,如果开发人员坚持想要连入从服务器测试,那推荐使用主主的双向复制。单向复制的话效率高,而双向复制则有它自己的好处。

 

分享到:
评论

相关推荐

    Win 10 ODBC SSH协议远程连接MySQL 3306.docx

    Win 10 ODBC SSH 协议远程连接 MySQL 3306 在本文中,我们将探讨如何使用 Win 10 自带的 OPENSSH 通过 SSH 协议远程连接 MySQL 服务器, 并使用 ODBC 连接到远程 MySQL 服务器。 SSH 协议 SSH(Secure Shell)是...

    ssh2 mysql 注释开发

    SSH2和MySQL是两种在IT领域中广泛应用的技术。SSH2(Secure Shell 2)是一种网络协议,用于在不安全的网络上提供安全的远程登录和其他网络服务。它提供了加密的数据传输,确保了用户身份验证和数据完整性。MySQL则是...

    SSH.rar_mysql ssh_ssh mysql_ssh+mysql

    在IT领域,SSH常用于管理员对服务器进行安全的控制和管理,它提供了加密的数据传输,确保了通信的安全性。在给定的“SSH.rar”压缩包中,我们看到涉及的主要技术是SSH、Struts2、Spring和Hibernate,以及MySQL数据库...

    SSH 登陆 Mysql

    这个过程通常涉及几个关键步骤,包括配置SSH密钥对、设置MySQL用户权限以及建立SSH隧道。 1. **SSH密钥对配置**: - **生成密钥对**:在本地主机上,使用`ssh-keygen`命令生成公钥和私钥对。默认情况下,公钥保存...

    ssh+mysql论坛

    在IT领域,SSH常用于管理员对服务器进行远程管理,它提供了加密的数据传输,确保了命令行交互、文件传输等操作的安全性。SSH框架通常指的是Spring、Struts和Hibernate的组合,这是一种经典的Java Web开发框架,用于...

    SSH框架+Mysql实现用户登录

    这个项目标题“SSH框架+Mysql实现用户登录”表明我们将探讨如何使用这三个框架与MySQL数据库一起构建一个用户登录功能。以下是这些知识点的详细说明: 1. **Struts2**:Struts2是一个基于MVC(Model-View-...

    基于SSH + mysql的商品管理系统

    《基于SSH + MySQL的商品管理系统详解》 在信息技术领域,开发一款功能完备的商品管理系统是一项常见的实践任务,尤其对于学习和研究Java Web技术的学生来说,基于SSH(Struts2、Hibernate、Spring)框架加上MySQL...

    mysql教程ssh配置

    SSH提供了一种安全的网络通信方式,可以让你通过加密的通道远程访问MySQL服务器,防止数据在传输过程中被窃取或篡改。下面将详细讲解如何进行MySQL教程中的SSH配置。 1. **SSH基础知识**: SSH是一种网络协议,...

    SSH和mysql数据库实现用户登录注册分页增删改查

    在这个项目中,SSH框架与MySQL数据库结合,实现了用户登录注册、分页以及数据的增删改查功能,为初学者提供了一个很好的实践案例。 1. **Struts2**:Struts2作为MVC(模型-视图-控制器)框架,负责处理HTTP请求,...

    MYSQL设置ssh登陆.docx

    对于需要远程访问MySQL数据库的情况,使用SSH(Secure Shell)协议进行加密连接是一种非常安全且高效的方式。本文将详细介绍如何设置MySQL通过SSH进行远程登录,帮助读者掌握这一实用技能。 #### 二、基础知识简介 ...

    SSH+MySQL整合用户信息实例

    在这个SSH+MySQL整合用户信息实例中,我们将深入探讨如何使用这三个框架来处理用户登录信息的管理。 首先,让我们了解SSH框架的核心组件: 1. **Struts2**:这是一个MVC(Model-View-Controller)框架,负责处理...

    ssh.rar_SSH登录_ssh_ssh mysql_基于SSH

    在IT领域,SSH常用于管理员对服务器进行远程管理,因为它可以加密所有传输的数据,防止中间人攻击和数据泄露。SSH框架,如Spring、Struts和Hibernate的组合,是一种常用的Java企业级应用开发框架,它提供了丰富的...

    java学生宿舍设备报修系统 ssh+mysql

    《Java学生宿舍设备报修系统:SSH+MySQL的深度解析》 在信息技术高速发展的今天,学生宿舍设备报修系统的建设显得尤为重要,它不仅方便了学生的日常生活,也提升了学校后勤服务的效率。本系统采用SSH(Struts2、...

    ssh.zip_java web ssh_ssh mysql

    标题中的"ssh.zip_java web ssh_ssh mysql"表明这是一个与Java Web开发相关的项目,使用了SSH框架(Struts2、Hibernate、Spring)以及MySQL数据库。这个压缩包可能包含了整个项目的源代码和其他配置文件。 SSH框架...

    ssh+mysql学生成绩管理系统

    【SSH+MySQL学生成绩管理系统】是一个典型的Java Web应用程序,主要使用了Struts2(S)、Spring(S)和Hibernate(H)这三个框架,以及MySQL作为后端数据库。这个项目对于初学者来说是一个很好的学习资源,它涵盖了...

    学生成绩管理系统(SSH+MYSQL).rar

    【学生成绩管理系统(SSH+MYSQL)】是一个基于三大开源框架——Spring、Struts和Hibernate(简称SSH)以及MySQL数据库构建的应用程序。SSH是Java Web开发中常用的MVC(Model-View-Controller)架构模式的实现,而MySQL...

    mysql+ssh配置文档

    SSH隧道是一种利用SSH协议的安全特性,为网络通信建立加密通道的技术。这里我们需要设置一个端口转发,使得可以从当前服务器通过SSH隧道访问MySQL服务器上的3306端口。命令如下: ```bash ssh -NCPf root@192.168....

    基于权限审计的人事管理系统的设计与开发(SSH+MYSQL+JSP+HTML5)

    根据给定的文件信息,该文档主要讨论了如何设计和开发一个基于权限审计的人事管理系统,该项目采用了Java平台SSH框架、MySQL数据库和JSP+HTML5前端技术进行构建。以下是对文档中提到的知识点进行的详细说明: ### 1...

    Pasd.rar_Action!_ssh mysql

    SSH可以提供加密的网络通信,确保数据传输的安全性,尤其是当数据库不在本地时。开发人员可能需要使用SSH客户端库来建立隧道,然后通过这个隧道进行数据库查询和操作。在Action!中,这可能需要集成如Jsch这样的Java ...

    ssh2 jar包(还包括Mysql,oracle和验证码的jar包)

    SSH2是SSH协议的第二版本,它提供了更强的安全性和加密性能。这个jar包可能包含了实现SSH2功能所需的各种类库,允许Java应用程序在不安全的网络环境中进行安全通信。 描述中提到了"Mysql,oracle和验证码的jar包",...

Global site tag (gtag.js) - Google Analytics