通过SSL检查mysql副本

经过几个小时的努力了解percona工具包(2.1)pt-table-checksum的工作方式,我试着去尝试一下。

情况

  • 运行MySQL复制(Master-active:Master:passive)
  • 从属用户需要通过SSL连接
  • pt-table-checksum不能连接到slave

问题

  • 对于我来说,pt-table-checksum不适用于需要mysql“checksum”用户的SSL

解决scheme的想法

  • 是在活动主数据库上使用pt-table-checksum,
  • 检查本地连接的MySQL-Slave通过ssh隧道,
  • 与“校验和”用户不需要使用SSL

问题

  1. pt-table-checksum(2.1)是否真的无法通过SSL连接?
  2. 如何configurationpt-table-checksum(仅)连接到非内部configuration的从站
  3. DSNs选项可以解决吗?
  4. 如果是这样的话:我不知道它是如何工作的。 你能让我走上正轨吗?
  5. 我应该使用旧版本,还是使用maatkit? (因为我可以在命令行上configuration主/从)
  6. 毕竟:通过不安全的networking校验和副本的最佳做法是什么?pt-table-checksum不能通过SSL工作?

随着希望:)

我从来没有尝试主 – 主复制,但我已经与pt-table-checksumbuild立了SSL连接。 希望以下笔记可以帮助解答一些与SSL有关的问题。

在我的情况下,我有使用SSL连接build立主从复制,并使用Percona Toolkit 2.1.2。 由于设置的方式并不明显,所以我认为我的笔记可能会帮助您节省一些时间和精力。 下面是一个如何获得SSL连接的例子,用于连接主数据库服务器和从属数据库服务器的pt-table-checksum连接。

关键是通过使用“–recursion-method”将默认文件(例如-F = / etc / my.cnf.percona)显式传递给从机,将DSN信息(包含SSL设置) dsn“设置。 根据我在Percona网站上阅读的内容,并通过查看pt-table-checksum代码,DSN信息在Percona Toolkit的后续版本(从2.0开始,我相信)不会从一个连接复制到下一个连接。 所以,你必须与主设备分开设置从属连接。

通过以下方式传递从站连接的DSN信息:
–recursion-method dsn =“D = percona,t = dsns,F = /etc/my.cnf.percona”

假设:
一个。 “percona”数据库帐户对Percona的pt-table-checksum有适当的权限。 我build议使用“REQUIRE SSL”来确保帐户需要使用SSL连接。
湾 从站和主站设置为使用SSL连接

注意:以下所有步骤均在主设备上完成。

(1)要传递DBI连接的SSL设置(即DSNconfiguration),请专门为percona软件创build一个单独的my.cnf文件。

     /etc/my.cnf.percona
     [客户]
     SSL = 1
    用户= Percona的
    密码= XXXXXXXXX
     SSL-capath = /等/ MySQL的/ CA / CRT

     /etc/my.cnf.percona文件将用于build立到主站和从站的SSL连接。

    确保在文件上设置所有权和权限,因为它包含密码:
     chown root:root /etc/my.cnf.percona(如果它还没有被root用户或系统帐户所拥有)
     chmod 0600 /etc/my.cnf.percona

