mysql从节点主节点单向网络_Mysql主从复制

MySQL复制:

Mysql的扩展

复制:每个节点都要相同的数据集;

向外扩展;

二进制日志;

单向;

复制的功用:

数据分布;

负载均衡(读);

备份

高可用和故障切换;

MySQL升级测试

主从复制:

从节点:

I/O 线程:从master请求二进制日志事件,并保存在中继日志中

SQL 线程:从中继日志读取日志事件,在本地完成重发

主节点:

dump 线程:为每个Slave的I/O线程启动一个dump线程,用于向其发送binary log event.

特点:

异步复制:

主从数据不一致比较常见

复制架构:M/S,M/M

二进制日志事件记录格式:

STATEMEN(语句)

ROW

MIXED

主从配置过程:

主节点:

1、启动二进制日志;

log-bin=master-bin

2、为当前节点设置一个全局唯一的ID号;

server-id=1

3、创建有复制权限的用户账号;

grant replication slave,replication client on *.* to 'repluser'@'10.10.%.%' identified by 'replpass';

从节点:

1、启动中继日志;

relay-log=relay-log

relay-log.index=relay-log.index

2、为当前节点设置一个全局唯一的ID号 ;

server-id=3

3、使用有复制权限的用户账号连接至主服务器,启动复制线程;

change master to master_host='10.10.x.x',master_user='repluser',master_password='replpass',master_log_file='master-bin.000001',master_log_pos=495;

sql>start slave;

如果主节点已经运行一段时间,且有大量数据,如何配置并启动slave节点?

通过备份恢复数据至从服务器;

复制起始位置为备份时,二进制日志文件及其pos.

复制架构中应该注意的问题:

1、限制从服务器为只读;

在从服务器设置为read_only=ON;此限制对拥有SUPER权限的用户均无效;

阻止所以用户:

sql>flush tables with read lock;

2、如何保证主从复制事务安全?

在master节点启用参数:

sync_binlog=ON

如果用到为InnoDB存储引擎:

innodb_flush_log_at_trx_commit=ON

innodb_support_xa=ON

在slave节点:

skip_slave_start=ON

master节点:

sync_master_info      1

slave节点:

sync_relay_log

sync_relay_log_info

主主复制

互为主从:

1、数据不一致;因此,慎用;

2、自动增长ID:

配置一个节点使用奇数id

auto_increment_offset=1

auto_increnent_increment=2

另一个节点为偶数id

auto_increment_offset=2

auto_increnent_increment=2

半同步复制

master:

sql>install plugin rpl_semi_sync_master soname 'semisync_master.so';

sql>set global rpl_semi_sync_master_enabled=1;

sql>show global status like '%semi%';

sql>showglobal variables like '%semi%'

slave:

sql>install plugin rpl_semi_sync_slave soname 'semisync_slave.so';

sql>set global rpl_semi_sync_slave_enabled=1;

sql>show global variables like '%semi%';

复制过滤器:

让从节点仅复制指定的数据库,或指定的数据库的指定表;

有两种实现方式:

1)主服务器仅向二进制日志中记录与特定数据库(特定表)相关的事件;

时间还原无法实现;不建议使用;

2)从服务器在replay中继日志中的事件中,仅读取与特定数据库(特定表)相关的事件应用本地;

问题:会造成网络及磁盘IO浪费

replicate_do_db   设置白名单(数据库)

replicate_ignore_db 设置黑名单

replicate_ignore_table 设置白名单(表)

sql>set global replicate_do_db='xx'

复制的监控和维护

1、清理日志:

sql> purge binary logs to 'bin.xxxxxx';

2、监控日志:

sql>show master status;show processlist;

3、从服务器是否落后主服务器:

Seconds_Behind_Master:0

4、数据库不一致如何修复?

重新复制;

MySQL Replication:

MMM:Multi Master MySQL

MHA:Master HA

对节点进行监控,可实现自动故障转移至其他节点,提升某一从节点为新主节点;

Galera Cluster:wresp

通过wresp协议在全局实现复制,任何一节点都可读写;

MHA:

架构如下:

manager:192.168.1.151

master:192.168.1.152

slave:192.168.1.153

slave:192.168.1.154

一. Master配置:

1、 mysql配置文件:

innodb_file_per_table = 1

skip_name_resolve = 1

log-bin = master-bin

relay-log = relay-bin

server_id=1

