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/

评论