MySQL主从复制(二)


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

1。限制奴隶为只读模式

可以设置在启动参数中。

比;显示全局变量就像“read_only”;

此限制对拥有超级权限的用户都无效。

阻止所有用户:

mysql>刷新表读锁;//将阻塞所有w操作。

//但是中继日志的重放是可以的,不会被阻塞

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

master在执行事务后,应该立即写入都事务日志。 

二进制日志在内存中是有缓冲的。//一旦master宕机,slave仍然没有获取该事务,但是client已经commit,数据不一致 

方法://保证master尽快将事务保存到二进制日志

1)在master启动参数:

sync_binlog=ON//立即刷写二进制日志

如果用到innodb存储引擎:

innodb_flush_logs_at_trx_commit=ON 

innodb_support_xa=ON 

1.在事务提交时立即将事务日志缓冲区中与事务日志相关的数据刷写到事务日志中去

2.xa:分布式事务,基于2段式提交,执行分布式事务。

2)在slave节点上

skip_slave_start=OFF

//在slave启动时,是否自动启动复制线程

//为了事务安全:不建议启动,直接加入很有可能会导致出错

//建议手动启动。该线程

//参考http://www.2cto.com/database/201307/230420.html

//注意:怎么强调数据的安全性都不为过。

slave: 

/var/lib/mysql/

master.info :master的账号密码信息,复制位置等

relay-log.info 从节点自己记录的,复制到哪个二进制日志的哪个position步骤。

show global variables like '%relay_log%';

relay_log_info_file//保存的文件

sync_relay_log

sync_relay_log_info//

master

show global varibales like '%master%';

sync_master_info 0 

//master.info中的信息是否同步到磁盘,从而让slave获取最新信息。

//有必要启动。 

小结:

master:

sync_master_info 

slave:

sync_relay_log 

sync_relay_log_info 

问题2:思考

如果master已经运行一段时间,且有大量数据,

如何配置并启动slave

方法:

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

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


二、如何进行主主复制:

A和B:都同时启动relay-log,binary-log,并互为主从

问题:

1.数据不一致,因此,慎用//选择其中一个,删除另外一个

2.auto_increment, A和B都在自动增长,合并将会出错。

//注意mysql 5.5及其之后的版本,在主主模型中auto_increment这个问题已经解决,不需要单独设定

答:奇数增长:

auto_increment_offset=1

auto_increment_increment=2

//从1开始,一次增长2个

B:偶数增长:auto_increment_offset=2

//左右不均衡怎么办?没有办法

auto_increment_offset=2

auto_increment_increment=2

//从2开始,一次增长2个

3。循环复制

配置步骤:

1。使各节点用一个唯一服务器id

2。都启动二进制日志和继电器log 

3。创建拥有复制权限的用户账号

4。定义自动增长id字段的数值为奇偶

5。均把对方指定为主节点,并启动复制线程

步骤:

主答:

systemctl停止mariadb 

rm射频/var/lib/mysql/*,

vim my.cnf 

(mysqld) log-bin=master-bin

lelay_log=relay-log

服务器id=1,

innodb_file_per_table=,

skip_name_resolve=在

auto_increment_offset=1

auto_increment_increment=2

systemctl开始mariadb 

mysql>显示全局变量如“%日志%”//relay_log log_bin

msyql>格兰特复制奴隶,复制客户端> mysql>冲洗特权;

//现在两个都是干净的

显示主状态//查看对方处于什么位置

master-bin。000003 506

修改主master_host=192.168.1.68, master_user=repuser, master_password=replpass, master_log_file=癿aster-bin.000003”

master_log_pos=506;//从大师的这个位置开始

显示奴隶状态;

开始奴隶;

主B:

systemctl停止mariadb 

rm射频/var/lib/mysql/*

vim my.cnf 

(mysqld) log-bin=master-bin

lelay_log=relay-log

服务器id=5//不一样

innodb_file_per_table=,

skip_name_resolve=在

auto_increment_offset=2//不一样

auto_increment_increment=2

systemctl开始mariadb

msyql>显示全局变量如“%日志%”;//relay-log log-bin 

MySQL主从复制(二)