MariaDB多线程复制SQL thread和GTID详解

一、简单主从模式配置步骤
环境如下:
db:mariadb-10.0.10-linux-x86_64.tar.gz
os:centos6.7
1、配置主从节点的服务配置文件

1.1、配置master节点:

[mysqld]
binlog-format=ROW
log-bin=master-bin
log-slave-updates=true
#gtid-mode=on
#enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-threads=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=1
report-port=3306
port=3306
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=master.linuxea

[root@mysql-slave mysql]# hostname master.linuxea
[root@mysql-slave mysql]# cat /etc/hosts
192.168.0.100   master.linuxea
192.168.0.101   slave.linuxea
MariaDB [(none)]> show global variables like '%gtid%';
+------------------------+-------+
| Variable_name | Value |
+------------------------+-------+
| gtid_binlog_pos | |
| gtid_binlog_state | |
| gtid_current_pos | |
| gtid_domain_id | 0 |
| gtid_ignore_duplicates | OFF |
| gtid_slave_pos | |
| gtid_strict_mode | OFF |
+------------------------+-------+
7 rows in set (0.02 sec)
创建数据库和表

MariaDB [(none)]> create database linuxea;
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> create table linuxea.t5(Name CHAR(30));
Query OK, 0 rows affected (0.03 sec)

MariaDB [(none)]>
查看
MariaDB [(none)]> show binlog events in 'master-bin.000001';
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| master-bin.000001 | 4 | Format_desc | 1 | 248 | Server ver: 10.0.10-MariaDB-log, Binlog ver: 4 |
| master-bin.000001 | 248 | Gtid_list | 1 | 277 | [] |
| master-bin.000001 | 277 | Binlog_checkpoint | 1 | 321 | master-bin.000001 |
| master-bin.000001 | 321 | Gtid | 1 | 363 | GTID 0-1-1 |
| master-bin.000001 | 363 | Query | 1 | 456 | create database linuxea |
| master-bin.000001 | 456 | Gtid | 1 | 498 | GTID 0-1-2 |
| master-bin.000001 | 498 | Query | 1 | 599 | create table linuxea.t5(Name CHAR(30)) |
+-------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
7 rows in set (0.01 sec)

MariaDB [(none)]>

1.2、配置slave节点:
[root@slave mysql]#·hostname slave.linuxea

[mysqld]
binlog-format=ROW
log-slave-updates=true
#gtid-mode=on
#enforce-gtid-consistency=true
master-info-repository=TABLE
relay-log-info-repository=TABLE
sync-master-info=1
slave-parallel-threads=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
server-id=11
report-port=3306
port=3306
log-bin=mysql-bin.log
datadir=/mydata/data
socket=/tmp/mysql.sock
report-host=slave.linuxea
MariaDB [(none)]>show global variables like '%gtid%';
+------------------------+------------+
| Variable_name | Value |
+------------------------+------------+
| gtid_binlog_pos | 0-200-2129 |
| gtid_binlog_state | 0-200-2129 |
| gtid_current_pos | 0-200-2129 |
| gtid_domain_id | 0 |
| gtid_ignore_duplicates | OFF |
| gtid_slave_pos | |
| gtid_strict_mode | OFF |
+------------------------+------------+
7 rows in set (0.00 sec)

MariaDB [(none)]>
2、创建复制用户

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'user'@'192.168.0.%' IDENTIFIED BY 'pass';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]>
3、为备节点提供初始数据集

锁定主表,备份主节点上的数据,将其还原至从节点;如果没有启用GTID,在备份时需要在master上使用show master status命令查看二进制日志文件名称及事件位置,以便后面启动slave节点时使用。

由于在master上有数据,则手动备份后倒入到从即可!

[root@mysql-slave mysql]# mysqldump --all-databases --lock-all-tables --flush-logs --master-data=2 > /tmp/all.sql
复制到从数据库

[root@mysql-slave mysql]# scp /tmp/all.sql root@192.168.0.101:/tmp/
root@192.168.0.101's password:
all.sql      100%  511KB 510.6KB/s   00:00   
[root@mysql-slave mysql]#
复制完成后导入即可

[root@slave mysql]# mysql < /tmp/all.sql
[root@slave mysql]# mysql -e "show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| linuxea            |
| mysql              |
| performance_schema |
| test               |
+--------------------+
[root@slave mysql]#
4、启动从节点的复制线程

