资讯专栏INFORMATION COLUMN

MySQL Replication控制

BLUE / 1942人阅读

摘要:控制相关相当于清除语法或者之前的日志文件将会被删除,此处和是同义词。这个命令在及其以上版本增加了许多特性,例如的概念等等。语法当停止服务器时,应先执行停止功能。

控制Master 1. SHOW相关
show binary logs;/*相当于*/show master logs;
show binlog events;
show master status;
show slave hosts;



2. binary logs清除

语法:

PURGE { BINARY | MASTER } LOGS { TO "log_name" | BEFORE datetime_expr }

log_name或者datetime_expr之前的日志文件将会被删除,此处binary和master是同义词。
datetime_expr日期格式必须为"YYYY-MM-DD hh:mm:ss"。
例子:

PURGE BINARY LOGS TO "mysql-bin.010";
PURGE BINARY LOGS BEFORE "2008-04-02 22:46:26";

当slave正在从master上复制时,上述的语句的执行也是安全的,如果要删除的文件正在被slave读取,那么这个文件将不会被删除。
如果删除了slave还未复制的日志文件,那么slave无法同步这部分被删除的数据。

当要清楚binary logs时,以下步骤是最佳实践:

在每个slave上用show slave status查看正在同步哪个binary log。

在master上执行show binary logs查看日志文件列表

在列表中,找出所有slave正在同步的binary log中那个最靠前的,准备删除这个log之前的logs。

为即将被删除的Logs作备份(非必须,但建议这么做)

最后用purge命令清除日志。

purge命令是根据.index文件里所列的日志文件来进行删除的(.index的前缀就是binlog的名字,这个文件是由mysqld维护的),如果一个日志文件在操作系统中不存在(例如被人为地通过rm命令删除),而.index文件里又记录了这个日志文件,那么purge命令会报错。

3. 重置Master

语法:

reset master;

这个命令会删除.index文件里所列举的所有binary logs,清空.index文件并产生一个新的空的binary log文件。

这个命令还会重置gtid_purged gtid_executed这两个系统变量为空字符串(会话范围内的变量值不会被重置),并且从MySQL5.7.5开始,这个命令还会清空mysql.gtid_executed表。

reset命令和purge命令的区别
当有slave正在进行数据同步时,不应该使用(也不支持)reset master命令,可能带来未知的后果,不过purge命令则可以在slave运行时安全地使用。

当在测试环境中,需要经常初始化设置master和slave时,使用reset master的好处多多,可以按以下步骤初始master-slave:

分别启动master和slave,并启动replication

在master上执行一些语句

检查master的更新是否同步到slave

如果slave正确同步了master的数据,在slave上执行stop slave命令,然后执行reset slave,并确认数据是否删除了数据。

在master上执行reset master命令

通过以上步骤,在测试的时候,就可以清空master的binary log,并且重新开始replication的测试。

4. 暂停replication

命令:

set sql_log_bin=0|1;

0, 不同步至slave
1, 同步至slave

可以在session内进行设置,也可以在全局范围内设置(设置后新建的session会有影响,但已经存在的session不会受影响)

控制Slave 1. SHOW相关
show slave status;
show relaylog events;
2. 指向Master

语法:

CHANGE MASTER TO option [, option] ... [ channel_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 = {0|1}
| RELAY_LOG_FILE = "relay_log_name"
| RELAY_LOG_POS = relay_log_pos
| MASTER_SSL = {0|1}
| 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 = {0|1}
| MASTER_TLS_VERSION = "protocol_list"
| IGNORE_SERVER_IDS = (server_id_list)

channel_option:
    FOR CHANNEL channel

server_id_list:
    [server_id [, server_id] ... ]

CHANGE MASTER TO用来重新设置slave,使其指向新的master,或者仅仅是改变一些上面提到的option。这个命令在MySQL5.7.4及其以上版本增加了许多特性,例如channel的概念等等。待补充。

3. replication过滤

CHANGE REPLICATION FILTER 语法

CHANGE REPLICATION FILTER filter[, filter][, ...]
filter:
REPLICATE_DO_DB = (db_list)
| REPLICATE_IGNORE_DB = (db_list)
| REPLICATE_DO_TABLE = (tbl_list)
| REPLICATE_IGNORE_TABLE = (tbl_list)
| REPLICATE_WILD_DO_TABLE = (wild_tbl_list)
| REPLICATE_WILD_IGNORE_TABLE = (wild_tbl_list)
| REPLICATE_REWRITE_DB = (db_pair_list)
db_list:
db_name[, db_name][, ...]
tbl_list:
db_name.table_name[, db_table_name][, ...]
wild_tbl_list:
"db_pattern.table_pattern"[, "db_pattern.table_pattern"][, ...]
db_pair_list:
(db_pair)[, (db_pair)][, ...]
db_pair:
from_db, to_db

从MySQL5.7.3开始,CHANGE REPLICATION FILTER命令用来为slave设置一个或多个复制过滤规则,比如说`--
replicate-do-db或者 --replicate-wild-ignore-table,这些选项不像服务器选项,重置后还需要重启mysql才生效,这些选项可以动态修改,只需要先停止slave的SQL线程,设置后,再重启SQL线程(start|stop slave sql_thread`)。

各个选项的作用,待补充。

4. MASTER_POS_WAIT()

确切来说,这个一个函数,而非SQL语句 。

SELECT MASTER_POS_WAIT("master_log_file", master_log_pos [, timeout][, channel])

