mysql主从复制-CHANGE MASTER TO 语法详解

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

1 简介
    配置mysql主从复制时,在从机上需要进行CHANGE MASTER TO操作,以确定需要同步的主机IP,用户名,密码,binlog文件,binlog位置等信息。

2 基本语法与实例
    2.1 CHANGE MASTER TO的语法如下:

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
CHANGE MASTER  TO  option  [,  option ] ...  
option :  
     MASTER_BIND =  'interface_name'  
    MASTER_HOST =  'host_name'  
    MASTER_USER =  'user_name'  
    MASTER_PASSWORD =  'password'  
    MASTER_PORT = port_num  
    MASTER_CONNECT_RETRY = interval  
    MASTER_RETRY_COUNT =  count  
    MASTER_DELAY = interval  
    MASTER_HEARTBEAT_PERIOD = interval  
    MASTER_LOG_FILE =  'master_log_name'  
    MASTER_LOG_POS = master_log_pos  
    MASTER_AUTO_POSITION = {01}  
    RELAY_LOG_FILE =  'relay_log_name'  
    RELAY_LOG_POS = relay_log_pos  
    MASTER_SSL = {01}  
    MASTER_SSL_CA =  'ca_file_name'  
    MASTER_SSL_CAPATH =  'ca_directory_name'  
    MASTER_SSL_CERT =  'cert_file_name'  
    MASTER_SSL_CRL =  'crl_file_name'  
    MASTER_SSL_CRLPATH =  'crl_directory_name'  
    MASTER_SSL_KEY =  'key_file_name'  
    MASTER_SSL_CIPHER =  'cipher_list'  
    MASTER_SSL_VERIFY_SERVER_CERT = {01}  
    IGNORE_SERVER_IDS = (server_id_list)  
  server_id_list:  
     [server_id [, server_id] ... ]

  change master to配置和改变slave服务器用于连接master服务器的参数,以便slave服务器读取master服务器的binlog及slave服务器的relay log。同时也更新master info及relay log info信息库。执行该语句前如果从机上slave io及sql线程已经启动,需要先停止(执行stop slave)。
   change master to后面不指定某个参数的话,该参数保留原值或默认值。所以后续如果某些参数没有更改的话,change master to后无需带该参数,例如我们只改变了用于复制的用户密码,那么change master to只需针对MASTER_PASSWORD选项作出修改即可,例如:


1
2
3
mysql> stop slave;   
mysql> change master  to  master_password= 'new_password' ;  
mysql> start slave;
1
mysql> CHANGE MASTER  TO  MASTER_HOST =  '10.*.*.36' , MASTER_USER =  'repl' , MASTER_PASSWORD =  'replpassword' , MASTER_PORT = 3306, MASTER_AUTO_POSITION = 1, MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000;

3 参数解释
    MASTER_HOST, MASTER_USER, MASTER_PASSWORD,MASTER_PORT四个选项提供了slave从机连接到master主机的信息。
    MASTER_HOST 与 MASTER_PORT:
    分别代表master主机名(或IP地址)及mysql实例端口号。
    注意: 复制不能使用unix socet文件,必须使用tcp/ip 连接到master。
    如果我们指定MASTER_HOST 与 MASTER_PORT参数,slave会认为master与之前的不是同一个(即便MASTER_HOST 与 MASTER_PORT所带的参数与之前相同),之前指定的master的binlog文件名及位置将不再适用。所以如果我们在后面不明确指定MASTER_LOG_FILE 和 MASTER_LOG_POS 的参数值,那么MASTER_LOG_FILE='' 以及 MASTER_LOG_POS=4 将会默认的追加到后面。
    设置MASTER_HOST为空(MASTER_HOST=' ')与不设置该参数是不同的,mysql5.5开始,将MASTER_HOST设为空将会失败并报错【验证】
    MASTER_USER 与 MASTER_PASSWORD:
    连接到master主机复制账户所对应的用户名及密码。
    mysql5.6.4及其后续版本,MASTER_USER不能设置为空;当明确设置MASTER_PASSWORD参数时,MASTER_USER 不能设置为空或不进行设置【验证2.1实例】。
    MASTER_PASSWORD参数对应的密码长度最大为32位字符【验证】,如果字符超长(超过32位),语句会执行成功,但超出的长度会被截取掉,mysql复制的这个问题在mysql5.7版本中得到了修复。
    MASTER_LOG_FILE 与 MASTER_LOG_POS:
    这两项确定slave的io线程下次开始执行时从master开始读取的位置坐标,RELAY_LOG_FILE 与 RELAY_LOG_POS这两项确定slave的sql线程下次开始执行时从relay log开始读取的位置坐标。如果我们指定了MASTER_LOG_FILE 或 MASTER_LOG_POS中的任意一项,就不能再指定RELAY_LOG_FILE 或 RELAY_LOG_POS,也不能指定MASTER_AUTO_POSITION = 1 (mysql5.6.5及其后续版本)。如果二者都没有指定,slave使用上次slave sql线程保存的位置。
    RELAY_LOG_FILE 与 RELAY_LOG_POS:
    change master to操作删除所有relay log文件并创建一个新的,除非我们指定RELAY_LOG_FILE 或 RELAY_LOG_POS。如果全局变量relay_log_purge设置为0(默认为ON),relay log也将会保持。
    mysql5.6.2之前,RELAY_LOG_FILE需要配置绝对路径,mysql5.6.2及其后续版本,可以配置相对路径(相对mysql的data目录)。
    MASTER_AUTO_POSITION:
    该参数在mysql5.6.5版本引入,如果进行change master to时使用MASTER_AUTO_POSITION = 1,slave连接master将使用基于GTID的复制协议。
    使用基于GTID协议的复制,slave会告诉master它已经接收到或执行了哪些事务。计算这个集,slave需要读取全局参数gtid_executed以及通过show slave status获取的参数Retrieved_gtid_set。
    结果集作为初次握手的一部分,发送到master,master发回它已经执行的且不在结果集这部分的所有事务。如果这些事务在master的binlog文件中已经被清除,master将会发送一个ER_MASTER_HAS_PURGED_REQUIRED_GTIDS错误信息到slave,复制将不会开启。
    使用基于GTID的复制时(MASTER_AUTO_POSITION = 1),首先要开启gtid_mode(在my.cnf中设置gtid-mode = ON),MASTER_LOG_FILE 与 MASTER_LOG_POS也不能使用,否则会报错。
    使用GTID后想要恢复到老的基于文件的复制协议,在change master to时需要指定MASTER_AUTO_POSITION = 0以及MASTER_LOG_FILE 或 MASTER_LOG_POSITION中至少一项。
    MASTER_CONNECT_RETRY:
    重连到master时的超时等待时间,默认为60秒。
    MASTER_RETRY_COUNT:
    mysql5.6.1引入该参数,限制重连次数以及更新show slave status输出的Master_Retry_Count列。默认值是24 * 3600 = 86400。MASTER_RETRY_COUNT主要用于替代mysqld服务器参数 --master-retry-count(该参数在mysql5.6.1及其后续版本废除)。MASTER_RETRY_COUNT = 0表示重连次数无限制。
    MASTER_HEARTBEAT_PERIOD:
    设置复制心跳的周期,取值范围为0 到 4294967秒。精确度可以达到毫秒,最小的非0值是0.001秒。心跳信息由master在主机binlog日志文件在设定的间隔时间内没有收到新的事件时发出,以便slave知道master是否正常。
    slave连接到master后,该参数可通过mysql.slave_master_info表查看。