(2)testing/etc/my.cnf.percona设置

  
     #mysql --defaults-file = / etc / my.cnf.percona --host slave.domain.com
     mysql> \ s
     --------------
     mysql Ver 14.14 Distrib 5.5.23,用于Linux(x86_64),使用readline 5.1

    连接ID:162
    当前数据库:   
    当前用户:[email protected]
     SSL:使用的密码是DHE-RSA-AES256-SHA
    当前的寻呼机:stdout
    使用outfile:''
    使用分隔符:
    服务器版本:5.5.23-log MySQL社区服务器(GPL)
    协议版本:10
    连接:通过TCP / IP的slave.domain.com
    服务器字符集:latin1
     Db字符集:latin1
    客户端字符集:utf8
     conn。characterset:utf8
     TCP端口:3306
    正常运行时间:2天2小时8分7秒


     #mysql --defaults-file = /etc/my.cnf.percona --host master.domain.com
     mysql> \ s
     --------------
     mysql Ver 14.14 Distrib 5.5.23,用于Linux(x86_64),使用readline 5.1

    连接ID:581433
    当前数据库:   
    当前用户:[email protected]
     SSL:使用的密码是DHE-RSA-AES256-SHA
    当前的寻呼机:stdout
    使用outfile:''
    使用分隔符:
    服务器版本:5.5.23-log MySQL社区服务器(GPL)
    协议版本:10
    连接:通过TCP / IP的master.domain.com
    服务器字符集:latin1
     Db字符集:latin1
    客户端字符集:utf8
     conn。characterset:utf8
     TCP端口:3306
    正常运行时间:9天3小时5分49秒

(3)在主设备上的percona数据库中设置DSN表


    主人:
    创buildpercona数据库(如果它不存在):

     mysql>创build数据库percona;

    如果percona数据库已经存在,并且你想从头开始重做所有的东西,那么删除校验和&dsns表,如果它们已经存在的话:

     mysql> drop table percona.checksums;  - 只有在确定要重新开始和重做一切时才能做到这一点 
mysql> drop table percona.dsns; - 好吧,放下这个,我们正在下一步重新创build它
在percona数据库中创builddsns表:
mysql>使用percona; mysql> CREATE TABLE`dsns`( - >`id` int(11)NOT NULL AUTO_INCREMENT, - >`parent_id` int(11)DEFAULT NULL, - >`dsn` varchar(255)NOT NULL, - > PRIMARY KEY(`id`) - >); 将从属信息插入表中: mysql> insert into dsns(dsn)values(“h = slave.domain.com”);

(4)运行pt-table-checksum并使用“–recursion-method dsn”设置将默认文件(-F = / etc / my.cnf.percona)显式地传递给从服务器


     / usr / bin / pt-table-checksum -F /etc/my.cnf.percona h = master.domain.com --recursion-method dsn =“D = percona,t = dsns,F = / etc / my。 cnf.percona”

    主连接使用“-F /etc/my.cnf.percona h = master.domain.com”
    从属连接使用'--recursion-method dsn =“D = percona,t = dsns,F = /etc/my.cnf.percona”'

这应该在percona数据库中创build校验和表,并使用SSL连接连接到从站(和主站)。

我从来没有使用percona工具包,但在我看来

(2) pt-table-checksum不是用来“连接”到一个从机; 它被devise为直接在某台机器上运行,并在同一台机器上生成校验和(并可select连接到主机)。

(6)对于通常的文件,通过不安全networking校验和副本的最佳实践是:通过ssh的隧道rsync。 (这里的“rsync”是指许多实用程序内部使用的rsync协议 – rsync实用程序,重复,rsyncrypto,rdiff-backup,dirvish等)。 我偶尔会使用rsync --dryrun校验,告诉我备份/从服务器是否与主服务器相同。 但更多的时候,我运行的rsync没有–dryrun选项。 如果没有这个选项,如果检测到任何差异,rsync自动继续使备份/奴隶是最新的。

唉,对于写入活动高的数据库,磁盘上的数据库映像(这是rsync可以看到的)通常处于不一致的状态。 为了让rsync产生一个有用的备份/副本,我们通常需要暂时closures链接两端的数据库软件,使其将RAM中的所有数据刷新到磁盘,执行rsync更新,然后重新启动数据库软件。 这通常是非常快的,因为绝大多数数据通常是不变的,rsync只能传输实际改变的数据的less部分。

(据我所知,数据库感知的实用程序比如rsync的“pt-table-sync”的唯一优点是那些数据库感知的实用程序显然以某种方式将同步执行为一致的状态,而不closures数据库软件)。