MariaDB六之主从复制

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

一.简

   MariaDB的默认工作模式为异步工作,

   从服务器通过IO thread(向主服务器请求二进制日志中的时间)和SQL thread(从中继日志读取时间并在本地执行)工作

   主服务器通过binlogdump(将从服务器的IO thread请求的时间发送给对方)

二.工作架构

   从服务器有且只能有一个主服务器(MariaDB-10之前),MariaDB-10:支持多主模型,多源复制

   一主多从是可以理想状态

   读写分离:主从模型下,让前端分发器能够识别读/写。并且按需调度至目标主机

   双主模型:master-master

     1.必须设定双方的自动增长属性,以避免冲突

       auto_increment=# 定义自动增长字段起始值

       auto_increment_offset = 2 设定步长

     2.数据不一致

     功用:均衡读请求,写请求双方一样

三、主从复制的配置

   1.环境如下    


ip地址 数据版本 系统版本
master 192.168.1.111 MariDB5.5.36 centos6.5
slave 192.168.1.112 MariDB5.5.36 centos6.5

   2.版本:双方的版本要一致,如果不一致,主的要低于从的

     时间:两台服务器的时间应该同步

   3.从哪儿开始复制

      ①、都从0开始

      ②、主服务器已经运行一段时间,并且存在不小的数据量

   4.从0开始的配置过程

      ①、主服务器

          修改配置文件

1
2
3
4
5
6
7
8
server-id       =  1
服务器通过server-id来判断是否是本机已经执行过的命令
log-bin= /mydata/logs/master-bin
建议将二进制文件不要和数据文件放在同一个目录中
innodb_file_per_table = ON
将innodb的表分开存放
sync_binlog =  1
确保主从复制时的事务安全

          创建有复制权限的账号

1
2
3
4
MariaDB [(none)]> grant replication slave,replication client on *.* to  'wangfeng7399' @ '192.168.1.112'  identified by  'wangfeng7399' ;
授权用户复制权限
MariaDB [(none)]> flush privileges;
通知数据库重读授权库

      ②、从服务器

          修改配置文件

1
2
3
4
5
6
7
8
9
10
11
12
#log-bin=mysql-bin
注释掉从服务器上的二进制文件日志,因为从服务器不会发生写操作,所有不需要开启二进制文件日志
server-id       =  12
修改从服务器上的server-id,一定不要跟主服务器一样
innodb_file_per_table = ON
将innodb的表分开存放
relay_log = /mydata/logs/slave-bin
开启中继日志,
read-only=ON
仅能复制那也不具有 super 权限的用户无法执行写操作
sync_binlog =  1
确保主从复制时的事务安全

          连接主服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
使用格式
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_HEARTBEAT_PERIOD = interval 连接重试的时间
   | MASTER_LOG_FILE =  'master_log_name'  复制开始的文件
   | MASTER_LOG_POS = master_log_pos 复制开始的节点
命令
MariaDB [(none)]> change master to master_host= '192.168.1.111' ,master_user= 'wangfeng7399' ,master_password= 'wangfeng7399' ;
Query OK,  0  rows affected ( 0.06  sec)

         启动复制线程

1
2
3
4
5
6
7
8
9
10
11
12
使用格式
START SLAVE [thread_types]
START SLAVE [SQL_THREAD] UNTIL
     MASTER_LOG_FILE =  'log_name' , MASTER_LOG_POS = log_pos
START SLAVE [SQL_THREAD] UNTIL
     RELAY_LOG_FILE =  'log_name' , RELAY_LOG_POS = log_pos
thread_types:
     [thread_type [, thread_type] ... ]
thread_type: IO_THREAD | SQL_THREAD
命令
MariaDB [(none)]> start slave;
Query OK,  0  rows affected ( 0.00  sec)

        查看从服务器状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