2、建立同步账号及管理账号

sql> show master status;

sql> grant replication slave,replication client on *.* to 'repluser'@'192.168.1.%' identified by 'replpass';

sql> flush privileges;

sql> grant all on *.* to 'mhauser'@'192.168.1.%' identified by 'mhapass';

sql> flush privileges;

二. slave配置:

1、 mysql配置文件:

innodb_file_per_table = 1

skip_name_resolve = 1

relay-log = relay-bin

log-bin = master-bin

server_id = 2

read_only = 1

relay_log_purge = 0

2、使用同步账号连接到主节点,并启动服务:

sql> change master to master_host='192.168.1.152',master_user='repluser',master_password='replpass',master_log_file='master-bin.000001',master_log_pos=245;

sql> start slave;

sql> show slave status\G;

三. 建立服务器互信

在其中一台服务器制作公钥及私钥并拷贝到其他服务器:

ssh-keygen -t rsa -P '' 制作公钥

cd .ssh

cat id_rsa.pub >authorized_keys 制作私钥

chmod 600 authorized.keys

mkdir .ssh

scp -p id_rsa authorized_keys 192.168.1.152:/root/.ssh 拷贝到其他服务器

四. 安装MHA软件包

下载并上传MHA安装包

yum install mha4mysql-* -y

五. MHA配置文件:

global配置,为各application 提供默认配置;

application配置:

server:

# mkdir -p /etc/masterha;新建目录

# vim /etc/masterha/app1.cnf; app集群1配置文件

[server default]

user=mhauser

password=mhapass

manager_workdir=/data/masterha/app1

manager_log=/data/masterha/app1/manager.log

remote_workdir=/data/masterha/app1

ssh_user=root

repl_user=repluser

repl_password=replpass

ping_interval=1

[server1]

hostname=192.168.1.152

candidate_master=1

[server2]

hostname=192.168.1.153

candidate_master=1

[server3]

hostname=192.168.1.154

# masterha_check_ssh --conf=/etc/masterha/app1.cnf 检测服务器SSH互

[info] All SSH connection tests passed successfully. 正常

# masterha_check_repl --conf=/etc/masterha/app1.cnf

MySQL Replication Health is OK! 主从复制正常

# masterha_manager --conf=/etc/masterha/app1.cnf 启动管理节点,默认是前台显示

# masterha_check_status --conf=/etc/masterha/app1.cnf

app1 (pid:2953) is running(0:PING_OK), master:192.168.1.152

注意事项:

1、每个服务器关闭防火墙:

systemctl stop firewalld

2、repluser可能没有同步过去,需要重新同步一次。

User repluser does not exist or does not have REPLICATION SLAVE privilege! Other slaves can not start replication from this host.

3、如果主节点宕机,拷贝新主节点的二进制文件,按照时间点进行恢复:

MYSQL按二进制方式备份:

mysqdump -uroot --all-databases --lock-all-tables --master-data=2 >/backup/all.sql;

MYSQL还原数据库按二进制时间节点;

mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001 >incre.sql;

Galera Cluster

1、安装galera分支的mysql版本:

# vim /etc/yum.repos.d/mariadb.repo

[mariadb]

name = MariaDB

baseurl = http://yum.mariadb.org/5.5.56/centos7-amd64/

enabled = 1

gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB

gpgcheck=1

# yum install MariaDB-Galera-server -y

2、修改mysql配置文件

# vim /etc/my.cnf.d/server.cnf

wsrep_provider=/usr/lib64/galera/libgalera_smm.so

wsrep_cluster_address="gcomm://192.168.1.151,192.168.1.152,192.168.1.153"

wsrep_cluster_name='mycluster'

wsrep_node_name='node1'

wsrep_node_address='192.168.1.151'

binlog_format=row

default_storage_engine=InnoDB

innodb_autoinc_lock_mode=2

bind-address=0.0.0.0

3、首次启动,需要初始化集群,在其中一个节点执行如下命令

# /etc/rc.d/init.d/mysql start --wsrep-new-cluster

Starting MySQL..... SUCCESS!

# 关闭SELinux(很重要)

# setenforce 0

# getenforce

sed -i  's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

[root@test152 mysql]# service mysql start

Starting MySQL.170828 16:36:00 mysqld_safe Logging to '/var/lib/mysql/test152.err'.

170828 16:36:00 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

...SST in progress, setting sleep higher....... SUCCESS!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值