1
mysql>  select  from  mysql.slave_master_info \G

SouthEast

 默认值为slave_net_timeout的值除以2,设置为0表示完全的禁用心跳。
    MASTER_DELAY:
    默认值为0,取值范围为0至2^31–1,表示slave至少落后master的复制时间。来自master的事件不直接执行,而是至少等到master执行完该该事件MASTER_DELAY所指定的时间间隔后才执行。
    MASTER_BIND:
    在slave复制从机多网络接口的情况下使用,以确定用哪一个slave网络接口连接到master。该参数在mysql5.6.2版本加入,同时也支持MySQL Cluster NDB 7.3.1及其后续版本。
    该参数可通过show slave status的Master_Bind列进行查看,如果启动mysql时指定了--master-info-repository=TABLE,也可通过mysql.slave_master_info表查看(Bind列)。
    IGNORE_SERVER_IDS = (server_id_list):
    server_id_list: [server_id [, server_id] ... ]
    后面接以逗号分隔的0个或多个server-id,主要用于多主复制或环形复制的情况,处于复制链条中间的服务器异常,可以通过

1
mysql> CHANGE MASTER  TO  MASTER_HOST=xxx IGNORE_SERVER_IDS= [server_id [, server_id] ... ]

  跳过出问题的MySQL实例。

    清除忽略的主机列表使用如下命令:


1
mysql> CHANGE MASTER  TO  IGNORE_SERVER_IDS = ();

    MASTER_SSL*:

    该选项提供使用ssl连接的信息。它们保存在master的信息表,即使slave没有使用SSL选项编译,这些参数依然可以更改,只不过会被忽略。MASTER_SSL_CRL 与 MASTER_SSL_CRLPATH 在 MySQL 5.6.3版本加入。








      本文转自灬落魄灬  51CTO博客,原文链接:http://blog.51cto.com/smoke520/1831939,如需转载请自行联系原作者

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
30天前
|
关系型数据库 MySQL
Mysql常用语法总结
Mysql常用语法总结
22 0
|
30天前
|
SQL 存储 关系型数据库
MySQL的主从复制&主从同步
MySQL的主从复制&主从同步
28 0
|
1月前
|
SQL 关系型数据库 MySQL
MySQL 数据库基本语法
SQL,全称Structured Query Language(结构化查询语言),是一种用于管理关系型数据库(RDBMS)的编程语言。SQL用于创建、修改、查询和删除数据库中的数据,以及定义数据库架构。它是数据库管理系统(DBMS)与应用程序之间的标准通信协议。
77 6
|
2月前
|
关系型数据库 MySQL 数据库
MySQL 的 change buffer 是什么?
MySQL 的 change buffer 是什么?
|
4月前
|
SQL 关系型数据库 MySQL
面试官:说一下MySQL主从复制的原理?
面试官:说一下MySQL主从复制的原理?
88 0
面试官:说一下MySQL主从复制的原理?
|
11天前
|
负载均衡 容灾 关系型数据库
mysql主从复制
mysql主从复制
28 1
|
28天前
|
SQL 存储 运维
MySQL高可用性:主从复制和集群
MySQL高可用性:主从复制和集群
34 0
|
10天前
|
SQL 关系型数据库 MySQL
mysql主从复制
mysql主从复制
|
1月前
|
SQL 网络协议 关系型数据库
【怒怼大厂面试官】听说你精通MySQL?来说说MySQL主从复制
面试官:MySQL主从复制了解吧?嗯嗯了解的。主要是利用了MySQL的Binary Log二进制文件。那我把二进制文件丢给从库,从库复制整个文件吗。噢噢不是的。
48 1
【怒怼大厂面试官】听说你精通MySQL?来说说MySQL主从复制
|
1月前
|
监控 负载均衡 关系型数据库