博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MariaDB六之主从复制
阅读量:6859 次
发布时间:2019-06-26

本文共 4300 字,大约阅读时间需要 14 分钟。

一.简

   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,如需转载请自行联系原作者
你可能感兴趣的文章
当安全遇上AI 阿里聚安全算法挑战赛完美收官
查看>>
怪”博士闵万里:用人工智能,解决吃饭出行问题
查看>>
ES6 + Webpack + React + Babel 如何在低版本浏览器上愉快的玩耍(下)
查看>>
日志服务(原SLS)新功能发布(8)--日志服务Web Tracking功能
查看>>
kvm虚拟化学习笔记(十三)之kvm虚拟机磁盘文件读取小结
查看>>
kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
查看>>
SlideView 图片滑动(扩展/收缩)展示效果
查看>>
iOS开发之即时通讯之Socket(AsyncSocket)
查看>>
算法设计
查看>>
unsupported major.minor version 解决方法
查看>>
ExtJS之Ext.getDom
查看>>
数据产品设计专题(5)- 分布式数据仓库技术架构
查看>>
为什么选用 React 创建混合型移动应用?
查看>>
自己收集的关于企业数据安全,等级,备份恢复的方案等文档
查看>>
“System.Collections.Generic.IEnumerable<TestDAL.HistoryData>”不包含“ToList”的定义
查看>>
pg 函数sfa_tmp_sleep()执行越来越慢-sql分析
查看>>
关于游戏中的材质系统
查看>>
CentOS安装及配置DHCP服务器
查看>>
利用webmin修改超级管理员root用户登陆密码
查看>>
Spring Boot:定制type Formatters
查看>>