mysql的两种复制模式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql的两种复制模式相关的知识,希望对你有一定的参考价值。
mysql的复制术语
扩展的方式:
Scale up
Scale Out
复制:
向外扩展
二进制日志
单向
复制功用:
数据分布
负载均衡:读操作,适用于读密集型的应用
备份
高可用和故障切换
mysql升级测试
主从复制:
从服务器:
I/O线程:从master请求二进制日志信息,并保存至中继日志;
SQL线程:从relay log中读取日志信息,在本地完成重放;
异步模式:async
1、从服务器落后于主服务器;
2、主从数据不一致;
二进制日志的格式:SET datetime = now()
1、基于行
2、基于语句
3、混合
双主:
读:负载均衡
写:无法均衡
Perlcona-Galera Cluster
配置过程:
1、master
(1) 启用二进制日志;
(2) 设置一个在当前集群中惟一的server-id;
(3) 创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号;
2、slave
(1) 启用中继日志;
(2) 设置一个在当前集群中惟一的server-id;
(3) 使用有复制权限用户账号连接至主服务器,并启动复制线程;
传统上:一主多从,但一从一主;
而今:一从多主;
服务器程序版本:最好相同;从高;
一、mysql的复制,主从模式
1.主服务器启动二进制日志,编辑/etc/my.cnf在其中增加如下两行内容
server-id=1 mysqld的id号
log-bin=/var/lib/mysql/mysql-bin 指明二进制日志的文件名,和路径
innodb-file-per-table=1
2.主服务器创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
3.从服务器启动中继日志,编辑/etc/my.cnf在其中增加如下四行内容
server-id=2
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
4.从服务器配置从服务功能,首先查看主服务器的二进制pos位置
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,MASTER_USER=‘repluser‘,
MASTER_PMASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000004‘,MASTER_LOG_POS=187;
5.查看从服务器状态,开启IO与mysql进程,开启后就可以在线复制了
SHOW SLAVE STATUSG 查看状态
START SLAVE 开启进展
6.效果展示,在主服务器中创建一个库CREATE DATABASE mydb2;
在从服务器中查看SLAVE 状态,可以看到从服务器已经读取
到pos=272的位置,证明从服务器可以复制
7.作为从服务器,应该不允许被写入数据,即限制从服务器只读
a.在从服务器启动read_only;但仅对非具有SUPER权限的用户有效;
b.阻止所有用户 :MariaDB> FLUSH TABLES WITH READ LOCK;
8.保证复制事务安全
在master节点启用参数:
sync_binlog = on 将内存中的二进制同步到硬盘
如果用到的为InnoDB存储引擎:
innodb_flush_logs_at_trx_commit
innodb_support_xa=on
在slave节点:
skip_slave_start 不让slave线程自动启动,需手动启动
二、mysql的复制,双主模式
双主:
读:负载均衡
写:无法均衡
互为主从:
1.数据不一致;
2.自动增长id
定义一个节点使用奇数id
auto_increment_offset=1
auto_increment_increment=2
定义另一个节点使用偶数id
auto_increment_offset=2
auto_increment_increment=2
(1) 各自使用不同的server id
(2) 都启用binlog和relay log
(3) 定义自动增长的id字段的增长方式
(4) 都授权有复制权限的用户账号
(5) 各自把对方指定为主服务器
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘172.16.%.%‘ IDENTIFIED BY ‘replpass‘;
3.在上面的基础上,两台主机的配置文件/etc/my.cnf
192.168.130.128
配置:server-id=1
log-bin=/var/lib/mysql/mysql-bin
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
auto_increment_offset=1
auto_increment_increment=2
192.168.130.129
配置:server-id=5
log-bin=/var/lib/mysql/mysql-bin
relay-log=/var/lib/mysql/relay-log
relay-log-index=relay-log.index
innodb-file-per-table=1
auto_increment_offset=2
auto_increment_increment=2
4.在每个主机的mysqld上都创建一个有复制权限的用户
192.168.130.128
配置:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
192.168.130.128
配置:
GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
‘repluser‘@‘192.168.%.%‘ IDENTIFIED BY ‘replpass‘;
5.查看每个主机的二进制日志pos位置,然后按照该位置,启动每个主机的slave服务
192.168.130.128
配置:
CHANGE MASTER TO MASTER_HOST=‘192.168.130.129‘,
MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000002‘,MASTER_LOG_POS=288;
192.168.130.12
配置:
CHANGE MASTER TO MASTER_HOST=‘192.168.130.128‘,
MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘replpass‘,
MASTER_LOG_FILE=‘mysql-bin.000005‘,MASTER_LOG_POS=106;
6.用START SLAVE;开启两台机的slave功能便可完成双主模型
7.效果展示
当128主机创建一个库时129的读取进度见图,
当129主机创建一个库时128的读取进度见图,
以上是关于mysql的两种复制模式的主要内容,如果未能解决你的问题,请参考以下文章