MariaDB [(none)]> show slave status\G
***************************  1 . row ***************************
                Slave_IO_State: Waiting  for  master to send event
                   Master_Host:  192.168 . 1.111  主服务器的ip地址
                   Master_User: wangfeng7399 授权用户
                   Master_Port:  3306
                 Connect_Retry:  60  更新时间
               Master_Log_File: master-bin. 000009  主服务器的二进制日志
           Read_Master_Log_Pos:  507   主服务器的当前节点
                Relay_Log_File: slave-bin. 000002  从服务器的中继日志
                 Relay_Log_Pos:  8473   从服务器的当前节点
         Relay_Master_Log_File: master-bin. 000001
              Slave_IO_Running: Yes
             Slave_SQL_Running: Yes

       ③、测试

           在主服务器上创建数据

1
2
3
4
5
6
7
MariaDB [(none)]>  use  hellodb;
Database changed
MariaDB [hellodb]> create table t2(name char( 20 ));
Query OK,  0  rows affected ( 0.05  sec)
MariaDB [hellodb]> insert into t2 values ( 'zhangsan' ),( 'lisi' );
Query OK,  2  rows affected ( 0.05  sec)
Records:  2   Duplicates:  0   Warnings:  0

           在从服务器上查看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
MariaDB [hellodb]> show tables;
+-------------------+
| Tables_in_hellodb |
+-------------------+
| classes           |
| coc               |
| courses           |
| scores            |
| students          |
| t1                |
| t2                |
| teachers          |
| toc               |
+-------------------+
9  rows  in  set  ( 0.00  sec)
MariaDB [hellodb]> select * from t2;
+----------+
| name     |
+----------+
| zhangsan |
| lisi     |
+----------+
2  rows  in  set  ( 0.01  sec)

         我们可以看到在从上面已经可以看到主上添加的数据了

   5.服务器运行一段时间,并且存在不小的数据集

      应该把主服务器备份,然后在从服务器上恢复,从主服务器上备份处的位置开始复制,在连接主服务器的时候要指定MASTER_LOG_FILE = 'master_log_name' 和MASTER_LOG_POS =master_log_pos ,本处不在给出测试结果,关于如何备份恢复数据库,请移步本人的相关博客http://wangfeng7399.blog.51cto.com/3518031/1394996

切记要将主服务器的二进制日志和从服务器的中继日志的属主和属组改为mysql

6.复制过滤器

       主服务器上可以通过以下来限制

           binlog_do_db  用来定义白名单

           binlog_ignore_db 用来定义黑名单

       从服务器上可以通过以下来限制

           replicate_do_db 数据库白名单

           replicate_ignore_db 数据库黑名单

           replicate_do_table = db_name.table_nmae 表的白名单

           replicate_ignore_table = db_name.table_nmae 表的黑名单

           replicate_wild_do_table 表的白名单还支持正则表达式

           replicate_wild_ignore_table 表的黑名单还支持正则表达式



本文转自wangfeng7399 51CTO博客,原文链接:http://blog.51cto.com/wangfeng7399/1394509,如需转载请自行联系原作者
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
关系型数据库 MySQL 网络安全
MariaDB主从复制(一主一从)
MariaDB主从复制(一主一从)
105 0
|
关系型数据库 MySQL 网络安全
mariadb主从复制
使用阿里云产品简单实现mariadb主从复制
|
存储 Oracle 关系型数据库
MariaDB主从复制虚拟机实战
MariaDB主从复制虚拟机实战
269 0
|
SQL 关系型数据库 MySQL
MariaDB主从复制搭建
我的github 安装MySQL服务器 安装数据库 yum install -y mariadb-server 初始化数据库 mysql_secure_installation #MySql初始化脚本,以下为每一项的翻译 是否设置root密码 输入密码 确认密码 ...
4281 0
|
关系型数据库 测试技术 数据库
|
MySQL 关系型数据库 网络安全
|
监控 关系型数据库 MySQL
|
关系型数据库 数据库 安全
|
监控 关系型数据库 网络安全