MySQL管理工具MySQL Utilities — 使用mysqlreplicate创建复制(47)

默北 MySQLMySQL管理工具MySQL Utilities — 使用mysqlreplicate创建复制(47)已关闭评论11,268字数 3029阅读10分5秒阅读模式

MySQL已经内置支持多种类型的复制。复制通常是为了增强性能和容错。配置复制是一个比较复杂而容易出错的。不过不用担心哈,MySQL Utilities 提供的工具可以帮助简化和自动化,甚至一些复制相关的任务。

假设我们需要使用复制来改进服务的吞吐量,通过添加更多的服务器到现有的复制架构中。这些副本允许向外扩展,读写分离,所有的读请求发送到从上。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

我们将使用mysqlreplicate工具来完成该任务,然后使用mysqlrpladmin 工具来检查结果。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

环境如下:Server1 IP为 192.168.1.1 端口为 13001,要添加两台服务器,Server2 IP为192.168.1.2 端口为13001 Server3 IP为192.168.1.3 端口为3306。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

实例

shell> mysqlreplicate --master=m_account@192.168.1.1:13001 \
--slave=slave_acc1@192.168.1.2:13001 --rpl-user=repl:slavepass -b
# master on 192.168.1.1: ... connected.
# slave on 192.168.1.2: ... connected.
# Checking for binary logging on master...
# Setting up replication...
# ...done.

shell> mysqlreplicate --master=m_account@192.168.1.1:13001 \
          --slave=slave_acc2@192.168.1.3:3306 --rpl-user=repl:slavepass -b
# master on 192.168.1.1: ... connected.
# slave on 192.168.1.3: ... connected.
# Checking for binary logging on master...
# Setting up replication...
# ...done.

shell> mysqlrplcheck --master=m_account@192.168.1.1:13001 \
          --slave=slave_acc1@192.168.1.2:13001

# master on 192.168.1.1: ... connected.
# slave on 192.168.1.2: ... connected.
Test Description                                                     Status
---------------------------------------------------------------------------
Checking for binary logging on master                                [pass]
Are there binlog exceptions?                                         [pass]
Replication user exists?                                             [pass]
Checking server_id values                                            [pass]
Checking server_uuid values                                          [pass]
Is slave connected to master?                                        [pass]
Check master information file                                        [pass]
Checking InnoDB compatibility                                        [pass]
Checking storage engines compatibility                               [pass]
Checking lower_case_table_names settings                             [pass]
Checking slave delay (seconds behind master)                         [FAIL]

Slave is NNN seconds behind master.

# ...done.

shell> mysqlrplcheck --master=m_account@192.168.1.1:13001 \
          --slave=slave_acc2@192.168.1.3:3306

# master on 192.168.1.1: ... connected.
# slave on 192.168.1.3: ... connected.
Test Description                                                     Status
---------------------------------------------------------------------------
Checking for binary logging on master                                [pass]
Are there binlog exceptions?                                         [pass]
Replication user exists?                                             [pass]
Checking server_id values                                            [pass]
Checking server_uuid values                                          [pass]
Is slave connected to master?                                        [pass]
Check master information file                                        [pass]
Checking InnoDB compatibility                                        [pass]
Checking storage engines compatibility                               [pass]
Checking lower_case_table_names settings                             [pass]
Checking slave delay (seconds behind master)                         [FAIL]

Slave is N seconds behind master.

# ...done.

在上面的例子中,我们使用mysqlreplicate 工具设置一个两层的复制拓扑,一主两从。 --master选项指定了server1,--slave选项指定server2和server3。还使用了-b标记,使复制从主二进制日志中的第一个事件开始。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

同时,使用mysqlrplcheck 工具来检查复制的健康状况。在上面例子中, "Check slave delay"失败的,表明从正赶上主。当从读取并应用完主二进制日志中的所有事务,"Check slave delay"检测将是pass的。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

权限

m_account 用户需要对mysql数据库的 SELECT 和 INSERT 权限,以及REPLICATION SLAVE, REPLICATION CLIENT 和 GRANT OPTION 权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

slave_acc 用户需要有SUPER 权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

对于 --rpl-user 选项的用户,要么自动创建要么已经存在,需要有REPLICATION SLAVE权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

当使用GTIDs,slave_acc 用户还需要有对mysql数据库的SELECT 权限,才能成功执行mysqlrplcheck 工具。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

小技巧

mysqlreplicate工具可以使用--test-db选项来创建一个虚拟的数据库来测试复制设置。从而,mysqlrplcheck 工具提供更详细的信息。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

如前所述,-b标记,使复制从主二进制日志中的第一个事件开始。省略这个标记,复制将从当前的二进制日志开始。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

使用 --master-log-file 和 --master-log-pos 选项分别制定主日志文件和主日志位置来决定到底从哪开始复制。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

-p标记用来确保复制只在主从存储引擎匹配下执行。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

mysqlrplcheck 工具,可以使用-s选项来检查show slave status命令的输出。这是有用的,来检查是什么原因导致"Is slave connected"失败的。也可以使用 --master-log-file 选项来读取主信息文件。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

也可以使用--verbose选项来获取更多信息。文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 19/04/2015 01:00:07
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/use-mysqlreplicate-create-replication/