1,打开备份文件查看复制位置
[root@slave mysql]# vim /tmp/all.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000003', MASTER_LOG_POS=395;
MariaDB [(none)]>  CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='user', MASTER_PASSWORD='pass', MASTER_LOG_FILE='master-bin.000003',MASTER_LOG_POS=395;
Query OK, 0 rows affected (0.05 sec)

启动复制进程:
MariaDB [(none)]> start slave;

2,如果启用了GTID功能,则使用如下命令:Gtid_IO_Pos: 0-300-39
mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='user', MASTER_PASSWORD='pass', MASTER_USE_GTID=current_pos;
如:

MariaDB [(none)]> stop slave;
Query OK, 0 rows affected (0.01 sec)

MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='user', MASTER_PASSWORD='pass', MASTER_USE_GTID=current_pos;
Query OK, 0 rows affected (0.07 sec)

MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.02 sec)

MariaDB [(none)]> show slave status\G
*************************** 1. row *************************** Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.100
Master_User: user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000003
Read_Master_Log_Pos: 8879
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 730
Relay_Master_Log_File: master-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 8879
Relay_Log_Space: 1031
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 300
Master_SSL_Crl:
Master_SSL_Crlpath:
Using_Gtid: Current_Pos
Gtid_IO_Pos: 0-300-39
1 row in set (0.00 sec)

MariaDB [(none)]>

验证GTID:

MariaDB [(none)]> show global variables like '%gtid%';
+------------------------+---------------------+
| Variable_name          | Value               |
+------------------------+---------------------+
| gtid_binlog_pos        | 0-300-39            |
| gtid_binlog_state      | 0-200-2257,0-300-39 |
| gtid_current_pos       | 0-300-39            |
| gtid_domain_id         | 0                   |
| gtid_ignore_duplicates | OFF                 |
| gtid_slave_pos         | 0-300-39            |
| gtid_strict_mode       | OFF                 |
+------------------------+---------------------+
7 rows in set (0.00 sec)

MariaDB [(none)]>
验证多线程:
在主库导入数据可在从使用以下进行查看验证
[root@slave mysql]# watch -n .5 "mysql -e 'show slave status\G'"
[root@slave mysql]# watch -n .5 "mysql -e 'show processlist\G'"

双线程已经打开!
MariaDB [(none)]> show global variables like '%parallel%';
+-------------------------------+--------+
| Variable_name | Value |
+-------------------------------+--------+
| slave_domain_parallel_threads | 0 |
| slave_parallel_max_queued | 131072 |
| slave_parallel_threads | 2 |
+-------------------------------+--------+
3 rows in set (0.00 sec)

MariaDB [(none)]>SHOW PROCESSLIST;
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
| Id | User | Host | db | Command | Time | State | Info | Progress |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
| 3 | system user | | NULL | Connect | 22 | Waiting for work from SQL thread | NULL | 0.000 |
| 4 | system user | | NULL | Connect | 22 |Waiting for work from SQL thread | NULL | 0.000 |
| 5 | system user | | NULL | Connect | 22 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL | 0.000 |
| 6 | system user | | NULL | Connect | 22 | Waiting for master to send event | NULL | 0.000 |
| 8 | root | localhost | NULL | Query | 0 | init | SHOW PROCESSLIST | 0.000 |
+----+-------------+-----------+------+---------+------+-----------------------------------------------------------------------------+------------------+----------+
5 rows in set (0.00 sec)

MariaDB [(none)]>

mysql GTID和mariadb不同如下:
MariaDB GTID:

如上中应用MariaDB-10,需要做的修改:
1、不支持的参数:

gtid-mode=on
enforce-gtid-consistency=true
2、修改的参数:
slave-parallel-workers参数修改为slave-parallel-threads

3、连接至主服务使用的命令:
一个新的参数:MASTER_USER_GTID={current_pos|slave_pos|no}

CHANGE MASTER TO master_host="127.0.0.1", master_port=3310, master_user="root", master_use_gtid=current_pos;

时间: 2024-11-30 21:24:52

MariaDB多线程复制SQL thread和GTID详解的相关文章

iOS开发:多线程编程之NSThread的使用详解

  1.简介: 1.1 iOS有三种多线程编程的技术,分别是: 1..NSThread 2.Cocoa NSOperation (iOS多线程编程之NSOperation和NSOperationQueue的使用) 3.GCD 全称:Grand Central Dispatch( iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用) 这三种编程方式从上到下,抽象度层次是从低到高的,抽象度越高的使用越简单,也是Apple最推荐使用的. 这篇我们主要介绍和使用NSThr

