mysql 主从 cap_mysql的主从复制

主从不能减轻写的压力

一、一主多从

主:

1、开启二进制日志及设置server_id

bin_log=my_bin

server_id=201

2、创建复制账号(REPLICATION SLAVE,REPLICATION CLIENT)

CREATE USER repuser;

GRANT REPLICATION SLAVE,REPLICATION CLIENT ON . TO repuser@'%' IDENTIFIED BY 'smile';

3、

从:

1、开启中继日志及设置唯一server_id

relay_log=relay_log

server_id=202

skip_slave_start=1 #启动时不自动启用从库同步

2、使用复制账号连接主并启动SQL及I/O进程

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 二进制日志文件中的位置

| RELAY_LOG_FILE = 'relay_log_name'

| RELAY_LOG_POS = relay_log_pos

| MASTER_SSL = {0|1}

| MASTER_SSL_CA = 'ca_file_name'

| MASTER_SSL_CAPATH = 'ca_directory_name'

| MASTER_SSL_CERT = 'cert_file_name'

| MASTER_SSL_KEY = 'key_file_name'

| MASTER_SSL_CIPHER = 'cipher_list'

| MASTER_SSL_VERIFY_SERVER_CERT = {0|1}

| IGNORE_SERVER_IDS = (server_id_list)

CHANGE MASTER TO MASTER_HOST='',MASTER_USER='',MASTER_PASSWORD='',MASTER_LOG_FILE='',MASTER_LOG_POS= ;

START SLAVE;

查看slave状态:SHOW SLAVE STATUS;

MariaDB [(none)]> SHOW SLAVE STATUS\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.201

Master_User: repuser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: my_bin.000002

Read_Master_Log_Pos: 339

Relay_Log_File: relay_log.000006

Relay_Log_Pos: 635

Relay_Master_Log_File: my_bin.000002

Slave_IO_Running: Yes #IO线程状态

Slave_SQL_Running: Yes #SQL线程状态

关于复制的注意事项

1、从库的只读问题

read_only=1 还可以FLUSH TABLES WITH READ LOCK;

2、几个保证安全的参数

1)对于InnoDB引擎来说:

sync_binlog=1

master写binlog与innodb引擎写redo类似,也有参数控制:sync_binlog

= 0 :表示MySQL不控制binlog的刷新,由文件系统自己控制它的缓存的刷新

0 :表示每sync_binlog次事务提交,MySQL调用文件系统的刷新操作将缓存刷下去

其中最安全的就是=1,表示每次事务提交,MySQL都会把binlog缓存刷下去,这样在掉电等情况下,系统才有可能丢失1个事务的数据。当sync_binlog设置为1,对系统的IO消耗也是非常大的。

innodb_flush_log_at_trx_commit

=0 每秒write cache 并且 flush log

=1 每次事务提交后都write cache并且flush log 最安全

=2 每次事务提交后都write cache 根据innodb_flush_logs_at_timeout来flush log

innodb_support_XA=1

mysql的分布式事务

2PC

CAP

BASE

2)从库开机时不自动同步

SKIP_START_SLAVE=1

3)

slave读取master的binlog日志后,需要个文件:relay log、relay log info、master info:

relay log:即读取过来的master的binlog,内容与格式与master的binlog一致

relay log info:记录SQL Thread应用的relay log的位置、文件号等信息

master info:记录IO Thread读取master的binlog的位置、文件号、延迟等信息

master中sync_master_info

sync_relay_log=1

sync_relay_log_info=1

从MySQL5.5.X版本开始,增加了relay_log_recovery参数,这个参数的作用是:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。

relay_log_recovery=1

relay-log-info-repository = TABLE(mysql中有,MariaDB中没有)

二、半同步

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

1)主库安装

安装插件

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

启动模块

MariaDB [(none)]> SET GLOBAL rpL_semi_sync_master_enabled=1;

设置超时时间

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout=20000;

2)从库配置

全备主库并恢复到从库中

可使用mysqldump或者xtarbackup

安装插件

MariaDB [(none)]> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

MariaDB [(none)]> SET GLOBAL rpL_semi_sync_slave_enabled=1;

MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_timeout=20000;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值