天天看点

mysql或者mariadb多线程复制

<b>本页内容整理自《MySQL管理之道》的读书笔记。贴出来便于以后查阅。</b>

<b></b>

多线程复制演示:

以MySQL5.6为例,

在slave上执行下面几条命令:

1

2

3

4

<code>    </code><code>&gt; stop slave;</code>

<code>    </code><code>&gt; </code><code>set</code> <code>global slave_parallel_workers = 4;  【MariaDB里面是slave_parallel_threads】</code>

<code>    </code><code>&gt; start slave;</code>

<code>    </code><code>&gt; show full processlist;可以看到有4个线程 Waiting </code><code>for</code> <code>an event from Coordinator</code>

    如果此时在主上有大量的insert操作,可以在slave上执行&gt; select * from mysql.slave_worker_info\G 应该可以查看到worker_id在不断变化,说明是多线程复制在起作用了。

说明:

slave_parallel_workers 即可实现在slave上多线程并发复制。不过,它只能支持一个实例下多个 database 间的并发复制,并不能真正做到多表并发复制。因此在较大并发负载时,slave还是没有办法及时追上master,需要想办法进行优化(比如:尽量将一个库中的表按照业务逻辑拆分成多个库来保存,这样在写操作时候,slave就能开启多线程复制,减少了同步的时延。)

此外,建议修改my.cnf,增加2行(默认这个info_file是文件的,不写入数据库的)

<code>relay_log_info_repository = table</code>

<code>master_info_repository = table</code>

单单这样还不够,默认这2张表是MyISAM的,不安全还要转换下

<code>&gt; alter table slave_master_info engine innodb;</code>

<code>&gt; alter table slave_relay_log_info engine innodb;</code>

<code>&gt; alter table slave_worker_info engine innodb;</code>

这样的话,可防止表损坏,在损坏后可以自行修复。

本文转自 lirulei90 51CTO博客,原文链接:http://blog.51cto.com/lee90/1795393,如需转载请自行联系原作者