MySQL已经内置支持多种类型的复制。复制通常是为了增强性能和容错。配置复制是一个比较复杂而容易出错的。不过不用担心哈,MySQL Utilities 提供的工具可以帮助简化和自动化,甚至一些复制相关的任务。
假设我们需要使用复制来改进服务的吞吐量,通过添加更多的服务器到现有的复制架构中。这些副本允许向外扩展,读写分离,所有的读请求发送到从上。
我们将使用mysqlreplicate工具来完成该任务,然后使用mysqlrpladmin 工具来检查结果。
环境如下:Server1 IP为 192.168.1.1 端口为 13001,要添加两台服务器,Server2 IP为192.168.1.2 端口为13001 Server3 IP为192.168.1.3 端口为3306。
实例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
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标记,使复制从主二进制日志中的第一个事件开始。
同时,使用mysqlrplcheck 工具来检查复制的健康状况。在上面例子中, “Check slave delay”失败的,表明从正赶上主。当从读取并应用完主二进制日志中的所有事务,”Check slave delay”检测将是pass的。
权限
m_account 用户需要对mysql数据库的 SELECT 和 INSERT 权限,以及REPLICATION SLAVE, REPLICATION CLIENT 和 GRANT OPTION 权限。
slave_acc 用户需要有SUPER 权限。
对于 –rpl-user 选项的用户,要么自动创建要么已经存在,需要有REPLICATION SLAVE权限。
当使用GTIDs,slave_acc 用户还需要有对mysql数据库的SELECT 权限,才能成功执行mysqlrplcheck 工具。
小技巧
mysqlreplicate工具可以使用–test-db选项来创建一个虚拟的数据库来测试复制设置。从而,mysqlrplcheck 工具提供更详细的信息。
如前所述,-b标记,使复制从主二进制日志中的第一个事件开始。省略这个标记,复制将从当前的二进制日志开始。
使用 –master-log-file 和 –master-log-pos 选项分别制定主日志文件和主日志位置来决定到底从哪开始复制。
-p标记用来确保复制只在主从存储引擎匹配下执行。
mysqlrplcheck 工具,可以使用-s选项来检查show slave status命令的输出。这是有用的,来检查是什么原因导致”Is slave connected”失败的。也可以使用 –master-log-file 选项来读取主信息文件。
也可以使用–verbose选项来获取更多信息。
文章转载来自:ttlsa.com