mysql主从复制-CHANGEMASTERTO语法详解
配置mysql主从复制时,在从机上需要进⾏CHANGE MASTER TO操作,以确定需要同步的主机IP,⽤户名,密码,binlog⽂
件,binlog位置等信息。
2.1 CHANGE MASTER TO的语法如下:
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选项作出修改即可,例如:
mysql> stop slave;
mysql> change master to master_password='new_password';
mysql> start slave;
mysql> CHANGE MASTER TO MASTER_HOST = '10.*.*.36', MASTER_USER = 'repl', MASTER_PASSWORD = 'replpassword', MASTER_PORT = 3306, M
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(在myf中设置gtid-mode = ON),MASTER_LOG_FILE 与 MASTER_LOG_POS也不能使⽤,否则会报错。    使⽤GTID后想要恢复到⽼的基于⽂件的复制协议,在change master to时需要指定MASTER_AUTO_POSI
TION = 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表查看。
mysql> select * from mysql.slave_master_info \G
mysql下载后的初次使用默认值为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,主要⽤于多主复制或环形复制的情况,处于复制链条中间的服务器异常,可以通过
mysql> CHANGE MASTER TO MASTER_HOST=xxx IGNORE_SERVER_IDS= [server_id [, server_id] ... ]
mysql> CHANGE MASTER TO IGNORE_SERVER_IDS = ();
MASTER_SSL*:
该选项提供使⽤ssl连接的信息。它们保存在master的信息表,即使slave没有使⽤SSL选项编译,这些参数依然可以更改,只不过会被忽略。MASTER_SSL_CRL 与 MASTER_SSL_CRLPATH 在 MySQL 5.6.3版本加⼊。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。