这里的file和pos对应主库show master status得到的值,代表执行位置。 函数逻辑是等待当前从库达到这个位置后返回, 返回期间执行的事务个数。
参数timeout可选,若缺省则无限等待,timeout<=0时与缺省的逻辑相同。若为正数,则等待这么多秒,超时函数返回-1.
其他返回值:若当前slave为启动或在等待期间被终止,返回NULL; 若指定的值已经在之前达到,返回0。

5. 重置slave

语法

RESET SLAVE [ALL] [channel_option]
channel_option:
FOR CHANNEL channel

这个命令清除了slave保存的关于master和relay log的信息,删除所有的relay log。使用这个命令,slave的replication线程必须先停下来。

这个命令还有影响到channel,待补充。

reset slave不会改变slave与master的连接信息,比如master的ip地址,端口,用户名和密码等,reset slave all将会重置连接的信息,因此这意味着需要重启slave的mysqld进程。

6. 跳过执行
SET GLOBAL sql_slave_skip_counter = N
7. start slave

语法:

START SLAVE [thread_types] [until_option] [connection_options] [channel_option]

thread_types:
[thread_type [, thread_type] ... ]
    thread_type:
    IO_THREAD | SQL_THREAD
until_option:
    UNTIL { {SQL_BEFORE_GTIDS | SQL_AFTER_GTIDS} = gtid_set
    | MASTER_LOG_FILE = "log_name", MASTER_LOG_POS = log_pos
    | RELAY_LOG_FILE = "log_name", RELAY_LOG_POS = log_pos
    | SQL_AFTER_MTS_GAPS }
    
connection_options:
[USER="user_name"] [PASSWORD="user_pass"] [DEFAULT_AUTH="plugin_name"] [PLUGIN_DIR="plugin_dir"]

channel_option:
    FOR CHANNEL channel
gtid_set:
uuid_set [, uuid_set] ...
| ""
uuid_set:
    uuid:interval[:interval]...
uuid:
    hhhhhhhh-hhhh-hhhh-hhhh-hhhhhhhhhhhh
h:
    [0-9,A-F]
interval:
    n[-n]
    (n >= 1)

不指定thread_type时,IO线程和SQL线程都会被启动,IO线程从master读取日志,SQL线程读取relay log并执行。

8. stop slave

语法

STOP SLAVE [thread_types]

thread_types:
    [thread_type [, thread_type] ... ]
        
thread_type: IO_THREAD | SQL_THREAD

channel_option:
    FOR CHANNEL channel

当停止slave服务器时,应先执行stop slave停止slave功能。

执行这个命令时,还需要考虑是基于行的replication还是基于语句的replication,存储引擎,以及事务型表和非事务型表。

控制Group复制
start group_replication;
stop group_replication;
Reference

mysql ref5.6
mysql ref5.7

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/46646.html

相关文章

  • MySQL 5.7: 使用组复制(MySQL Group Replication)

    摘要:使用组复制使用实现应用程序的高可用把现有的复制组迁移到使用监视和管理数据库组复制的限制存储引擎必须为每个表必须提供主键只支持,网络需求较高一个组最多只能有台服务器不支持,不支持多主模式不支持事务隔离级别多主模式不能完全支持级联外键约束多主模 MySQL 5.7: 使用组复制(MySQL Group Replication)MySQL 5.7: 使用MySQL Router实现应用程序的...

    Jinkey 评论0 收藏0
  • 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析

    摘要:搭建主从复制,以及复制实现细节分析概念主从复制可以使数据库主服务器的主数据库,复制到一个或多个从服务器从数据库,默认情况下,复制异步根据配置,可以复制数据库中的所有数据库,选定的数据库或甚至选定的表。 搭建 MySQL 5.7.19 主从复制,以及复制实现细节分析 概念 主从复制可以使MySQL数据库主服务器的主数据库,复制到一个或多个MySQL从服务器从数据库,默认情况下,复制异步;...

    focusj 评论0 收藏0
  • MySQLMysql误操作后使用binlog2sql快速回滚

    摘要:不加则同步至执行命令时最新的位置。与或不能同时添加。大部分时候可以解析出来标准和回滚一种情况例外操作之后,。此时虽然在中记录了所有的,但是使用生成标准回滚的时候已经找不到了操作的相应的表无法使用闪回数据。 一、总体解释: DML(data manipulation language):       它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命...

    Hwg 评论0 收藏0
  • Mysql单机多实例搭建说明

    摘要:启动项是内核的一个安全模块,允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。 0 简介 随着互联网技术的发展,数据量越来越庞大,我们急需一个大的存储和大的分析系统。虽然有nosql数据库、hadoop文件存储等数据存储方式能够解决该问题,但是,关系型数据库依然有它的优势所在,尤其是对结构化数据的处理,性能仍然很棒。或者,从公司的项目开发成本讲,关系型数据库的使用比n...

    zero 评论0 收藏0
  • Mysql单机多实例搭建说明

    摘要:启动项是内核的一个安全模块,允许系统管理员将每个程序与一个安全配置文件关联,从而限制程序的功能。 0 简介 随着互联网技术的发展,数据量越来越庞大,我们急需一个大的存储和大的分析系统。虽然有nosql数据库、hadoop文件存储等数据存储方式能够解决该问题,但是,关系型数据库依然有它的优势所在,尤其是对结构化数据的处理,性能仍然很棒。或者,从公司的项目开发成本讲,关系型数据库的使用比n...

    zengdongbao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<