php多线程实现方法及用法实例详解_php技巧

下面我们来介绍具体php多线程实现程序代码,有需要了解的同学可参考. 当有人想要实现并发功能时,他们通常会想到用fork或者spawn threads,但是当他们发现php不支持多线程的时候,大概会转换思路去用一些不够好的语言,比如perl. 其实的是大多数情况下,你大可不必使用fork 或者线程,并且你会得到比用fork 或thread 更好的性能. 假设你要建立一个服务来检查正在运行的n台服务器,以确定他们还在正常运转.你可能会写下面这样的代码: 代码如下  <?php $hosts = a

SQL Server COALESCE函数详解及实例_Mysql

SQL Server COALESCE函数详解 很多人知道ISNULL函数,但是很少人知道Coalesce函数,人们会无意中使用到Coalesce函数,并且发现它比ISNULL更加强大,其实到目前为止,这个函数的确非常有用,本文主要讲解其中的一些基本使用:   首先看看联机丛书的简要定义:  返回其参数中第一个非空表达式语法:  COALESCE ( expression [ ,...n ] ) 如果所有参数均为 NULL,则 COALESCE 返回 NULL.至少应有一个 Null 值为 NU

Mysql左连接sql left join 语句详解

mysql教程左连接sql left join 语句详解 mysql左连接查询是联合查询中的一种方式,就是说把两个相关的表通过这种方式联合在一起查询,从而更加方便调用数据,避免多层循环嵌套. 左连接查询所用关键字 left join ,书面解释如下:   左外连接(左连接):结果集既包括连接表的匹配行,也包括左连接表的所有行. 下面我解释一下,也就是说左链接查询的返回结果既包含了left join关键字左边表的全部资料,同时也包含了与左表匹配的右表中的符合条件的资源. 简单的说就是以左表为中心,

SQL语句执行过程详解

SQL语句执行过程详解一条sql,plsql的执行到底是怎样执行的呢?一.SQL语句执行原理:第一步:客户端把语句发给服务器端执行当我们在客户端执行 select 语句时,客户端会把这条 SQL 语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle 客户端是不会做任何的操作,他的主要任务就是把客户端产生的一些 SQL 语句发送给服务器端.虽然在客户端也有一个数据库进程,但是,这个进程的作用跟服务器上的进程作用事不相同的.服务器上的数据库进程才会对SQL 语句进行相关的处理.不

Android多线程----异步消息处理机制之Handler详解

[正文] 虽然是国庆佳节,但也不能停止学习的脚步,我选择在教研室为祖国母亲默默地庆生. 关于Android的多线程知识,请参考本人之前的一篇博客:Android 多线程----AsyncTask异步任务详解 在Android当中,提供了异步消息处理机制的两种方式来解决线程之间的通信问题,一种是今天要讲的Handler的机制,还有一种就是之前讲过的 AsyncTask 机制. 一.handler的引入: 我们都知道,Android UI是线程不安全的,如果在子线程中尝试进行UI操作,程序就有可能会

SQL SERVER存储过程语法详解

SQL SERVER存储过程语法: Create PROC [ EDURE ] procedure_name [ ; number ] [ { @parameter data_type } [ VARYING ] [ = default ] [ OUTPUT ] ] [ ,...n ] [ WITH { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ] [ FOR REPLICATION ] AS sql_statement [ ...n ]

SQL中Merge用法详解_MsSql

MERGE语句是SQL语句的一种.在SQL Server.Oracle数据库中可用,MySQL.PostgreSQL中不可用.MERGE是Oracle9i新增的语法,用来合并UPDATE和INSERT语句.通过MERGE语句,根据一张表(原数据表,source table)或子查询的连接条件对另外一张(目标表,target table)表进行查询,连接条件匹配上的进行UPDATE,无法匹配的执行INSERT.这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于INSERT+UPDATE.

MariaDB复制和pt-table-checksum的用法详解

复制相关的文件: master.info:用于保存从服务器链接主服务器所需要的信息,每行一个值 relay-log.info:文本文件,保存复制位置,包括二进制日志和中继日志的文件及位置 为了复制的安全性: sync_master_info = 1 sync_relay_log = 1 sync_relay_log_info = 1 基于行基于语句复制: 基于语句: 数据量小,易于查看,实用性较强 有些语句也无法做精确复制:无法对使用了触发器,存储过程等代码的应用实现精确复制: 基于行: 能够精